
from manim import *

class        _UpperCamelCase				(					_A  ):






			'''simple docstring'''

			def       lowerCAmelCase__	(       self :       int      ):
							UpperCamelCase_:							Dict	=						Rectangle(height=0.5						,	width=0.5      )
							UpperCamelCase_:							Dict	=						Rectangle(height=0.46						,	width=0.46      ).set_stroke(width=0      )

							UpperCamelCase_:							Tuple	=						[mem.copy() for i in range(6      )]
							UpperCamelCase_:							List[str]	=						[mem.copy() for i in range(6      )]
							UpperCamelCase_:							List[str]	=						VGroup(*snake_case_      ).arrange(snake_case_						,	buff=0      )
							UpperCamelCase_:							Tuple	=						VGroup(*snake_case_      ).arrange(snake_case_						,	buff=0      )
							UpperCamelCase_:							Union[str, Any]	=						VGroup(snake_case_						,	snake_case_      ).arrange(snake_case_						,	buff=0      )
							UpperCamelCase_:							Optional[Any]	=						Text("""CPU"""						,	font_size=24      )
							UpperCamelCase_:							int	=						Group(snake_case_						,	snake_case_      ).arrange(snake_case_						,	buff=0.5						,	aligned_edge=snake_case_      )
							cpu.move_to([-2.5, -0.5, 0]      )
							self.add(snake_case_      )

							UpperCamelCase_:							Optional[int]	=						[mem.copy() for i in range(1      )]
							UpperCamelCase_:							Dict	=						VGroup(*snake_case_      ).arrange(snake_case_						,	buff=0      )
							UpperCamelCase_:							Optional[int]	=						Text("""GPU"""						,	font_size=24      )
							UpperCamelCase_:							Optional[int]	=						Group(snake_case_						,	snake_case_      ).arrange(snake_case_						,	buff=0.5						,	aligned_edge=snake_case_      )
							gpu.align_to(snake_case_						,	snake_case_      )
							gpu.set_x(gpu.get_x() - 1      )

							self.add(snake_case_      )

							UpperCamelCase_:							Dict	=						[mem.copy() for i in range(6      )]
							UpperCamelCase_:							List[str]	=						VGroup(*snake_case_      ).arrange(snake_case_						,	buff=0      )

							UpperCamelCase_:							Any	=						Text("""Model"""						,	font_size=24      )
							UpperCamelCase_:							Optional[Any]	=						Group(snake_case_						,	snake_case_      ).arrange(snake_case_						,	buff=0.5						,	aligned_edge=snake_case_      )
							model.move_to([3, -1.0, 0]      )

							self.play(
							    Create(snake_case_						,	run_time=1      )						,	Create(snake_case_						,	run_time=1      )						,	Create(snake_case_						,	run_time=1      )						,	)

							UpperCamelCase_:							List[Any]	=						MarkupText(
							    f'''First, an empty model skeleton is loaded\ninto <span fgcolor=\'{YELLOW}\'>memory</span> without using much RAM.'''						,	font_size=24						,	)

							UpperCamelCase_:							Optional[Any]	=						Square(side_length=2.2      )
							key.move_to([-5, 2, 0]      )

							UpperCamelCase_:							Union[str, Any]	=						MarkupText(
							    f'''<b>Key:</b>\n\n<span fgcolor=\'{YELLOW}\'>●</span> Empty Model'''						,	font_size=18						,	)

							key_text.move_to([-5, 2.4, 0]      )

							step_a.move_to([2, 2, 0]      )
							self.play(Write(snake_case_						,	run_time=2.5      )						,	Write(snake_case_      )						,	Write(snake_case_      )      )

							self.add(snake_case_      )

							UpperCamelCase_:							Union[str, Any]	=						[]
							UpperCamelCase_:							Union[str, Any]	=						[]
							UpperCamelCase_:							Tuple	=						[]
							for i, rect in enumerate(snake_case_      ):
											UpperCamelCase_:							Tuple	=						Rectangle(height=0.46						,	width=0.46      ).set_stroke(width=0.0      ).set_fill(snake_case_						,	opacity=0.7      )
											cpu_target.move_to(snake_case_      )
											cpu_target.generate_target()
											UpperCamelCase_:							int	=						0.46 / 4
											UpperCamelCase_:							Optional[int]	=						0.46 / 3

											if i == 0:
															cpu_target.target.next_to(cpu_left_col_base[0].get_corner(DOWN + LEFT      )						,	buff=0.02						,	direction=snake_case_      )
															cpu_target.target.set_x(cpu_target.target.get_x() + 0.1      )
											elif i == 3:
															cpu_target.target.next_to(cpu_targs[0].target						,	direction=snake_case_						,	buff=0.0      )
											else:
															cpu_target.target.next_to(cpu_targs[i - 1].target						,	direction=snake_case_						,	buff=0.0      )
											cpu_targs.append(snake_case_      )

											first_animations.append(rect.animate(run_time=0.5      ).set_stroke(snake_case_      )      )
											second_animations.append(MoveToTarget(snake_case_						,	run_time=1.5      )      )

							self.play(*snake_case_      )
							self.play(*snake_case_      )

							self.wait()








