




'''simple docstring'''



from ...configuration_utils import PretrainedConfig
from ...utils import logging
from ...utils.backbone_utils import BackboneConfigMixin, get_aligned_output_features_output_indices


UpperCAmelCase_							:	Any	     =		logging.get_logger(__name__)

UpperCAmelCase_							:	List[Any]	     =		{
    '''shi-labs/nat-mini-in1k-224''': '''https://huggingface.co/shi-labs/nat-mini-in1k-224/resolve/main/config.json''',
    # See all Nat models at https://huggingface.co/models?filter=nat
}





class      lowerCAmelCase (			__lowerCAmelCase					, __lowerCAmelCase):
       __lowercase	:   Optional[Any]										=      '''nat'''

       __lowercase	:   Optional[int]										=      {
           '''num_attention_heads''': '''num_heads''',
           '''num_hidden_layers''': '''num_layers''',
       }


       def __init__( self     ,	__SCREAMING_SNAKE_CASE=4     ,	__SCREAMING_SNAKE_CASE=3     ,	__SCREAMING_SNAKE_CASE=64     ,	__SCREAMING_SNAKE_CASE=[3, 4, 6, 5]     ,	__SCREAMING_SNAKE_CASE=[2, 4, 8, 16]     ,	__SCREAMING_SNAKE_CASE=7     ,	__SCREAMING_SNAKE_CASE=3.0     ,	__SCREAMING_SNAKE_CASE=True     ,	__SCREAMING_SNAKE_CASE=0.0     ,	__SCREAMING_SNAKE_CASE=0.0     ,	__SCREAMING_SNAKE_CASE=0.1     ,	__SCREAMING_SNAKE_CASE="gelu"     ,	__SCREAMING_SNAKE_CASE=0.02     ,	__SCREAMING_SNAKE_CASE=1E-5     ,	__SCREAMING_SNAKE_CASE=0.0     ,	__SCREAMING_SNAKE_CASE=None     ,	__SCREAMING_SNAKE_CASE=None     ,	**__SCREAMING_SNAKE_CASE     ,	)   ->	Optional[Any]:



            '''simple docstring'''




            super().__init__(**__SCREAMING_SNAKE_CASE	)

            __snake_case            =	patch_size
            __snake_case            =	num_channels
            __snake_case            =	embed_dim
            __snake_case            =	depths
            __snake_case            =	len(__SCREAMING_SNAKE_CASE	)
            __snake_case            =	num_heads
            __snake_case            =	kernel_size
            __snake_case            =	mlp_ratio
            __snake_case            =	qkv_bias
            __snake_case            =	hidden_dropout_prob
            __snake_case            =	attention_probs_dropout_prob
            __snake_case            =	drop_path_rate
            __snake_case            =	hidden_act
            __snake_case            =	layer_norm_eps
            __snake_case            =	initializer_range
            # we set the hidden_size attribute in order to make Nat work with VisionEncoderDecoderModel
            # this indicates the channel dimension after the last stage of the model
            __snake_case            =	int(embed_dim * 2 ** (len(__SCREAMING_SNAKE_CASE	) - 1)	)
            __snake_case            =	layer_scale_init_value
            __snake_case            =	['''stem'''] + [F'''stage{idx}''' for idx in range(1     ,	len(__SCREAMING_SNAKE_CASE	) + 1	)]
            __snake_case       ,     __snake_case            =	get_aligned_output_features_output_indices(
                out_features=__SCREAMING_SNAKE_CASE     ,	out_indices=__SCREAMING_SNAKE_CASE     ,	stage_names=self.stage_names	)












'''simple docstring'''



def       _UpperCamelCase			(_lowerCamelCase				:  int						)-> int:




     '''simple docstring'''





     __snake_case            =	abs(_lowerCamelCase						)
     __snake_case            =	0
     while n > 0:
          res += n % 10
          n //= 10
     return res







def       _UpperCamelCase			(_lowerCamelCase				:  int						)-> int:




     '''simple docstring'''





     __snake_case            =	abs(_lowerCamelCase						)
     return n if n < 10 else n % 10 + sum_of_digits(n // 10						)







def       _UpperCamelCase			(_lowerCamelCase				:  int						)-> int:




     '''simple docstring'''





     return sum(int(_lowerCamelCase						) for c in str(abs(_lowerCamelCase						)						)						)







def       _UpperCamelCase			()-> None:




     '''simple docstring'''





     from collections.abc import Callable
     from timeit import timeit

     def benchmark_a_function(_lowerCamelCase				:  Callable ,						_lowerCamelCase				:  int						) -> None:
          __snake_case            =	f'''{func.__name__}({value})'''
          __snake_case            =	timeit(f'''__main__.{call}''' ,						setup='''import __main__'''						)
          print(f'''{call:56} = {func(_lowerCamelCase						)} -- {timing:.4f} seconds'''						)

     for value in (26_21_44, 11_25_89_99_06_84_26_24, 1_26_76_50_60_02_28_22_94_01_49_67_03_20_53_76):
          for func in (sum_of_digits, sum_of_digits_recursion, sum_of_digits_compact):
               benchmark_a_function(_lowerCamelCase ,						_lowerCamelCase						)
          print()


if __name__ == "__main__":
     import doctest

     doctest.testmod()
     benchmark()






