"""simple docstring"""






import gc
import unittest

import numpy as np
import torch
from transformers import CLIPTextConfig, CLIPTextModel, CLIPTokenizer

from diffusers import (
    AutoencoderKL,
    DDIMScheduler,
    StableDiffusionSAGPipeline,
    UNetaDConditionModel,
)
from diffusers.utils import slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu

from ..pipeline_params import TEXT_TO_IMAGE_BATCH_PARAMS, TEXT_TO_IMAGE_IMAGE_PARAMS, TEXT_TO_IMAGE_PARAMS
from ..test_pipelines_common import PipelineLatentTesterMixin, PipelineTesterMixin


enable_full_determinism()





class 				_A		( lowerCAmelCase						,					lowerCAmelCase						,					unittest.TestCase			):
      snake_case__    :     Optional[Any]													=			StableDiffusionSAGPipeline
      snake_case__    :     Optional[Any]													=			TEXT_TO_IMAGE_PARAMS
      snake_case__    :     Union[str, Any]													=			TEXT_TO_IMAGE_BATCH_PARAMS
      snake_case__    :     Optional[int]													=			TEXT_TO_IMAGE_IMAGE_PARAMS
      snake_case__    :     Tuple													=			TEXT_TO_IMAGE_IMAGE_PARAMS
      snake_case__    :     str													=			False

      def        A__ (		self		):







            """simple docstring"""



            torch.manual_seed(0		)
            lowercase														=			UNetaDConditionModel(
                block_out_channels=(32, 64)	, layers_per_block=2	, sample_size=32	, in_channels=4	, out_channels=4	, down_block_types=("""DownBlock2D""", """CrossAttnDownBlock2D""")	, up_block_types=("""CrossAttnUpBlock2D""", """UpBlock2D""")	, cross_attention_dim=32	, )
            lowercase														=			DDIMScheduler(
                beta_start=0.0_0_0_8_5	, beta_end=0.0_1_2	, beta_schedule="""scaled_linear"""	, clip_sample=__lowerCAmelCase	, set_alpha_to_one=__lowerCAmelCase	, )
            torch.manual_seed(0		)
            lowercase														=			AutoencoderKL(
                block_out_channels=[32, 64]	, in_channels=3	, out_channels=3	, down_block_types=["""DownEncoderBlock2D""", """DownEncoderBlock2D"""]	, up_block_types=["""UpDecoderBlock2D""", """UpDecoderBlock2D"""]	, latent_channels=4	, )
            torch.manual_seed(0		)
            lowercase														=			CLIPTextConfig(
                bos_token_id=0	, eos_token_id=2	, hidden_size=32	, intermediate_size=37	, layer_norm_eps=1E-05	, num_attention_heads=4	, num_hidden_layers=5	, pad_token_id=1	, vocab_size=1000	, )
            lowercase														=			CLIPTextModel(__lowerCAmelCase		)
            lowercase														=			CLIPTokenizer.from_pretrained("""hf-internal-testing/tiny-random-clip"""		)

            lowercase														=			{
                """unet""": unet,
                """scheduler""": scheduler,
                """vae""": vae,
                """text_encoder""": text_encoder,
                """tokenizer""": tokenizer,
                """safety_checker""": None,
                """feature_extractor""": None,
            }
            return components

      def        A__ (		self	, __lowerCAmelCase	, __lowerCAmelCase=0		):







            """simple docstring"""



            if str(__lowerCAmelCase		).startswith("""mps"""		):
                  lowercase														=			torch.manual_seed(__lowerCAmelCase		)
            else:
                  lowercase														=			torch.Generator(device=__lowerCAmelCase		).manual_seed(__lowerCAmelCase		)
            lowercase														=			{
                """prompt""": """.""",
                """generator""": generator,
                """num_inference_steps""": 2,
                """guidance_scale""": 1.0,
                """sag_scale""": 1.0,
                """output_type""": """numpy""",
            }
            return inputs







      def        A__ (		self		):







            """simple docstring"""



            super().test_inference_batch_single_identical(expected_max_diff=3E-3		)






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

      def        A__ (		self		):







            """simple docstring"""



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

      def        A__ (		self		):







            """simple docstring"""



            lowercase														=			StableDiffusionSAGPipeline.from_pretrained("""CompVis/stable-diffusion-v1-4"""		)
            lowercase														=			sag_pipe.to(__lowerCAmelCase		)
            sag_pipe.set_progress_bar_config(disable=__lowerCAmelCase		)

            lowercase														=			"""."""
            lowercase														=			torch.manual_seed(0		)
            lowercase														=			sag_pipe(
                [prompt]	, generator=__lowerCAmelCase	, guidance_scale=7.5	, sag_scale=1.0	, num_inference_steps=20	, output_type="""np"""		)

            lowercase														=			output.images

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

            assert image.shape == (1, 512, 512, 3)
            lowercase														=			np.array([0.1_5_6_8, 0.1_7_3_8, 0.1_6_9_5, 0.1_6_9_3, 0.1_5_0_7, 0.1_7_0_5, 0.1_5_4_7, 0.1_7_5_1, 0.1_9_4_9]		)

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

      def        A__ (		self		):







            """simple docstring"""



            lowercase														=			StableDiffusionSAGPipeline.from_pretrained("""stabilityai/stable-diffusion-2-1-base"""		)
            lowercase														=			sag_pipe.to(__lowerCAmelCase		)
            sag_pipe.set_progress_bar_config(disable=__lowerCAmelCase		)

            lowercase														=			"""."""
            lowercase														=			torch.manual_seed(0		)
            lowercase														=			sag_pipe(
                [prompt]	, generator=__lowerCAmelCase	, guidance_scale=7.5	, sag_scale=1.0	, num_inference_steps=20	, output_type="""np"""		)

            lowercase														=			output.images

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

            assert image.shape == (1, 512, 512, 3)
            lowercase														=			np.array([0.3_4_5_9, 0.2_8_7_6, 0.2_5_3_7, 0.3_0_0_2, 0.2_6_7_1, 0.2_1_6_0, 0.3_0_2_6, 0.2_2_6_2, 0.2_3_7_1]		)

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







      def        A__ (		self		):







            """simple docstring"""



            lowercase														=			StableDiffusionSAGPipeline.from_pretrained("""stabilityai/stable-diffusion-2-1-base"""		)
            lowercase														=			sag_pipe.to(__lowerCAmelCase		)
            sag_pipe.set_progress_bar_config(disable=__lowerCAmelCase		)

            lowercase														=			"""."""
            lowercase														=			torch.manual_seed(0		)
            lowercase														=			sag_pipe(
                [prompt]	, width=768	, height=512	, generator=__lowerCAmelCase	, guidance_scale=7.5	, sag_scale=1.0	, num_inference_steps=20	, output_type="""np"""	, )

            lowercase														=			output.images

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




"""simple docstring"""






def     UpperCAmelCase__ (       lowerCAmelCase__  :int	)				->					bool:
      '''simple docstring'''


      lowercase														=			(1 + 2_4 * n) ** 0.5
      return ((1 + root) / 6) % 1 == 0


def     UpperCAmelCase__ (       lowerCAmelCase__  :int = 5_0_0_0	)				->					int:
      '''simple docstring'''


      lowercase														=			[(i * (3 * i - 1)) // 2 for i in range(1      ,	lowerCAmelCase__	)]
      for i, pentagonal_i in enumerate(lowerCAmelCase__	):
            for j in range(lowerCAmelCase__      ,	len(lowerCAmelCase__	)	):
                  lowercase														=			pentagonal_nums[j]
                  lowercase														=			pentagonal_i + pentagonal_j
                  lowercase														=			pentagonal_j - pentagonal_i
                  if is_pentagonal(lowerCAmelCase__	) and is_pentagonal(lowerCAmelCase__	):
                        return b

      return -1


if __name__ == "__main__":
       print(F"""{solution() = }""")



