import json
import os
import shutil
import sys
import tempfile
import unittest
import unittest.mock as mock
from pathlib import Path

from huggingface_hub import HfFolder, delete_repo
from requests.exceptions import HTTPError

from transformers import AutoConfig, BertConfig, GPTaConfig
from transformers.configuration_utils import PretrainedConfig
from transformers.testing_utils import TOKEN, USER, is_staging_test


sys.path.append(str(Path(__file__).parent.parent / '''utils'''))

from test_module.custom_configuration import CustomConfig  # noqa E402


__lowercase											=      {
    '''return_dict''': False,
    '''output_hidden_states''': True,
    '''output_attentions''': True,
    '''torchscript''': True,
    '''torch_dtype''': '''float16''',
    '''use_bfloat16''': True,
    '''tf_legacy_loss''': True,
    '''pruned_heads''': {'''a''': 1},
    '''tie_word_embeddings''': False,
    '''is_decoder''': True,
    '''cross_attention_hidden_size''': 128,
    '''add_cross_attention''': True,
    '''tie_encoder_decoder''': True,
    '''max_length''': 50,
    '''min_length''': 3,
    '''do_sample''': True,
    '''early_stopping''': True,
    '''num_beams''': 3,
    '''num_beam_groups''': 3,
    '''diversity_penalty''': 0.5,
    '''temperature''': 2.0,
    '''top_k''': 10,
    '''top_p''': 0.7,
    '''typical_p''': 0.2,
    '''repetition_penalty''': 0.8,
    '''length_penalty''': 0.8,
    '''no_repeat_ngram_size''': 5,
    '''encoder_no_repeat_ngram_size''': 5,
    '''bad_words_ids''': [1, 2, 3],
    '''num_return_sequences''': 3,
    '''chunk_size_feed_forward''': 5,
    '''output_scores''': True,
    '''return_dict_in_generate''': True,
    '''forced_bos_token_id''': 2,
    '''forced_eos_token_id''': 3,
    '''remove_invalid_values''': True,
    '''architectures''': ['''BertModel'''],
    '''finetuning_task''': '''translation''',
    '''id2label''': {0: '''label'''},
    '''label2id''': {'''label''': '''0'''},
    '''tokenizer_class''': '''BertTokenizerFast''',
    '''prefix''': '''prefix''',
    '''bos_token_id''': 6,
    '''pad_token_id''': 7,
    '''eos_token_id''': 8,
    '''sep_token_id''': 9,
    '''decoder_start_token_id''': 10,
    '''exponential_decay_length_penalty''': (5, 1.0_1),
    '''suppress_tokens''': [0, 1],
    '''begin_suppress_tokens''': 2,
    '''task_specific_params''': {'''translation''': '''some_params'''},
    '''problem_type''': '''regression''',
}


