



"""simple docstring"""

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    __lowercase     (					_UpperCAmelCase):







						"""simple docstring"""







						_A		:							Optional[Any]							       =		["""image_processor""", """tokenizer"""]
						_A		:							str							       =		"""BlipImageProcessor"""
						_A		:							List[Any]							       =		"""AutoTokenizer"""







						def __init__(self   ,		lowercase__   ,		lowercase__       ):
											snake_case_					:		Any 					=					False
											super().__init__(lowercase__   ,		lowercase__       )
											snake_case_					:		List[Any] 					=					self.image_processor







						def __call__(self   ,		lowercase__ = None   ,		lowercase__ = None   ,		lowercase__ = True   ,		lowercase__ = False   ,		lowercase__ = None   ,		lowercase__ = None   ,		lowercase__ = 0   ,		lowercase__ = None   ,		lowercase__ = None   ,		lowercase__ = False   ,		lowercase__ = False   ,		lowercase__ = False   ,		lowercase__ = False   ,		lowercase__ = False   ,		lowercase__ = True   ,		lowercase__ = None   ,		**lowercase__   ,		):
											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_					:		Optional[Any] 					=					self.tokenizer
																snake_case_					:		int 					=					self.tokenizer(
																    text=lowercase__   ,		add_special_tokens=lowercase__   ,		padding=lowercase__   ,		truncation=lowercase__   ,		max_length=lowercase__   ,		stride=lowercase__   ,		pad_to_multiple_of=lowercase__   ,		return_attention_mask=lowercase__   ,		return_overflowing_tokens=lowercase__   ,		return_special_tokens_mask=lowercase__   ,		return_offsets_mapping=lowercase__   ,		return_token_type_ids=lowercase__   ,		return_length=lowercase__   ,		verbose=lowercase__   ,		return_tensors=lowercase__   ,		**lowercase__   ,		)
																return text_encoding

											# add pixel_values
											snake_case_					:		int 					=					self.image_processor(lowercase__   ,		return_tensors=lowercase__       )

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

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

											return encoding_image_processor







						def 						__UpperCamelCase							(self   ,		*lowercase__   ,		**lowercase__       ):
											return self.tokenizer.batch_decode(*lowercase__   ,		**lowercase__       )







						def 						__UpperCamelCase							(self   ,		*lowercase__   ,		**lowercase__       ):
											return self.tokenizer.decode(*lowercase__   ,		**lowercase__       )







						@property
						# Copied from transformers.models.blip.processing_blip.BlipProcessor.model_input_names
						def 						__UpperCamelCase							(self       ):
											snake_case_					:		str 					=					self.tokenizer.model_input_names
											snake_case_					:		List[str] 					=					self.image_processor.model_input_names
											return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names       )       )









"""simple docstring"""

import copy

from ...configuration_utils import PretrainedConfig
from ...utils import logging
from ..auto.configuration_auto import CONFIG_MAPPING


a_			   =					logging.get_logger(__name__)







class    __lowercase     (					_UpperCAmelCase):







						"""simple docstring"""







						_A		:							Optional[int]							       =		"""upernet"""







						def __init__(self   ,		lowercase__=None   ,		lowercase__=5_12   ,		lowercase__=0.02   ,		lowercase__=[1, 2, 3, 6]   ,		lowercase__=True   ,		lowercase__=0.4   ,		lowercase__=3_84   ,		lowercase__=2_56   ,		lowercase__=1   ,		lowercase__=False   ,		lowercase__=2_55   ,		**lowercase__   ,		):
											super().__init__(**lowercase__       )

											if backbone_config is None:
																logger.info("""`backbone_config` is `None`. Initializing the config with the default `ResNet` backbone."""       )
																snake_case_					:		List[Any] 					=					CONFIG_MAPPING["""resnet"""](out_features=["""stage1""", """stage2""", """stage3""", """stage4"""]       )
											elif isinstance(lowercase__   ,		lowercase__       ):
																snake_case_					:		Tuple 					=					backbone_config.get("""model_type"""       )
																snake_case_					:		List[str] 					=					CONFIG_MAPPING[backbone_model_type]
																snake_case_					:		List[Any] 					=					config_class.from_dict(lowercase__       )

											snake_case_					:		List[Any] 					=					backbone_config
											snake_case_					:		Optional[Any] 					=					hidden_size
											snake_case_					:		Any 					=					initializer_range
											snake_case_					:		str 					=					pool_scales
											snake_case_					:		Dict 					=					use_auxiliary_head
											snake_case_					:		str 					=					auxiliary_loss_weight
											snake_case_					:		List[str] 					=					auxiliary_in_channels
											snake_case_					:		Optional[Any] 					=					auxiliary_channels
											snake_case_					:		Any 					=					auxiliary_num_convs
											snake_case_					:		List[Any] 					=					auxiliary_concat_input
											snake_case_					:		List[str] 					=					loss_ignore_index







						def 						__UpperCamelCase							(self       ):
											snake_case_					:		Dict 					=					copy.deepcopy(self.__dict__       )
											snake_case_					:		Union[str, Any] 					=					self.backbone_config.to_dict()
											snake_case_					:		Any 					=					self.__class__.model_type
											return output




