






"""simple docstring"""
import argparse

import intel_extension_for_pytorch as ipex
import torch

from diffusers import DPMSolverMultistepScheduler, StableDiffusionPipeline


lowerCamelCase_							      = argparse.ArgumentParser('''Stable Diffusion script with intel optimization''', add_help=False)
parser.add_argument('''--dpm''', action='''store_true''', help='''Enable DPMSolver or not''')
parser.add_argument('''--steps''', default=None, type=int, help='''Num inference steps''')
lowerCamelCase_							      = parser.parse_args()


lowerCamelCase_							      = '''cpu'''
lowerCamelCase_							      = '''a lovely <dicoo> in red dress and hat, in the snowly and brightly night, with many brighly buildings'''

lowerCamelCase_							      = '''path-to-your-trained-model'''
lowerCamelCase_							      = StableDiffusionPipeline.from_pretrained(model_id)
if args.dpm:
			lowerCamelCase_							      = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
lowerCamelCase_							      = pipe.to(device)

# to channels last
lowerCamelCase_							      = pipe.unet.to(memory_format=torch.channels_last)
lowerCamelCase_							      = pipe.vae.to(memory_format=torch.channels_last)
lowerCamelCase_							      = pipe.text_encoder.to(memory_format=torch.channels_last)
if pipe.requires_safety_checker:
			lowerCamelCase_							      = pipe.safety_checker.to(memory_format=torch.channels_last)

# optimize with ipex
lowerCamelCase_							      = torch.randn(2, 4, 64, 64)
lowerCamelCase_							      = torch.rand(1) * 999
lowerCamelCase_							      = torch.randn(2, 77, 768)
lowerCamelCase_							      = (sample, timestep, encoder_hidden_status)
try:
			lowerCamelCase_							      = ipex.optimize(pipe.unet.eval(), dtype=torch.bfloataa, inplace=True, sample_input=input_example)
except Exception:
			lowerCamelCase_							      = ipex.optimize(pipe.unet.eval(), dtype=torch.bfloataa, inplace=True)
lowerCamelCase_							      = ipex.optimize(pipe.vae.eval(), dtype=torch.bfloataa, inplace=True)
lowerCamelCase_							      = ipex.optimize(pipe.text_encoder.eval(), dtype=torch.bfloataa, inplace=True)
if pipe.requires_safety_checker:
			lowerCamelCase_							      = ipex.optimize(pipe.safety_checker.eval(), dtype=torch.bfloataa, inplace=True)

# compute
lowerCamelCase_							      = 666
lowerCamelCase_							      = torch.Generator(device).manual_seed(seed)
lowerCamelCase_							      = {'''generator''': generator}
if args.steps is not None:
			lowerCamelCase_							      = args.steps

with torch.cpu.amp.autocast(enabled=True, dtype=torch.bfloataa):
			lowerCamelCase_							      = pipe(prompt, **generate_kwargs).images[0]

# save image
image.save('''generated.png''')











"""simple docstring"""
import warnings
from typing import List, Optional, Union

from ...image_utils import ImageInput
from ...processing_utils import ProcessorMixin
from ...tokenization_utils_base import BatchEncoding, PaddingStrategy, PreTokenizedInput, TextInput, TruncationStrategy
from ...utils import TensorType







