


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 						__SCREAMING_SNAKE_CASE					(      lowerCamelCase__ ):
     UpperCAmelCase 					=				['''image_processor''', '''tokenizer''']
     UpperCAmelCase 					=				'''FlavaImageProcessor'''
     UpperCAmelCase 					=				('''BertTokenizer''', '''BertTokenizerFast''')






     def __init__(			self     ,							__UpperCamelCase=None     ,							__UpperCamelCase=None     ,							**__UpperCamelCase		)       ->    str:
          _a						=		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     ,							)
               _a						=		kwargs.pop("feature_extractor"		)

          _a						=		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__(__UpperCamelCase     ,							__UpperCamelCase		)
          _a						=		self.image_processor






     def __call__(			self     ,							__UpperCamelCase = None     ,							__UpperCamelCase = None     ,							__UpperCamelCase = True     ,							__UpperCamelCase = False     ,							__UpperCamelCase = False     ,							__UpperCamelCase = None     ,							__UpperCamelCase = 0     ,							__UpperCamelCase = None     ,							__UpperCamelCase = None     ,							__UpperCamelCase = None     ,							__UpperCamelCase = None     ,							__UpperCamelCase = None     ,							__UpperCamelCase = False     ,							__UpperCamelCase = False     ,							__UpperCamelCase = False     ,							__UpperCamelCase = False     ,							__UpperCamelCase = True     ,							__UpperCamelCase = None     ,							**__UpperCamelCase     ,							)       ->    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						=		self.tokenizer(
                   text=__UpperCamelCase     ,							add_special_tokens=__UpperCamelCase     ,							padding=__UpperCamelCase     ,							truncation=__UpperCamelCase     ,							max_length=__UpperCamelCase     ,							stride=__UpperCamelCase     ,							pad_to_multiple_of=__UpperCamelCase     ,							return_token_type_ids=__UpperCamelCase     ,							return_attention_mask=__UpperCamelCase     ,							return_overflowing_tokens=__UpperCamelCase     ,							return_special_tokens_mask=__UpperCamelCase     ,							return_offsets_mapping=__UpperCamelCase     ,							return_length=__UpperCamelCase     ,							verbose=__UpperCamelCase     ,							return_tensors=__UpperCamelCase     ,							**__UpperCamelCase     ,							)
          if images is not None:
               _a						=		self.image_processor(
                   __UpperCamelCase     ,							return_image_mask=__UpperCamelCase     ,							return_codebook_pixels=__UpperCamelCase     ,							return_tensors=__UpperCamelCase     ,							**__UpperCamelCase     ,							)

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






     def  a_					(			self     ,							*__UpperCamelCase     ,							**__UpperCamelCase		)       ->    int:
          return self.tokenizer.batch_decode(*__UpperCamelCase     ,							**__UpperCamelCase		)






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






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






     @property
     def  a_					(			self		)       ->    Dict:
          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  a_					(			self		)       ->    Any:
          warnings.warn(
              "`feature_extractor` is deprecated and will be removed in v5. Use `image_processor` instead."     ,							__UpperCamelCase     ,							)
          return self.image_processor





'''simple docstring'''

from collections import OrderedDict
from typing import Mapping

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig
from ...utils import logging


lowercase__				     =		logging.get_logger(__name__)

lowercase__				     =		{
    "YituTech/conv-bert-base": "https://huggingface.co/YituTech/conv-bert-base/resolve/main/config.json",
    "YituTech/conv-bert-medium-small": (
        "https://huggingface.co/YituTech/conv-bert-medium-small/resolve/main/config.json"
    ),
    "YituTech/conv-bert-small": "https://huggingface.co/YituTech/conv-bert-small/resolve/main/config.json",
    # See all ConvBERT models at https://huggingface.co/models?filter=convbert
}





class 						__SCREAMING_SNAKE_CASE					(      lowerCamelCase__ ):
     UpperCAmelCase 					=				'''convbert'''






     def __init__(			self     ,							__UpperCamelCase=30_522     ,							__UpperCamelCase=768     ,							__UpperCamelCase=12     ,							__UpperCamelCase=12     ,							__UpperCamelCase=3_072     ,							__UpperCamelCase="gelu"     ,							__UpperCamelCase=0.1     ,							__UpperCamelCase=0.1     ,							__UpperCamelCase=512     ,							__UpperCamelCase=2     ,							__UpperCamelCase=0.02     ,							__UpperCamelCase=1e-12     ,							__UpperCamelCase=1     ,							__UpperCamelCase=0     ,							__UpperCamelCase=2     ,							__UpperCamelCase=768     ,							__UpperCamelCase=2     ,							__UpperCamelCase=9     ,							__UpperCamelCase=1     ,							__UpperCamelCase=None     ,							**__UpperCamelCase     ,							)       ->    Optional[int]:
          super().__init__(
              pad_token_id=__UpperCamelCase     ,							bos_token_id=__UpperCamelCase     ,							eos_token_id=__UpperCamelCase     ,							**__UpperCamelCase     ,							)

          _a						=		vocab_size
          _a						=		hidden_size
          _a						=		num_hidden_layers
          _a						=		num_attention_heads
          _a						=		intermediate_size
          _a						=		hidden_act
          _a						=		hidden_dropout_prob
          _a						=		attention_probs_dropout_prob
          _a						=		max_position_embeddings
          _a						=		type_vocab_size
          _a						=		initializer_range
          _a						=		layer_norm_eps
          _a						=		embedding_size
          _a						=		head_ratio
          _a						=		conv_kernel_size
          _a						=		num_groups
          _a						=		classifier_dropout







class 						__SCREAMING_SNAKE_CASE					(      lowerCamelCase__ ):






     @property
     def  a_					(			self		)       ->    Mapping[str, Mapping[int, str]]:
          if self.task == "multiple-choice":
               _a						=		{0: "batch", 1: "choice", 2: "sequence"}
          else:
               _a						=		{0: "batch", 1: "sequence"}
          return OrderedDict(
              [
                  ("input_ids", dynamic_axis),
                  ("attention_mask", dynamic_axis),
                  ("token_type_ids", dynamic_axis),
              ]		)

