






import inspect
import unittest



class       __UpperCAmelCase		(unittest.TestCase    ):







			def 							UpperCamelCase      (	self:  Optional[Any]     ):







									'''simple docstring'''




									try:
															import diffusers  # noqa: F401
									except ImportError:
															assert False







			def 							UpperCamelCase      (	self:  List[str]     ):







									'''simple docstring'''




									import diffusers
									from diffusers.dependency_versions_table import deps

									_SCREAMING_SNAKE_CASE	      =  inspect.getmembers(UpperCAmelCase_      ,	inspect.isclass     )

									for cls_name, cls_module in all_classes:
															if "dummy_" in cls_module.__module__:
																					for backend in cls_module._backends:
																											if backend == "k_diffusion":
																																	_SCREAMING_SNAKE_CASE	      =  """k-diffusion"""
																											elif backend == "invisible_watermark":
																																	_SCREAMING_SNAKE_CASE	      =  """invisible-watermark"""
																											assert backend in deps, F'{backend} is not in the deps table!'









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_      (			snake_case_				):



	'''simple docstring'''




	lowerCAmelCase													= ['''image_processor''', '''tokenizer''']
	lowerCAmelCase													= '''BlipImageProcessor'''
	lowerCAmelCase													= ('''BertTokenizer''', '''BertTokenizerFast''')




	def __init__(       self       ,			a       ,			a					)       ->    Tuple:
								snake_case_				=							False
								super().__init__(a       ,			a					)
								snake_case_				=							self.image_processor




	def __call__(       self       ,			a = None       ,			a = None       ,			a = True       ,			a = False       ,			a = None       ,			a = None       ,			a = 0       ,			a = None       ,			a = None       ,			a = False       ,			a = False       ,			a = False       ,			a = False       ,			a = False       ,			a = True       ,			a = None       ,			**a       ,			)       ->    BatchEncoding:
								if images is None and text is None:
															raise ValueError('You have to specify either images or text.'					)

								# Get only text
								if images is None:
															snake_case_				=							self.tokenizer
															snake_case_				=							self.tokenizer(
															    text=a       ,			add_special_tokens=a       ,			padding=a       ,			truncation=a       ,			max_length=a       ,			stride=a       ,			pad_to_multiple_of=a       ,			return_attention_mask=a       ,			return_overflowing_tokens=a       ,			return_special_tokens_mask=a       ,			return_offsets_mapping=a       ,			return_token_type_ids=a       ,			return_length=a       ,			verbose=a       ,			return_tensors=a       ,			**a       ,			)
															return text_encoding

								# add pixel_values
								snake_case_				=							self.image_processor(a       ,			return_tensors=a					)

								if text is not None:
															snake_case_				=							self.tokenizer(
															    text=a       ,			add_special_tokens=a       ,			padding=a       ,			truncation=a       ,			max_length=a       ,			stride=a       ,			pad_to_multiple_of=a       ,			return_attention_mask=a       ,			return_overflowing_tokens=a       ,			return_special_tokens_mask=a       ,			return_offsets_mapping=a       ,			return_token_type_ids=a       ,			return_length=a       ,			verbose=a       ,			return_tensors=a       ,			**a       ,			)
								else:
															snake_case_				=							None

								if text_encoding is not None:
															encoding_image_processor.update(a					)

								return encoding_image_processor




	def 							_UpperCamelCase			(       self       ,			*a       ,			**a					)       ->    int:
								return self.tokenizer.batch_decode(*a       ,			**a					)




	def 							_UpperCamelCase			(       self       ,			*a       ,			**a					)       ->    Any:
								return self.tokenizer.decode(*a       ,			**a					)






	@property
	def 							_UpperCamelCase			(       self					)       ->    List[str]:
								snake_case_				=							self.tokenizer.model_input_names
								snake_case_				=							self.image_processor.model_input_names
								return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names					)					)





