



'''simple docstring'''



import warnings

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






class 			_SCREAMING_SNAKE_CASE				(lowercase__      ):
			A__								=  ['image_processor', 'tokenizer']
			A__								=  'AutoImageProcessor'
			A__								=  'AutoTokenizer'



			def __init__(     self		:						int    ,			__UpperCamelCase		:						int=None    ,			__UpperCamelCase		:						Any=None    ,			**__UpperCamelCase		:						str			)      ->      Optional[int]:
							"""simple docstring"""





							snake_case__      :   Optional[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.'''    ,			__UpperCamelCase    ,			)
											snake_case__      :   List[str]      =    kwargs.pop('''feature_extractor'''			)

							snake_case__      :   Any      =    image_processor if image_processor is not None else feature_extractor
							if image_processor is None:
											raise ValueError('''You have to specify an image_processor.'''			)
							if tokenizer is None:
											raise ValueError('''You have to specify a tokenizer.'''			)

							super().__init__(__UpperCamelCase    ,			__UpperCamelCase			)
							snake_case__      :   int      =    self.image_processor



			def __call__(     self		:						Tuple    ,			__UpperCamelCase		:						Optional[Any]=None    ,			__UpperCamelCase		:						Optional[int]=None    ,			__UpperCamelCase		:						Any=None    ,			**__UpperCamelCase		:						Dict			)      ->      Union[str, Any]:
							"""simple docstring"""





							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:
											snake_case__      :   int      =    self.tokenizer(__UpperCamelCase    ,			return_tensors=__UpperCamelCase    ,			**__UpperCamelCase			)

							if images is not None:
											snake_case__      :   List[Any]      =    self.image_processor(__UpperCamelCase    ,			return_tensors=__UpperCamelCase    ,			**__UpperCamelCase			)

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



			def 				lowerCAmelCase (     self		:						Tuple    ,			*__UpperCamelCase		:						int    ,			**__UpperCamelCase		:						List[Any]			)      ->      Dict:
							"""simple docstring"""





							return self.tokenizer.batch_decode(*__UpperCamelCase    ,			**__UpperCamelCase			)



			def 				lowerCAmelCase (     self		:						Union[str, Any]    ,			*__UpperCamelCase		:						Optional[Any]    ,			**__UpperCamelCase		:						Dict			)      ->      int:
							"""simple docstring"""





							return self.tokenizer.decode(*__UpperCamelCase    ,			**__UpperCamelCase			)



			@property
			def 				lowerCAmelCase (     self		:						Tuple			)      ->      Tuple:
							"""simple docstring"""





							snake_case__      :   List[Any]      =    self.tokenizer.model_input_names
							snake_case__      :   str      =    self.image_processor.model_input_names
							return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names			)			)



			@property
			def 				lowerCAmelCase (     self		:						str			)      ->      str:
							"""simple docstring"""





							warnings.warn(
							    '''`feature_extractor_class` is deprecated and will be removed in v5. Use `image_processor_class` instead.'''    ,			__UpperCamelCase    ,			)
							return self.image_processor_class







			@property
			def 				lowerCAmelCase (     self		:						Dict			)      ->      str:
							"""simple docstring"""





							warnings.warn(
							    '''`feature_extractor` is deprecated and will be removed in v5. Use `image_processor` instead.'''    ,			__UpperCamelCase    ,			)
							return self.image_processor








from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


__lowerCamelCase   	=  {'''configuration_visual_bert''': ['''VISUAL_BERT_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''VisualBertConfig''']}

try:
       if not is_torch_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       __lowerCamelCase   	=  [
           '''VISUAL_BERT_PRETRAINED_MODEL_ARCHIVE_LIST''',
           '''VisualBertForMultipleChoice''',
           '''VisualBertForPreTraining''',
           '''VisualBertForQuestionAnswering''',
           '''VisualBertForRegionToPhraseAlignment''',
           '''VisualBertForVisualReasoning''',
           '''VisualBertLayer''',
           '''VisualBertModel''',
           '''VisualBertPreTrainedModel''',
       ]


if TYPE_CHECKING:
       from .configuration_visual_bert import VISUAL_BERT_PRETRAINED_CONFIG_ARCHIVE_MAP, VisualBertConfig

       try:
              if not is_torch_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .modeling_visual_bert import (
                  VISUAL_BERT_PRETRAINED_MODEL_ARCHIVE_LIST,
                  VisualBertForMultipleChoice,
                  VisualBertForPreTraining,
                  VisualBertForQuestionAnswering,
                  VisualBertForRegionToPhraseAlignment,
                  VisualBertForVisualReasoning,
                  VisualBertLayer,
                  VisualBertModel,
                  VisualBertPreTrainedModel,
              )


else:
       import sys

       __lowerCamelCase   	=  _LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)