class      UpperCamelCase_			(__A	):
	__magic_name__       =							['''image_processor''', '''tokenizer''']
	__magic_name__       =							'''FlavaImageProcessor'''
	__magic_name__       =							('''BertTokenizer''', '''BertTokenizerFast''')





	def __init__( self   :					Optional[int]      ,      lowerCAmelCase_   :					Tuple=None      ,      lowerCAmelCase_   :					List[str]=None      ,      **lowerCAmelCase_   :					Union[str, Any]		)		->     List[Any]:
				UpperCAmelCase_	:					Any     	=   None
				if "feature_extractor" in kwargs:
							warnings.warn(
							    "The `feature_extractor` argument is deprecated and will be removed in v5, use `image_processor`"
							    " instead."      ,      lowerCAmelCase_      ,      )
							UpperCAmelCase_	:					Tuple     	=   kwargs.pop("feature_extractor"		)

				UpperCAmelCase_	:					Optional[Any]     	=   image_processor if image_processor is not None else feature_extractor
				if image_processor is None:
							raise ValueError("You need to specify an `image_processor`."		)
				if tokenizer is None:
							raise ValueError("You need to specify a `tokenizer`."		)

				super().__init__(lowerCAmelCase_      ,      lowerCAmelCase_		)
				UpperCAmelCase_	:					List[str]     	=   self.image_processor





	def __call__( self   :					List[Any]      ,      lowerCAmelCase_   :					Optional[ImageInput] = None      ,      lowerCAmelCase_   :					Optional[Union[TextInput, PreTokenizedInput, List[TextInput], List[PreTokenizedInput]]] = None      ,      lowerCAmelCase_   :					bool = True      ,      lowerCAmelCase_   :					Union[bool, str, PaddingStrategy] = False      ,      lowerCAmelCase_   :					Union[bool, str, TruncationStrategy] = False      ,      lowerCAmelCase_   :					Optional[int] = None      ,      lowerCAmelCase_   :					int = 0      ,      lowerCAmelCase_   :					Optional[int] = None      ,      lowerCAmelCase_   :					Optional[bool] = None      ,      lowerCAmelCase_   :					Optional[bool] = None      ,      lowerCAmelCase_   :					Optional[bool] = None      ,      lowerCAmelCase_   :					Optional[bool] = None      ,      lowerCAmelCase_   :					bool = False      ,      lowerCAmelCase_   :					bool = False      ,      lowerCAmelCase_   :					bool = False      ,      lowerCAmelCase_   :					bool = False      ,      lowerCAmelCase_   :					bool = True      ,      lowerCAmelCase_   :					Optional[Union[str, TensorType]] = None      ,      **lowerCAmelCase_   :					Optional[int]      ,      )		->     List[Any]:

				if text is None and images is None:
							raise ValueError("You have to specify either text or images. Both cannot be none."		)

				if text is not None:
							UpperCAmelCase_	:					Union[str, Any]     	=   self.tokenizer(
							    text=lowerCAmelCase_      ,      add_special_tokens=lowerCAmelCase_      ,      padding=lowerCAmelCase_      ,      truncation=lowerCAmelCase_      ,      max_length=lowerCAmelCase_      ,      stride=lowerCAmelCase_      ,      pad_to_multiple_of=lowerCAmelCase_      ,      return_token_type_ids=lowerCAmelCase_      ,      return_attention_mask=lowerCAmelCase_      ,      return_overflowing_tokens=lowerCAmelCase_      ,      return_special_tokens_mask=lowerCAmelCase_      ,      return_offsets_mapping=lowerCAmelCase_      ,      return_length=lowerCAmelCase_      ,      verbose=lowerCAmelCase_      ,      return_tensors=lowerCAmelCase_      ,      **lowerCAmelCase_      ,      )
				if images is not None:
							UpperCAmelCase_	:					Optional[Any]     	=   self.image_processor(
							    lowerCAmelCase_      ,      return_image_mask=lowerCAmelCase_      ,      return_codebook_pixels=lowerCAmelCase_      ,      return_tensors=lowerCAmelCase_      ,      **lowerCAmelCase_      ,      )

				if text is not None and images is not None:
							encoding.update(lowerCAmelCase_		)
							return encoding
				elif text is not None:
							return encoding
				else:
							return BatchEncoding(data=dict(**lowerCAmelCase_		)      ,      tensor_type=lowerCAmelCase_		)





	def 	_SCREAMING_SNAKE_CASE ( self   :					Optional[int]      ,      *lowerCAmelCase_   :					int      ,      **lowerCAmelCase_   :					List[str]		)		->     Any:
				return self.tokenizer.batch_decode(*lowerCAmelCase_      ,      **lowerCAmelCase_		)





	def 	_SCREAMING_SNAKE_CASE ( self   :					List[Any]      ,      *lowerCAmelCase_   :					List[str]      ,      **lowerCAmelCase_   :					Optional[int]		)		->     List[Any]:
				return self.tokenizer.decode(*lowerCAmelCase_      ,      **lowerCAmelCase_		)





	@property
	def 	_SCREAMING_SNAKE_CASE ( self   :					Optional[Any]		)		->     int:
				UpperCAmelCase_	:					List[Any]     	=   self.tokenizer.model_input_names
				UpperCAmelCase_	:					Any     	=   self.image_processor.model_input_names
				return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names		)		)





	@property
	def 	_SCREAMING_SNAKE_CASE ( self   :					Tuple		)		->     Optional[Any]:
				warnings.warn(
				    "`feature_extractor_class` is deprecated and will be removed in v5. Use `image_processor_class` instead."      ,      lowerCAmelCase_      ,      )
				return self.image_processor_class





	@property
	def 	_SCREAMING_SNAKE_CASE ( self   :					str		)		->     int:
				warnings.warn(
				    "`feature_extractor` is deprecated and will be removed in v5. Use `image_processor` instead."      ,      lowerCAmelCase_      ,      )
				return self.image_processor