import unittest

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

from diffusers import DDIMScheduler, LDMPipeline, UNetaDModel, VQModel
from diffusers.utils.testing_utils import enable_full_determinism, require_torch, slow, torch_device


enable_full_determinism()

class        _UpperCamelCase				(					unittest.TestCase  ):






			'''simple docstring'''

			@property
			def       lowerCAmelCase__	(       self :       int      ):
							torch.manual_seed(0      )
							UpperCamelCase_:							Any	=						UNetaDModel(
							    block_out_channels=(32, 64)						,	layers_per_block=2						,	sample_size=32						,	in_channels=3						,	out_channels=3						,	down_block_types=("""DownBlock2D""", """AttnDownBlock2D""")						,	up_block_types=("""AttnUpBlock2D""", """UpBlock2D""")						,	)
							return model

			@property
			def       lowerCAmelCase__	(       self :       Union[str, Any]      ):
							torch.manual_seed(0      )
							UpperCamelCase_:							Union[str, Any]	=						VQModel(
							    block_out_channels=[32, 64]						,	in_channels=3						,	out_channels=3						,	down_block_types=["""DownEncoderBlock2D""", """DownEncoderBlock2D"""]						,	up_block_types=["""UpDecoderBlock2D""", """UpDecoderBlock2D"""]						,	latent_channels=3						,	)
							return model

			@property
			def       lowerCAmelCase__	(       self :       Any      ):
							torch.manual_seed(0      )
							UpperCamelCase_:							List[str]	=						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						,	)
							return CLIPTextModel(snake_case_      )




			def       lowerCAmelCase__	(       self :       Dict      ):
							UpperCamelCase_:							Union[str, Any]	=						self.dummy_uncond_unet
							UpperCamelCase_:							Optional[Any]	=						DDIMScheduler()
							UpperCamelCase_:							List[str]	=						self.dummy_vq_model

							UpperCamelCase_:							List[Any]	=						LDMPipeline(unet=snake_case_						,	vqvae=snake_case_						,	scheduler=snake_case_      )
							ldm.to(snake_case_      )
							ldm.set_progress_bar_config(disable=snake_case_      )

							UpperCamelCase_:							str	=						torch.manual_seed(0      )
							UpperCamelCase_:							int	=						ldm(generator=snake_case_						,	num_inference_steps=2						,	output_type="""numpy"""      ).images

							UpperCamelCase_:							Dict	=						torch.manual_seed(0      )
							UpperCamelCase_:							str	=						ldm(generator=snake_case_						,	num_inference_steps=2						,	output_type="""numpy"""						,	return_dict=snake_case_      )[0]

							UpperCamelCase_:							List[Any]	=						image[0, -3:, -3:, -1]
							UpperCamelCase_:							Optional[int]	=						image_from_tuple[0, -3:, -3:, -1]

							assert image.shape == (1, 64, 64, 3)
							UpperCamelCase_:							str	=						np.array([0.8512, 0.818, 0.6411, 0.6808, 0.4465, 0.5618, 0.46, 0.6231, 0.5172]      )
							UpperCamelCase_:							Optional[Any]	=						1e-2 if torch_device != """mps""" else 3e-2

							assert np.abs(image_slice.flatten() - expected_slice      ).max() < tolerance
							assert np.abs(image_from_tuple_slice.flatten() - expected_slice      ).max() < tolerance




@slow
@require_torch
class        _UpperCamelCase				(					unittest.TestCase  ):






			'''simple docstring'''

			def       lowerCAmelCase__	(       self :       Union[str, Any]      ):
							UpperCamelCase_:							Dict	=						LDMPipeline.from_pretrained("""CompVis/ldm-celebahq-256"""      )
							ldm.to(snake_case_      )
							ldm.set_progress_bar_config(disable=snake_case_      )

							UpperCamelCase_:							List[str]	=						torch.manual_seed(0      )
							UpperCamelCase_:							Optional[int]	=						ldm(generator=snake_case_						,	num_inference_steps=5						,	output_type="""numpy"""      ).images

							UpperCamelCase_:							List[Any]	=						image[0, -3:, -3:, -1]

							assert image.shape == (1, 256, 256, 3)
							UpperCamelCase_:							List[str]	=						np.array([0.4399, 0.4_4975, 0.4_6825, 0.474, 0.4359, 0.4581, 0.4_5095, 0.4341, 0.4447]      )
							UpperCamelCase_:							Dict	=						1e-2 if torch_device != """mps""" else 3e-2

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






