




def     lowerCAmelCase		(		_lowerCAmelCase				: float						):




 """simple docstring"""







 return -num if num < 0 else num



def     lowerCAmelCase		(		_lowerCAmelCase				: list[int]						):




 """simple docstring"""







 if len(a_						) == 0:
  raise ValueError("abs_min() arg is an empty sequence"						)
 UpperCAmelCase__							=    x[0]
 for i in x:
  if abs_val(a_						) < abs_val(a_						):
   UpperCAmelCase__							=    i
 return j



def     lowerCAmelCase		(		_lowerCAmelCase				: list[int]						):




 """simple docstring"""







 if len(a_						) == 0:
  raise ValueError("abs_max() arg is an empty sequence"						)
 UpperCAmelCase__							=    x[0]
 for i in x:
  if abs(a_						) > abs(a_						):
   UpperCAmelCase__							=    i
 return j



def     lowerCAmelCase		(		_lowerCAmelCase				: list[int]						):




 """simple docstring"""







 if len(a_						) == 0:
  raise ValueError("abs_max_sort() arg is an empty sequence"						)
 return sorted(a_    ,				key=a_						)[-1]



def     lowerCAmelCase		(		):




 """simple docstring"""







 assert abs_val(0						) == 0
 assert abs_val(34						) == 34
 assert abs_val(-1000_0000_0000						) == 1000_0000_0000

 UpperCAmelCase__							=    [-3, -1, 2, -11]
 assert abs_max(a_						) == -11
 assert abs_max_sort(a_						) == -11
 assert abs_min(a_						) == -1


if __name__ == "__main__":
  import doctest

  doctest.testmod()

  test_abs_val()
  print(abs_val(-3_4))  # --> 34













'''simple docstring'''







from typing import Union

import torch
from PIL import Image
from torchvision import transforms as tfms
from tqdm.auto import tqdm
from transformers import CLIPTextModel, CLIPTokenizer

from diffusers import (
    AutoencoderKL,
    DDIMScheduler,
    DiffusionPipeline,
    LMSDiscreteScheduler,
    PNDMScheduler,
    UNetaDConditionModel,
)




