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     lowerCAmelCase_     (       unittest.TestCase ):







							@property
							def  UpperCamelCase_						(   self      :     int		):
												torch.manual_seed(0		)
												_UpperCamelCase			     =     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  UpperCamelCase_						(   self      :     int		):
												torch.manual_seed(0		)
												_UpperCamelCase			     =     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  UpperCamelCase_						(   self      :     Tuple		):
												torch.manual_seed(0		)
												_UpperCamelCase			     =     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(_A		)







							def  UpperCamelCase_						(   self      :     Optional[int]		):
												_UpperCamelCase			     =     self.dummy_uncond_unet
												_UpperCamelCase			     =     DDIMScheduler()
												_UpperCamelCase			     =     self.dummy_vq_model

												_UpperCamelCase			     =     LDMPipeline(unet=_A ,			vqvae=_A ,			scheduler=_A		)
												ldm.to(_A		)
												ldm.set_progress_bar_config(disable=_A		)

												_UpperCamelCase			     =     torch.manual_seed(0		)
												_UpperCamelCase			     =     ldm(generator=_A ,			num_inference_steps=2 ,			output_type='''numpy'''		).images

												_UpperCamelCase			     =     torch.manual_seed(0		)
												_UpperCamelCase			     =     ldm(generator=_A ,			num_inference_steps=2 ,			output_type='''numpy''' ,			return_dict=_A		)[0]

												_UpperCamelCase			     =     image[0, -3:, -3:, -1]
												_UpperCamelCase			     =     image_from_tuple[0, -3:, -3:, -1]

												assert image.shape == (1, 64, 64, 3)
												_UpperCamelCase			     =     np.array([0.8512, 0.818, 0.6411, 0.6808, 0.4465, 0.5618, 0.46, 0.6231, 0.5172]		)
												_UpperCamelCase			     =     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     lowerCAmelCase_     (       unittest.TestCase ):







							def  UpperCamelCase_						(   self      :     Any		):
												_UpperCamelCase			     =     LDMPipeline.from_pretrained('''CompVis/ldm-celebahq-256'''		)
												ldm.to(_A		)
												ldm.set_progress_bar_config(disable=_A		)

												_UpperCamelCase			     =     torch.manual_seed(0		)
												_UpperCamelCase			     =     ldm(generator=_A ,			num_inference_steps=5 ,			output_type='''numpy'''		).images

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

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

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





"""simple docstring"""






def      _lowercase							(    __snake_case   ,__snake_case      )		->  int:
			return int((input_a, input_a).count(1      ) != 0      )


def      _lowercase							(    )		->  None:
			assert or_gate(0   ,0      ) == 0
			assert or_gate(0   ,1      ) == 1
			assert or_gate(1   ,0      ) == 1
			assert or_gate(1   ,1      ) == 1


if __name__ == "__main__":
	print(or_gate(0, 1))
	print(or_gate(1, 0))
	print(or_gate(0, 0))
	print(or_gate(1, 1))