@is_staging_test
class 			lowerCamelCase_  (     unittest.TestCase				):






    '''simple docstring'''






    @classmethod
    def     UpperCamelCase__     (			cls) ->			List[str]:
        __UpperCamelCase  :Any    						=	TOKEN
        HfFolder.save_token(__lowercase)







    @classmethod
    def     UpperCamelCase__     (			cls) ->			int:
        try:
            delete_repo(token=cls._token				,				repo_id='''test-config''')
        except HTTPError:
            pass

        try:
            delete_repo(token=cls._token				,				repo_id='''valid_org/test-config-org''')
        except HTTPError:
            pass

        try:
            delete_repo(token=cls._token				,				repo_id='''test-dynamic-config''')
        except HTTPError:
            pass







    def     UpperCamelCase__     (			self) ->			List[Any]:
        __UpperCamelCase  :Optional[Any]    						=	BertConfig(
            vocab_size=99				,				hidden_size=32				,				num_hidden_layers=5				,				num_attention_heads=4				,				intermediate_size=37)
        config.push_to_hub('''test-config'''				,				use_auth_token=self._token)

        __UpperCamelCase  :Tuple    						=	BertConfig.from_pretrained(f"""{USER}/test-config""")
        for k, v in config.to_dict().items():
            if k != "transformers_version":
                self.assertEqual(__lowercase				,				getattr(__lowercase				,				__lowercase))

        # Reset repo
        delete_repo(token=self._token				,				repo_id='''test-config''')

        # Push to hub via save_pretrained
        with tempfile.TemporaryDirectory() as tmp_dir:
            config.save_pretrained(__lowercase				,				repo_id='''test-config'''				,				push_to_hub=__lowercase				,				use_auth_token=self._token)

        __UpperCamelCase  :List[str]    						=	BertConfig.from_pretrained(f"""{USER}/test-config""")
        for k, v in config.to_dict().items():
            if k != "transformers_version":
                self.assertEqual(__lowercase				,				getattr(__lowercase				,				__lowercase))







    def     UpperCamelCase__     (			self) ->			Union[str, Any]:
        __UpperCamelCase  :Optional[int]    						=	BertConfig(
            vocab_size=99				,				hidden_size=32				,				num_hidden_layers=5				,				num_attention_heads=4				,				intermediate_size=37)
        config.push_to_hub('''valid_org/test-config-org'''				,				use_auth_token=self._token)

        __UpperCamelCase  :str    						=	BertConfig.from_pretrained('''valid_org/test-config-org''')
        for k, v in config.to_dict().items():
            if k != "transformers_version":
                self.assertEqual(__lowercase				,				getattr(__lowercase				,				__lowercase))

        # Reset repo
        delete_repo(token=self._token				,				repo_id='''valid_org/test-config-org''')

        # Push to hub via save_pretrained
        with tempfile.TemporaryDirectory() as tmp_dir:
            config.save_pretrained(
                __lowercase				,				repo_id='''valid_org/test-config-org'''				,				push_to_hub=__lowercase				,				use_auth_token=self._token)

        __UpperCamelCase  :str    						=	BertConfig.from_pretrained('''valid_org/test-config-org''')
        for k, v in config.to_dict().items():
            if k != "transformers_version":
                self.assertEqual(__lowercase				,				getattr(__lowercase				,				__lowercase))







    def     UpperCamelCase__     (			self) ->			Optional[int]:
        CustomConfig.register_for_auto_class()
        __UpperCamelCase  :str    						=	CustomConfig(attribute=42)

        config.push_to_hub('''test-dynamic-config'''				,				use_auth_token=self._token)

        # This has added the proper auto_map field to the config
        self.assertDictEqual(config.auto_map				,				{'''AutoConfig''': '''custom_configuration.CustomConfig'''})

        __UpperCamelCase  :Any    						=	AutoConfig.from_pretrained(f"""{USER}/test-dynamic-config"""				,				trust_remote_code=__lowercase)
        # Can't make an isinstance check because the new_config is from the FakeConfig class of a dynamic module
        self.assertEqual(new_config.__class__.__name__				,				'''CustomConfig''')
        self.assertEqual(new_config.attribute				,				42)


