'''simple docstring'''

from typing import List

from ...configuration_utils import PretrainedConfig
from ...utils import logging


UpperCamelCase__     :	Dict				=			logging.get_logger(__name__)

UpperCamelCase__     :	str				=			{
    'snap-research/efficientformer-l1-300': (
        'https://huggingface.co/snap-research/efficientformer-l1-300/resolve/main/config.json'
    ),
}


class 				_lowercase	(      lowerCAmelCase   ):
      '''simple docstring'''


      UpperCAmelCase_      :      str      							=   '''efficientformer'''




      def __init__(				self					,lowerCamelCase_ = [3, 2, 6, 4]					,lowerCamelCase_ = [48, 96, 224, 448]					,lowerCamelCase_ = [True, True, True, True]					,lowerCamelCase_ = 448					,lowerCamelCase_ = 32					,lowerCamelCase_ = 4					,lowerCamelCase_ = 7					,lowerCamelCase_ = 5					,lowerCamelCase_ = 8					,lowerCamelCase_ = 4					,lowerCamelCase_ = 0.0					,lowerCamelCase_ = 16					,lowerCamelCase_ = 3					,lowerCamelCase_ = 3					,lowerCamelCase_ = 3					,lowerCamelCase_ = 2					,lowerCamelCase_ = 1					,lowerCamelCase_ = 0.0					,lowerCamelCase_ = 1					,lowerCamelCase_ = True					,lowerCamelCase_ = True					,lowerCamelCase_ = 1e-5					,lowerCamelCase_ = "gelu"					,lowerCamelCase_ = 0.02					,lowerCamelCase_ = 1e-12					,lowerCamelCase_ = 224					,lowerCamelCase_ = 1e-05					,**lowerCamelCase_					,)			->			None:



         '''simple docstring'''



         super().__init__(**lowerCamelCase_							)

         UpperCAmelCase__							:				Tuple   				=  hidden_act
         UpperCAmelCase__							:				Optional[Any]   				=  hidden_dropout_prob
         UpperCAmelCase__							:				str   				=  hidden_sizes
         UpperCAmelCase__							:				Any   				=  num_hidden_layers
         UpperCAmelCase__							:				List[Any]   				=  num_attention_heads
         UpperCAmelCase__							:				Dict   				=  initializer_range
         UpperCAmelCase__							:				Optional[Any]   				=  layer_norm_eps
         UpperCAmelCase__							:				int   				=  patch_size
         UpperCAmelCase__							:				List[str]   				=  num_channels
         UpperCAmelCase__							:				Any   				=  depths
         UpperCAmelCase__							:				Optional[Any]   				=  mlp_expansion_ratio
         UpperCAmelCase__							:				Any   				=  downsamples
         UpperCAmelCase__							:				Optional[int]   				=  dim
         UpperCAmelCase__							:				Dict   				=  key_dim
         UpperCAmelCase__							:				Union[str, Any]   				=  attention_ratio
         UpperCAmelCase__							:				List[str]   				=  resolution
         UpperCAmelCase__							:				List[Any]   				=  pool_size
         UpperCAmelCase__							:				Optional[int]   				=  downsample_patch_size
         UpperCAmelCase__							:				Any   				=  downsample_stride
         UpperCAmelCase__							:				Any   				=  downsample_pad
         UpperCAmelCase__							:				List[Any]   				=  drop_path_rate
         UpperCAmelCase__							:				Any   				=  num_metaad_blocks
         UpperCAmelCase__							:				str   				=  distillation
         UpperCAmelCase__							:				List[Any]   				=  use_layer_scale
         UpperCAmelCase__							:				List[str]   				=  layer_scale_init_value
         UpperCAmelCase__							:				Tuple   				=  image_size
         UpperCAmelCase__							:				List[str]   				=  batch_norm_eps





'''simple docstring'''

import warnings

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


class 				_lowercase	(      lowerCAmelCase   ):
      '''simple docstring'''


      UpperCAmelCase_      :      Tuple      							=   ['''image_processor''', '''tokenizer''']
      UpperCAmelCase_      :      str      							=   '''CLIPImageProcessor'''
      UpperCAmelCase_      :      Dict      							=   ('''CLIPTokenizer''', '''CLIPTokenizerFast''')




      def __init__(				self					,lowerCamelCase_=None					,lowerCamelCase_=None					,**lowerCamelCase_							)			->			Any:



         '''simple docstring'''



         UpperCAmelCase__							:				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.'''					,lowerCamelCase_					,)
            UpperCAmelCase__							:				str   				=  kwargs.pop('''feature_extractor'''							)

         UpperCAmelCase__							:				Optional[Any]   				=  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__(lowerCamelCase_					,lowerCamelCase_							)




      def __call__(				self					,lowerCamelCase_=None					,lowerCamelCase_=None					,lowerCamelCase_=None					,**lowerCamelCase_							)			->			Dict:



         '''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:
            UpperCAmelCase__							:				Tuple   				=  self.tokenizer(lowerCamelCase_					,return_tensors=lowerCamelCase_					,**lowerCamelCase_							)

         if images is not None:
            UpperCAmelCase__							:				Optional[int]   				=  self.image_processor(lowerCamelCase_					,return_tensors=lowerCamelCase_					,**lowerCamelCase_							)

         if text is not None and images is not None:
            UpperCAmelCase__							:				str   				=  image_features.pixel_values
            return encoding
         elif text is not None:
            return encoding
         else:
            return BatchEncoding(data=dict(**lowerCamelCase_							)					,tensor_type=lowerCamelCase_							)




      def 		lowerCAmelCase__					(				self					,*lowerCamelCase_					,**lowerCamelCase_							)			->			Tuple:



         '''simple docstring'''



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




      def 		lowerCAmelCase__					(				self					,*lowerCamelCase_					,**lowerCamelCase_							)			->			Tuple:



         '''simple docstring'''



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




      @property
      def 		lowerCAmelCase__					(				self							)			->			List[str]:



         '''simple docstring'''



         UpperCAmelCase__							:				Optional[Any]   				=  self.tokenizer.model_input_names
         UpperCAmelCase__							:				Optional[Any]   				=  self.image_processor.model_input_names
         return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names							)							)




      @property
      def 		lowerCAmelCase__					(				self							)			->			List[Any]:



         '''simple docstring'''



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




      @property
      def 		lowerCAmelCase__					(				self							)			->			List[str]:



         '''simple docstring'''



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




