

from collections import OrderedDict
from typing import Mapping

from packaging import version

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


lowerCAmelCase_	     =     logging.get_logger(__name__)

lowerCAmelCase_	     =     {
    '''apple/mobilevit-small''': '''https://huggingface.co/apple/mobilevit-small/resolve/main/config.json''',
    '''apple/mobilevit-x-small''': '''https://huggingface.co/apple/mobilevit-x-small/resolve/main/config.json''',
    '''apple/mobilevit-xx-small''': '''https://huggingface.co/apple/mobilevit-xx-small/resolve/main/config.json''',
    '''apple/deeplabv3-mobilevit-small''': (
        '''https://huggingface.co/apple/deeplabv3-mobilevit-small/resolve/main/config.json'''
    ),
    '''apple/deeplabv3-mobilevit-x-small''': (
        '''https://huggingface.co/apple/deeplabv3-mobilevit-x-small/resolve/main/config.json'''
    ),
    '''apple/deeplabv3-mobilevit-xx-small''': (
        '''https://huggingface.co/apple/deeplabv3-mobilevit-xx-small/resolve/main/config.json'''
    ),
    # See all MobileViT models at https://huggingface.co/models?filter=mobilevit
}





class      snake_case_       (		__A ):







			'''simple docstring'''

			SCREAMING_SNAKE_CASE					:       Optional[int]						      =    "mobilevit"







			def __init__(					self			:    List[str]							,       _UpperCamelCase			:    List[str]=3							,       _UpperCamelCase			:    Optional[Any]=2_5_6							,       _UpperCamelCase			:    Union[str, Any]=2							,       _UpperCamelCase			:    str=[1_4_4, 1_9_2, 2_4_0]							,       _UpperCamelCase			:    Optional[int]=[1_6, 3_2, 6_4, 9_6, 1_2_8, 1_6_0, 6_4_0]							,       _UpperCamelCase			:    Optional[Any]=4							,       _UpperCamelCase			:    Optional[Any]=2.0							,       _UpperCamelCase			:    str=4.0							,       _UpperCamelCase			:    Any="silu"							,       _UpperCamelCase			:    str=3							,       _UpperCamelCase			:    Tuple=3_2							,       _UpperCamelCase			:    Tuple=0.1							,       _UpperCamelCase			:    Optional[int]=0.0							,       _UpperCamelCase			:    Any=0.1							,       _UpperCamelCase			:    Optional[Any]=0.02							,       _UpperCamelCase			:    List[str]=1e-5							,       _UpperCamelCase			:    Tuple=True							,       _UpperCamelCase			:    str=2_5_6							,       _UpperCamelCase			:    Optional[int]=[6, 1_2, 1_8]							,       _UpperCamelCase			:    Optional[int]=0.1							,       _UpperCamelCase			:    Dict=2_5_5							,       **_UpperCamelCase			:    Tuple							,       )				->List[Any]:
									super().__init__(**_UpperCamelCase							)

									snake_case_       =     num_channels
									snake_case_       =     image_size
									snake_case_       =     patch_size
									snake_case_       =     hidden_sizes
									snake_case_       =     neck_hidden_sizes
									snake_case_       =     num_attention_heads
									snake_case_       =     mlp_ratio
									snake_case_       =     expand_ratio
									snake_case_       =     hidden_act
									snake_case_       =     conv_kernel_size
									snake_case_       =     output_stride
									snake_case_       =     hidden_dropout_prob
									snake_case_       =     attention_probs_dropout_prob
									snake_case_       =     classifier_dropout_prob
									snake_case_       =     initializer_range
									snake_case_       =     layer_norm_eps
									snake_case_       =     qkv_bias

									# decode head attributes for semantic segmentation
									snake_case_       =     aspp_out_channels
									snake_case_       =     atrous_rates
									snake_case_       =     aspp_dropout_prob
									snake_case_       =     semantic_loss_ignore_index






class      snake_case_       (		__A ):







			'''simple docstring'''

			SCREAMING_SNAKE_CASE					:       List[Any]						      =    version.parse("1.11" )







			@property
			def     snake_case__(					self			:    List[Any]							)				->Mapping[str, Mapping[int, str]]:
									return OrderedDict([('''pixel_values''', {0: '''batch''', 1: '''num_channels''', 2: '''height''', 3: '''width'''})]							)







			@property
			def     snake_case__(					self			:    Optional[int]							)				->Mapping[str, Mapping[int, str]]:
									if self.task == "image-classification":
															return OrderedDict([('''logits''', {0: '''batch'''})]							)
									else:
															return OrderedDict([('''last_hidden_state''', {0: '''batch'''}), ('''pooler_output''', {0: '''batch'''})]							)







			@property
			def     snake_case__(					self			:    Any							)				->float:
									return 1e-4


def   __SCREAMING_SNAKE_CASE (SCREAMING_SNAKE_CASE__	):
						snake_case_       =     5381
						for x in s:
												snake_case_       =     ((hash_value << 5) + hash_value) + ord(SCREAMING_SNAKE_CASE__	)
						return hash_value & 0xFF_FF_FF_FF