

from dataclasses import dataclass
from typing import List, Optional, Union

import numpy as np
import PIL
from PIL import Image

from ...utils import (
    BaseOutput,
    OptionalDependencyNotAvailable,
    is_flax_available,
    is_k_diffusion_available,
    is_k_diffusion_version,
    is_onnx_available,
    is_torch_available,
    is_transformers_available,
    is_transformers_version,
)

@dataclass
class 				UpperCAmelCase_		(			__lowercase   ):
							"""simple docstring"""







							UpperCAmelCase__       :						Union[List[PIL.Image.Image], np.ndarray]
							UpperCAmelCase__       :						Optional[List[bool]]


try:
			if not (is_transformers_available() and is_torch_available()):
						raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
			from ...utils.dummy_torch_and_transformers_objects import *  # noqa F403
else:
			from .pipeline_cycle_diffusion import CycleDiffusionPipeline
			from .pipeline_stable_diffusion import StableDiffusionPipeline
			from .pipeline_stable_diffusion_attend_and_excite import StableDiffusionAttendAndExcitePipeline
			from .pipeline_stable_diffusion_imgaimg import StableDiffusionImgaImgPipeline
			from .pipeline_stable_diffusion_inpaint import StableDiffusionInpaintPipeline
			from .pipeline_stable_diffusion_inpaint_legacy import StableDiffusionInpaintPipelineLegacy
			from .pipeline_stable_diffusion_instruct_pixapix import StableDiffusionInstructPixaPixPipeline
			from .pipeline_stable_diffusion_latent_upscale import StableDiffusionLatentUpscalePipeline
			from .pipeline_stable_diffusion_ldmad import StableDiffusionLDMaDPipeline
			from .pipeline_stable_diffusion_model_editing import StableDiffusionModelEditingPipeline
			from .pipeline_stable_diffusion_panorama import StableDiffusionPanoramaPipeline
			from .pipeline_stable_diffusion_paradigms import StableDiffusionParadigmsPipeline
			from .pipeline_stable_diffusion_sag import StableDiffusionSAGPipeline
			from .pipeline_stable_diffusion_upscale import StableDiffusionUpscalePipeline
			from .pipeline_stable_unclip import StableUnCLIPPipeline
			from .pipeline_stable_unclip_imgaimg import StableUnCLIPImgaImgPipeline
			from .safety_checker import StableDiffusionSafetyChecker
			from .stable_unclip_image_normalizer import StableUnCLIPImageNormalizer

try:
			if not (is_transformers_available() and is_torch_available() and is_transformers_version('''>=''', '''4.25.0''')):
						raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
			from ...utils.dummy_torch_and_transformers_objects import StableDiffusionImageVariationPipeline
else:
			from .pipeline_stable_diffusion_image_variation import StableDiffusionImageVariationPipeline


try:
			if not (is_transformers_available() and is_torch_available() and is_transformers_version('''>=''', '''4.26.0''')):
						raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
			from ...utils.dummy_torch_and_transformers_objects import (
			    StableDiffusionDepthaImgPipeline,
			    StableDiffusionDiffEditPipeline,
			    StableDiffusionPixaPixZeroPipeline,
			)
else:
			from .pipeline_stable_diffusion_depthaimg import StableDiffusionDepthaImgPipeline
			from .pipeline_stable_diffusion_diffedit import StableDiffusionDiffEditPipeline
			from .pipeline_stable_diffusion_pixapix_zero import StableDiffusionPixaPixZeroPipeline


try:
			if not (
			    is_torch_available()
			    and is_transformers_available()
			    and is_k_diffusion_available()
			    and is_k_diffusion_version('''>=''', '''0.0.12''')
			):
						raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
			from ...utils.dummy_torch_and_transformers_and_k_diffusion_objects import *  # noqa F403
else:
			from .pipeline_stable_diffusion_k_diffusion import StableDiffusionKDiffusionPipeline

try:
			if not (is_transformers_available() and is_onnx_available()):
						raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
			from ...utils.dummy_onnx_objects import *  # noqa F403
else:
			from .pipeline_onnx_stable_diffusion import OnnxStableDiffusionPipeline, StableDiffusionOnnxPipeline
			from .pipeline_onnx_stable_diffusion_imgaimg import OnnxStableDiffusionImgaImgPipeline
			from .pipeline_onnx_stable_diffusion_inpaint import OnnxStableDiffusionInpaintPipeline
			from .pipeline_onnx_stable_diffusion_inpaint_legacy import OnnxStableDiffusionInpaintPipelineLegacy
			from .pipeline_onnx_stable_diffusion_upscale import OnnxStableDiffusionUpscalePipeline

if is_transformers_available() and is_flax_available():
			import flax

			@flax.struct.dataclass
			class 				UpperCAmelCase_		(			__lowercase   ):
										"""simple docstring"""







										UpperCAmelCase__       :						np.ndarray
										UpperCAmelCase__       :						List[bool]



			from ...schedulers.scheduling_pndm_flax import PNDMSchedulerState
			from .pipeline_flax_stable_diffusion import FlaxStableDiffusionPipeline
			from .pipeline_flax_stable_diffusion_imgaimg import FlaxStableDiffusionImgaImgPipeline
			from .pipeline_flax_stable_diffusion_inpaint import FlaxStableDiffusionInpaintPipeline
			from .safety_checker_flax import FlaxStableDiffusionSafetyChecker






import warnings

from ...processing_utils import ProcessorMixin
from ...tokenization_utils_base import BatchEncoding

class 				UpperCAmelCase_		(			__lowercase   ):
							"""simple docstring"""







							UpperCAmelCase__       :						str	    =    ["image_processor", "tokenizer"]
							UpperCAmelCase__       :						Optional[int]	    =    "CLIPImageProcessor"
							UpperCAmelCase__       :						Tuple	    =    ("XLMRobertaTokenizer", "XLMRobertaTokenizerFast")


							def __init__(			self       ,							_a=None       ,							_a=None       ,							**_a       )    ->    Any:
												_a	:    int         =		None
												if "feature_extractor" in kwargs:
																	warnings.warn(
																	    '''The `feature_extractor` argument is deprecated and will be removed in v5, use `image_processor`'''
																	    ''' instead.'''       ,							_a       ,							)
																	_a	:    int         =		kwargs.pop('''feature_extractor'''       )

												_a	:    int         =		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__(_a       ,							_a       )


							def __call__(			self       ,							_a=None       ,							_a=None       ,							_a=None       ,							**_a       )    ->    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:
																	_a	:    str         =		self.tokenizer(_a       ,							return_tensors=_a       ,							**_a       )

												if images is not None:
																	_a	:    Optional[Any]         =		self.image_processor(_a       ,							return_tensors=_a       ,							**_a       )

												if text is not None and images is not None:
																	_a	:    List[Any]         =		image_features.pixel_values
																	return encoding
												elif text is not None:
																	return encoding
												else:
																	return BatchEncoding(data=dict(**_a       )       ,							tensor_type=_a       )


							def 				__lowercase				(			self       ,							*_a       ,							**_a       )    ->    Optional[Any]:
												return self.tokenizer.batch_decode(*_a       ,							**_a       )


							def 				__lowercase				(			self       ,							*_a       ,							**_a       )    ->    Optional[int]:
												return self.tokenizer.decode(*_a       ,							**_a       )




							@property
							def 				__lowercase				(			self       )    ->    Optional[int]:
												_a	:    Dict         =		self.tokenizer.model_input_names
												_a	:    Dict         =		self.image_processor.model_input_names
												return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names       )       )