class 			lowerCamelCase_  (     unittest.TestCase				):






    '''simple docstring'''






    def     UpperCamelCase__     (			self) ->			Optional[Any]:
        __UpperCamelCase  :Optional[Any]    						=	GPTaConfig()

        # attempt to modify each of int/float/bool/str config records and verify they were updated
        __UpperCamelCase  :List[str]    						=	c.n_embd + 1  # int
        __UpperCamelCase  :Any    						=	c.resid_pdrop + 1.0  # float
        __UpperCamelCase  :str    						=	not c.scale_attn_weights  # bool
        __UpperCamelCase  :Dict    						=	c.summary_type + '''foo'''  # str
        c.update_from_string(
            f"""n_embd={n_embd},resid_pdrop={resid_pdrop},scale_attn_weights={scale_attn_weights},summary_type={summary_type}""")
        self.assertEqual(__lowercase				,				c.n_embd				,				'''mismatch for key: n_embd''')
        self.assertEqual(__lowercase				,				c.resid_pdrop				,				'''mismatch for key: resid_pdrop''')
        self.assertEqual(__lowercase				,				c.scale_attn_weights				,				'''mismatch for key: scale_attn_weights''')
        self.assertEqual(__lowercase				,				c.summary_type				,				'''mismatch for key: summary_type''')







    def     UpperCamelCase__     (			self) ->			Any:
        __UpperCamelCase  :Optional[Any]    						=	PretrainedConfig()
        __UpperCamelCase  :Optional[int]    						=	[key for key in base_config.__dict__ if key not in config_common_kwargs]
        # If this part of the test fails, you have arguments to addin config_common_kwargs above.
        self.assertListEqual(
            __lowercase				,				['''is_encoder_decoder''', '''_name_or_path''', '''_commit_hash''', '''transformers_version'''])
        __UpperCamelCase  :Union[str, Any]    						=	[key for key, value in config_common_kwargs.items() if value == getattr(__lowercase				,				__lowercase)]
        if len(__lowercase) > 0:
            raise ValueError(
                '''The following keys are set with the default values in'''
                ''' `test_configuration_common.config_common_kwargs` pick another value for them:'''
                f""" {', '.join(__lowercase)}.""")







    def     UpperCamelCase__     (			self) ->			Optional[Any]:
        with self.assertRaises(__lowercase):
            # config is in subfolder, the following should not work without specifying the subfolder
            __UpperCamelCase  :Any    						=	BertConfig.from_pretrained('''hf-internal-testing/tiny-random-bert-subfolder''')

        __UpperCamelCase  :Optional[Any]    						=	BertConfig.from_pretrained('''hf-internal-testing/tiny-random-bert-subfolder'''				,				subfolder='''bert''')

        self.assertIsNotNone(__lowercase)







    def     UpperCamelCase__     (			self) ->			str:
        # A mock response for an HTTP head request to emulate server down
        __UpperCamelCase  :int    						=	mock.Mock()
        __UpperCamelCase  :Dict    						=	500
        __UpperCamelCase  :Dict    						=	{}
        __UpperCamelCase  :Any    						=	HTTPError
        __UpperCamelCase  :Tuple    						=	{}

        # Download this model to make sure it's in the cache.
        __UpperCamelCase  :Union[str, Any]    						=	BertConfig.from_pretrained('''hf-internal-testing/tiny-random-bert''')

        # Under the mock environment we get a 500 error when trying to reach the model.
        with mock.patch('''requests.Session.request'''				,				return_value=__lowercase) as mock_head:
            __UpperCamelCase  :int    						=	BertConfig.from_pretrained('''hf-internal-testing/tiny-random-bert''')
            # This check we did call the fake head request
            mock_head.assert_called()







    def     UpperCamelCase__     (			self) ->			Union[str, Any]:
        # This test is for deprecated behavior and can be removed in v5
        __UpperCamelCase  :Optional[int]    						=	BertConfig.from_pretrained(
            '''https://huggingface.co/hf-internal-testing/tiny-random-bert/resolve/main/config.json''')







    def     UpperCamelCase__     (			self) ->			Union[str, Any]:
        __UpperCamelCase  :Any    						=	AutoConfig.from_pretrained('''bert-base-cased''')
        __UpperCamelCase  :Any    						=	['''config.4.0.0.json''']

        with tempfile.TemporaryDirectory() as tmp_dir:
            configuration.save_pretrained(__lowercase)
            __UpperCamelCase  :Any    						=	2
            json.dump(configuration.to_dict()				,				open(os.path.join(__lowercase				,				'''config.4.0.0.json''')				,				'''w'''))

            # This should pick the new configuration file as the version of Transformers is > 4.0.0
            __UpperCamelCase  :Union[str, Any]    						=	AutoConfig.from_pretrained(__lowercase)
            self.assertEqual(new_configuration.hidden_size				,				2)

            # Will need to be adjusted if we reach v42 and this test is still here.
            # Should pick the old configuration file as the version of Transformers is < 4.42.0
            __UpperCamelCase  :Tuple    						=	['''config.42.0.0.json''']
            __UpperCamelCase  :Union[str, Any]    						=	768
            configuration.save_pretrained(__lowercase)
            shutil.move(os.path.join(__lowercase				,				'''config.4.0.0.json''')				,				os.path.join(__lowercase				,				'''config.42.0.0.json'''))
            __UpperCamelCase  :Tuple    						=	AutoConfig.from_pretrained(__lowercase)
            self.assertEqual(new_configuration.hidden_size				,				768)







    def     UpperCamelCase__     (			self) ->			Tuple:
        # This repo has two configuration files, one for v4.0.0 and above with a different hidden size.
        __UpperCamelCase  :Tuple    						=	'''hf-internal-testing/test-two-configs'''

        import transformers as new_transformers

        __UpperCamelCase  :Tuple    						=	'''v4.0.0'''
        __UpperCamelCase  :Any    						=	new_transformers.models.auto.AutoConfig.from_pretrained(
            __lowercase				,				return_unused_kwargs=__lowercase)
        self.assertEqual(new_configuration.hidden_size				,				2)
        # This checks `_configuration_file` ia not kept in the kwargs by mistake.
        self.assertDictEqual(__lowercase				,				{})

        # Testing an older version by monkey-patching the version in the module it's used.
        import transformers as old_transformers

        __UpperCamelCase  :Optional[int]    						=	'''v3.0.0'''
        __UpperCamelCase  :str    						=	old_transformers.models.auto.AutoConfig.from_pretrained(__lowercase)
        self.assertEqual(old_configuration.hidden_size				,				768)