class 					__UpperCAmelCase (		UpperCamelCase__	):

      '''simple docstring'''





      def __init__(					self  ,		_UpperCAmelCase  ,		_UpperCAmelCase  ,		_UpperCAmelCase  ,		_UpperCAmelCase  ,		_UpperCAmelCase  ,		):
             super().__init__()

             self.register_modules(vae=_UpperCAmelCase  ,		text_encoder=_UpperCAmelCase  ,		tokenizer=_UpperCAmelCase  ,		unet=_UpperCAmelCase  ,		scheduler=_UpperCAmelCase						)




      def 							lowerCamelCase     (					self  ,		_UpperCAmelCase						):
             with torch.no_grad():
                    UpperCAmelCase__	:   Dict												=	self.vae.encode(tfms.ToTensor()(_UpperCAmelCase						).unsqueeze(0						).to(self.device						) * 2 - 1						)
                    UpperCAmelCase__	:   int												=	0.1_82_15 * latent.latent_dist.sample()
             return latent




      def 							lowerCamelCase     (					self  ,		_UpperCAmelCase						):
             UpperCAmelCase__	:   int												=	(1 / 0.1_82_15) * latent
             with torch.no_grad():
                    UpperCAmelCase__	:   Optional[Any]												=	self.vae.decode(_UpperCAmelCase						).sample
             UpperCAmelCase__	:   List[str]												=	(img / 2 + 0.5).clamp(0  ,		1						)
             UpperCAmelCase__	:   List[Any]												=	img.detach().cpu().permute(0  ,		2  ,		3  ,		1						).numpy()
             UpperCAmelCase__	:   Union[str, Any]												=	(img * 255).round().astype('''uint8'''						)
             return Image.fromarray(img[0]						)




      def 							lowerCamelCase     (					self  ,		_UpperCAmelCase						):
             UpperCAmelCase__	:   Dict												=	self.tokenizer(
                 _UpperCAmelCase  ,		padding='''max_length'''  ,		max_length=self.tokenizer.model_max_length  ,		truncation=_UpperCAmelCase  ,		return_tensors='''pt'''  ,		)

             UpperCAmelCase__	:   Tuple												=	self.text_encoder(text_input.input_ids.to(self.device						)						)[0]

             UpperCAmelCase__	:   Dict												=	self.tokenizer(
                 ''''''  ,		padding='''max_length'''  ,		max_length=self.tokenizer.model_max_length  ,		truncation=_UpperCAmelCase  ,		return_tensors='''pt'''  ,		)

             UpperCAmelCase__	:   List[Any]												=	self.text_encoder(uncond_input.input_ids.to(self.device						)						)[0]

             return torch.cat([uncond_embedding, text_embedding]						)




      def __call__(					self  ,		_UpperCAmelCase  ,		_UpperCAmelCase  ,		_UpperCAmelCase = 0.3  ,		_UpperCAmelCase = 0.6  ,		_UpperCAmelCase = 0.5  ,		_UpperCAmelCase = 42  ,		_UpperCAmelCase = 50  ,		_UpperCAmelCase = 7.5  ,		):
             UpperCAmelCase__	:   Any												=	steps - int(kmin * steps						)
             UpperCAmelCase__	:   Any												=	steps - int(kmax * steps						)

             UpperCAmelCase__	:   List[str]												=	self.prep_text(_UpperCAmelCase						)

             self.scheduler.set_timesteps(_UpperCAmelCase						)

             UpperCAmelCase__							,							UpperCAmelCase__	:   List[str]												=	img.size
             UpperCAmelCase__	:   str												=	self.encode(_UpperCAmelCase						)

             torch.manual_seed(_UpperCAmelCase						)
             UpperCAmelCase__	:   Union[str, Any]												=	torch.randn(
                 (1, self.unet.config.in_channels, height // 8, width // 8)  ,		).to(self.device						)

             UpperCAmelCase__	:   Optional[int]												=	self.scheduler.add_noise(
                 _UpperCAmelCase  ,		_UpperCAmelCase  ,		timesteps=self.scheduler.timesteps[tmax]  ,		)

             UpperCAmelCase__	:   Any												=	torch.cat([latents] * 2						)

             UpperCAmelCase__	:   Dict												=	self.scheduler.scale_model_input(_UpperCAmelCase  ,		self.scheduler.timesteps[tmax]						)

             with torch.no_grad():
                    UpperCAmelCase__	:   Tuple												=	self.unet(
                        _UpperCAmelCase  ,		self.scheduler.timesteps[tmax]  ,		encoder_hidden_states=_UpperCAmelCase  ,		).sample

             UpperCAmelCase__							,							UpperCAmelCase__	:   List[Any]												=	pred.chunk(2						)
             UpperCAmelCase__	:   List[str]												=	pred_uncond + guidance_scale * (pred_text - pred_uncond)

             UpperCAmelCase__	:   Union[str, Any]												=	self.scheduler.step(_UpperCAmelCase  ,		self.scheduler.timesteps[tmax]  ,		_UpperCAmelCase						).prev_sample

             for i, t in enumerate(tqdm(self.scheduler.timesteps						)						):
                    if i > tmax:
                           if i < tmin:  # layout generation phase
                                  UpperCAmelCase__	:   Dict												=	self.scheduler.add_noise(
                                      _UpperCAmelCase  ,		_UpperCAmelCase  ,		timesteps=_UpperCAmelCase  ,		)

                                  UpperCAmelCase__	:   Union[str, Any]												=	(mix_factor * latents) + (
                                      1 - mix_factor
                                  ) * orig_latents  # interpolating between layout noise and conditionally generated noise to preserve layout sematics
                                  UpperCAmelCase__	:   Tuple												=	torch.cat([input] * 2						)

                           else:  # content generation phase
                                  UpperCAmelCase__	:   Any												=	torch.cat([latents] * 2						)

                           UpperCAmelCase__	:   str												=	self.scheduler.scale_model_input(_UpperCAmelCase  ,		_UpperCAmelCase						)

                           with torch.no_grad():
                                  UpperCAmelCase__	:   Any												=	self.unet(
                                      _UpperCAmelCase  ,		_UpperCAmelCase  ,		encoder_hidden_states=_UpperCAmelCase  ,		).sample

                           UpperCAmelCase__							,							UpperCAmelCase__	:   Tuple												=	pred.chunk(2						)
                           UpperCAmelCase__	:   str												=	pred_uncond + guidance_scale * (pred_text - pred_uncond)

                           UpperCAmelCase__	:   Union[str, Any]												=	self.scheduler.step(_UpperCAmelCase  ,		_UpperCAmelCase  ,		_UpperCAmelCase						).prev_sample

             return self.decode(_UpperCAmelCase						)