
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 	_lowerCAmelCase					(	__a					,      __a					,      unittest.TestCase       ):
				_lowercase					=StableDiffusionSAGPipeline
				_lowercase					=TEXT_TO_IMAGE_PARAMS
				_lowercase					=TEXT_TO_IMAGE_BATCH_PARAMS
				_lowercase					=TEXT_TO_IMAGE_IMAGE_PARAMS
				_lowercase					=TEXT_TO_IMAGE_IMAGE_PARAMS
				_lowercase					=False




				def      __a						(					self     )				->      Tuple:
							torch.manual_seed(0     )
							lowerCAmelCase_						=	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				,				)
							lowerCAmelCase_						=	DDIMScheduler(
							    beta_start=0.00085				,				beta_end=0.012				,				beta_schedule="scaled_linear"				,				clip_sample=_UpperCamelCase				,				set_alpha_to_one=_UpperCamelCase				,				)
							torch.manual_seed(0     )
							lowerCAmelCase_						=	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     )
							lowerCAmelCase_						=	CLIPTextConfig(
							    bos_token_id=0				,				eos_token_id=2				,				hidden_size=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				,				)
							lowerCAmelCase_						=	CLIPTextModel(_UpperCamelCase     )
							lowerCAmelCase_						=	CLIPTokenizer.from_pretrained("hf-internal-testing/tiny-random-clip"     )

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




				def      __a						(					self				,				_UpperCamelCase				,				_UpperCamelCase=0     )				->      Union[str, Any]:
							if str(_UpperCamelCase     ).startswith("mps"     ):
										lowerCAmelCase_						=	torch.manual_seed(_UpperCamelCase     )
							else:
										lowerCAmelCase_						=	torch.Generator(device=_UpperCamelCase     ).manual_seed(_UpperCamelCase     )
							lowerCAmelCase_						=	{
							    "prompt": ".",
							    "generator": generator,
							    "num_inference_steps": 2,
							    "guidance_scale": 1.0,
							    "sag_scale": 1.0,
							    "output_type": "numpy",
							}
							return inputs




				def      __a						(					self     )				->      List[str]:
							super().test_inference_batch_single_identical(expected_max_diff=3e-3     )





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




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




				def      __a						(					self     )				->      Optional[int]:
							lowerCAmelCase_						=	StableDiffusionSAGPipeline.from_pretrained("CompVis/stable-diffusion-v1-4"     )
							lowerCAmelCase_						=	sag_pipe.to(_UpperCamelCase     )
							sag_pipe.set_progress_bar_config(disable=_UpperCamelCase     )

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

							lowerCAmelCase_						=	output.images

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

							assert image.shape == (1, 512, 512, 3)
							lowerCAmelCase_						=	np.array([0.1568, 0.1738, 0.1695, 0.1693, 0.1507, 0.1705, 0.1547, 0.1751, 0.1949]     )

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




				def      __a						(					self     )				->      int:
							lowerCAmelCase_						=	StableDiffusionSAGPipeline.from_pretrained("stabilityai/stable-diffusion-2-1-base"     )
							lowerCAmelCase_						=	sag_pipe.to(_UpperCamelCase     )
							sag_pipe.set_progress_bar_config(disable=_UpperCamelCase     )

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

							lowerCAmelCase_						=	output.images

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

							assert image.shape == (1, 512, 512, 3)
							lowerCAmelCase_						=	np.array([0.3459, 0.2876, 0.2537, 0.3002, 0.2671, 0.2160, 0.3026, 0.2262, 0.2371]     )

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




				def      __a						(					self     )				->      Tuple:
							lowerCAmelCase_						=	StableDiffusionSAGPipeline.from_pretrained("stabilityai/stable-diffusion-2-1-base"     )
							lowerCAmelCase_						=	sag_pipe.to(_UpperCamelCase     )
							sag_pipe.set_progress_bar_config(disable=_UpperCamelCase     )

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

							lowerCAmelCase_						=	output.images

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





from __future__ import annotations

import csv

import requests
from bsa import BeautifulSoup






def    lowerCamelCase__				(				__lowerCAmelCase  :  str = ""				):




			"""simple docstring"""


			lowerCAmelCase_						=	url or "https://www.imdb.com/chart/top/?ref_=nv_mv_250"
			lowerCAmelCase_						=	BeautifulSoup(requests.get(__lowerCAmelCase				).text    ,							"html.parser"				)
			lowerCAmelCase_						=	soup.find_all("td"    ,							attrs="titleColumn"				)
			lowerCAmelCase_						=	soup.find_all("td"    ,							class_="ratingColumn imdbRating"				)
			return {
			    title.a.text: float(rating.strong.text				)
			    for title, rating in zip(__lowerCAmelCase    ,							__lowerCAmelCase				)
			}






def    lowerCamelCase__				(				__lowerCAmelCase  :  str = "IMDb_Top_250_Movies.csv"				):




			"""simple docstring"""


			lowerCAmelCase_						=	get_imdb_top_aaa_movies()
			with open(__lowerCAmelCase    ,							"w"    ,							newline=""				) as out_file:
						lowerCAmelCase_						=	csv.writer(__lowerCAmelCase				)
						writer.writerow(["Movie title", "IMDb rating"]				)
						for title, rating in movies.items():
									writer.writerow([title, rating]				)


if __name__ == "__main__":
			write_movies()