import gc
import random
import unittest

import numpy as np
import torch
from transformers import (
    CLIPImageProcessor,
    CLIPTextConfig,
    CLIPTextModel,
    CLIPTokenizer,
    CLIPVisionConfig,
    CLIPVisionModelWithProjection,
)

from diffusers import AutoencoderKL, DDIMScheduler, DDPMScheduler, StableUnCLIPImgaImgPipeline, UNetaDConditionModel
from diffusers.pipelines.pipeline_utils import DiffusionPipeline
from diffusers.pipelines.stable_diffusion.stable_unclip_image_normalizer import StableUnCLIPImageNormalizer
from diffusers.utils.import_utils import is_xformers_available
from diffusers.utils.testing_utils import (
    enable_full_determinism,
    floats_tensor,
    load_image,
    load_numpy,
    require_torch_gpu,
    skip_mps,
    slow,
    torch_device,
)

from ..pipeline_params import TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS, TEXT_GUIDED_IMAGE_VARIATION_PARAMS
from ..test_pipelines_common import (
    PipelineKarrasSchedulerTesterMixin,
    PipelineLatentTesterMixin,
    PipelineTesterMixin,
    assert_mean_pixel_difference,
)


enable_full_determinism()


class 			lowerCamelCase_  (     UpperCAmelCase_		,			UpperCAmelCase_		,			UpperCAmelCase_		,			unittest.TestCase				):






    '''simple docstring'''






    a__			:		List[str]      			=   StableUnCLIPImgaImgPipeline
    a__			:		Optional[Any]      			=   TEXT_GUIDED_IMAGE_VARIATION_PARAMS
    a__			:		Optional[int]      			=   TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS
    a__			:		str      			=   frozenset(
        []				)  # TO-DO: update image_params once pipeline is refactored with VaeImageProcessor.preprocess
    a__			:		List[Any]      			=   frozenset([]				)







    def     UpperCamelCase__     (			self) ->			List[str]:
        __UpperCamelCase  :Optional[Any]    						=	32
        __UpperCamelCase  :int    						=	embedder_hidden_size

        # image encoding components

        __UpperCamelCase  :Dict    						=	CLIPImageProcessor(crop_size=32				,				size=32)

        torch.manual_seed(0)
        __UpperCamelCase  :Tuple    						=	CLIPVisionModelWithProjection(
            CLIPVisionConfig(
                hidden_size=__lowercase				,				projection_dim=__lowercase				,				num_hidden_layers=5				,				num_attention_heads=4				,				image_size=32				,				intermediate_size=37				,				patch_size=1				,				))

        # regular denoising components

        torch.manual_seed(0)
        __UpperCamelCase  :Union[str, Any]    						=	StableUnCLIPImageNormalizer(embedding_dim=__lowercase)
        __UpperCamelCase  :Any    						=	DDPMScheduler(beta_schedule='''squaredcos_cap_v2''')

        torch.manual_seed(0)
        __UpperCamelCase  :List[Any]    						=	CLIPTokenizer.from_pretrained('''hf-internal-testing/tiny-random-clip''')

        torch.manual_seed(0)
        __UpperCamelCase  :str    						=	CLIPTextModel(
            CLIPTextConfig(
                bos_token_id=0				,				eos_token_id=2				,				hidden_size=__lowercase				,				projection_dim=32				,				intermediate_size=37				,				layer_norm_eps=1E-0_5				,				num_attention_heads=4				,				num_hidden_layers=5				,				pad_token_id=1				,				vocab_size=1_000				,				))

        torch.manual_seed(0)
        __UpperCamelCase  :Any    						=	UNetaDConditionModel(
            sample_size=32				,				in_channels=4				,				out_channels=4				,				down_block_types=('''CrossAttnDownBlock2D''', '''DownBlock2D''')				,				up_block_types=('''UpBlock2D''', '''CrossAttnUpBlock2D''')				,				block_out_channels=(32, 64)				,				attention_head_dim=(2, 4)				,				class_embed_type='''projection'''				,				projection_class_embeddings_input_dim=embedder_projection_dim * 2				,				cross_attention_dim=__lowercase				,				layers_per_block=1				,				upcast_attention=__lowercase				,				use_linear_projection=__lowercase				,				)

        torch.manual_seed(0)
        __UpperCamelCase  :Dict    						=	DDIMScheduler(
            beta_schedule='''scaled_linear'''				,				beta_start=0.0_00_85				,				beta_end=0.0_12				,				prediction_type='''v_prediction'''				,				set_alpha_to_one=__lowercase				,				steps_offset=1				,				)

        torch.manual_seed(0)
        __UpperCamelCase  :Any    						=	AutoencoderKL()

        __UpperCamelCase  :Dict    						=	{
            # image encoding components
            '''feature_extractor''': feature_extractor,
            '''image_encoder''': image_encoder.eval(),
            # image noising components
            '''image_normalizer''': image_normalizer.eval(),
            '''image_noising_scheduler''': image_noising_scheduler,
            # regular denoising components
            '''tokenizer''': tokenizer,
            '''text_encoder''': text_encoder.eval(),
            '''unet''': unet.eval(),
            '''scheduler''': scheduler,
            '''vae''': vae.eval(),
        }

        return components







    def     UpperCamelCase__     (			self				,				__lowercase				,				__lowercase=0				,				__lowercase=True) ->			Tuple:
        if str(__lowercase).startswith('''mps'''):
            __UpperCamelCase  :int    						=	torch.manual_seed(__lowercase)
        else:
            __UpperCamelCase  :int    						=	torch.Generator(device=__lowercase).manual_seed(__lowercase)

        __UpperCamelCase  :Tuple    						=	floats_tensor((1, 3, 32, 32)				,				rng=random.Random(__lowercase)).to(__lowercase)

        if pil_image:
            __UpperCamelCase  :Tuple    						=	input_image * 0.5 + 0.5
            __UpperCamelCase  :Any    						=	input_image.clamp(0				,				1)
            __UpperCamelCase  :Any    						=	input_image.cpu().permute(0				,				2				,				3				,				1).float().numpy()
            __UpperCamelCase  :int    						=	DiffusionPipeline.numpy_to_pil(__lowercase)[0]

        return {
            "prompt": "An anime racoon running a marathon",
            "image": input_image,
            "generator": generator,
            "num_inference_steps": 2,
            "output_type": "np",
        }







    @skip_mps
    def     UpperCamelCase__     (			self) ->			Tuple:
        __UpperCamelCase  :int    						=	'''cpu'''  # ensure determinism for the device-dependent torch.Generator
        __UpperCamelCase  :Dict    						=	self.get_dummy_components()
        __UpperCamelCase  :Dict    						=	StableUnCLIPImgaImgPipeline(**__lowercase)
        __UpperCamelCase  :int    						=	sd_pipe.to(__lowercase)
        sd_pipe.set_progress_bar_config(disable=__lowercase)

        __UpperCamelCase  :Optional[int]    						=	self.get_dummy_inputs(__lowercase)
        inputs.update({'''image_embeds''': None})
        __UpperCamelCase  :Any    						=	sd_pipe(**__lowercase).images
        __UpperCamelCase  :int    						=	image[0, -3:, -3:, -1]

        assert image.shape == (1, 32, 32, 3)
        __UpperCamelCase  :Union[str, Any]    						=	np.array([0.38_72, 0.72_24, 0.56_01, 0.47_41, 0.68_72, 0.58_14, 0.46_36, 0.38_67, 0.50_78])

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







    def     UpperCamelCase__     (			self) ->			Dict:
        __UpperCamelCase  :Union[str, Any]    						=	torch_device in ['''cpu''', '''mps''']

        self._test_attention_slicing_forward_pass(test_max_difference=__lowercase)







    def     UpperCamelCase__     (			self) ->			Optional[int]:
        __UpperCamelCase  :List[Any]    						=	torch_device in ['''cpu''', '''mps''']

        self._test_inference_batch_single_identical(test_max_difference=__lowercase)







    @unittest.skipIf(
        torch_device != '''cuda''' or not is_xformers_available()				,				reason='''XFormers attention is only available with CUDA and `xformers` installed'''				,				)
    def     UpperCamelCase__     (			self) ->			Optional[Any]:
        self._test_xformers_attention_forwardGenerator_pass(test_max_difference=__lowercase)


@slow
@require_torch_gpu
class 			lowerCamelCase_  (     unittest.TestCase				):






    '''simple docstring'''






    def     UpperCamelCase__     (			self) ->			Optional[Any]:
        # clean up the VRAM after each test
        super().tearDown()
        gc.collect()
        torch.cuda.empty_cache()







    def     UpperCamelCase__     (			self) ->			str:
        __UpperCamelCase  :Union[str, Any]    						=	load_image(
            '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/turtle.png''')

        __UpperCamelCase  :str    						=	load_numpy(
            '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/stable_unclip_2_1_l_img2img_anime_turtle_fp16.npy''')

        __UpperCamelCase  :Optional[int]    						=	StableUnCLIPImgaImgPipeline.from_pretrained(
            '''fusing/stable-unclip-2-1-l-img2img'''				,				torch_dtype=torch.floataa)
        pipe.to(__lowercase)
        pipe.set_progress_bar_config(disable=__lowercase)
        # stable unclip will oom when integration tests are run on a V100,
        # so turn on memory savings
        pipe.enable_attention_slicing()
        pipe.enable_sequential_cpu_offload()

        __UpperCamelCase  :Union[str, Any]    						=	torch.Generator(device='''cpu''').manual_seed(0)
        __UpperCamelCase  :str    						=	pipe(__lowercase				,				'''anime turle'''				,				generator=__lowercase				,				output_type='''np''')

        __UpperCamelCase  :List[str]    						=	output.images[0]

        assert image.shape == (768, 768, 3)

        assert_mean_pixel_difference(__lowercase				,				__lowercase)







    def     UpperCamelCase__     (			self) ->			List[Any]:
        __UpperCamelCase  :Dict    						=	load_image(
            '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/turtle.png''')

        __UpperCamelCase  :str    						=	load_numpy(
            '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/stable_unclip_2_1_h_img2img_anime_turtle_fp16.npy''')

        __UpperCamelCase  :Tuple    						=	StableUnCLIPImgaImgPipeline.from_pretrained(
            '''fusing/stable-unclip-2-1-h-img2img'''				,				torch_dtype=torch.floataa)
        pipe.to(__lowercase)
        pipe.set_progress_bar_config(disable=__lowercase)
        # stable unclip will oom when integration tests are run on a V100,
        # so turn on memory savings
        pipe.enable_attention_slicing()
        pipe.enable_sequential_cpu_offload()

        __UpperCamelCase  :int    						=	torch.Generator(device='''cpu''').manual_seed(0)
        __UpperCamelCase  :int    						=	pipe(__lowercase				,				'''anime turle'''				,				generator=__lowercase				,				output_type='''np''')

        __UpperCamelCase  :List[str]    						=	output.images[0]

        assert image.shape == (768, 768, 3)

        assert_mean_pixel_difference(__lowercase				,				__lowercase)







    def     UpperCamelCase__     (			self) ->			Union[str, Any]:
        __UpperCamelCase  :List[Any]    						=	load_image(
            '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/turtle.png''')

        torch.cuda.empty_cache()
        torch.cuda.reset_max_memory_allocated()
        torch.cuda.reset_peak_memory_stats()

        __UpperCamelCase  :Any    						=	StableUnCLIPImgaImgPipeline.from_pretrained(
            '''fusing/stable-unclip-2-1-h-img2img'''				,				torch_dtype=torch.floataa)
        __UpperCamelCase  :Any    						=	pipe.to(__lowercase)
        pipe.set_progress_bar_config(disable=__lowercase)
        pipe.enable_attention_slicing()
        pipe.enable_sequential_cpu_offload()

        __UpperCamelCase  :Tuple    						=	pipe(
            __lowercase				,				'''anime turtle'''				,				num_inference_steps=2				,				output_type='''np'''				,				)

        __UpperCamelCase  :str    						=	torch.cuda.max_memory_allocated()
        # make sure that less than 7 GB is allocated
        assert mem_bytes < 7 * 10**9





