
'''simple docstring'''
from ...configuration_utils import PretrainedConfig
from ...utils import logging
from ...utils.backbone_utils import BackboneConfigMixin, get_aligned_output_features_output_indices


__lowerCAmelCase												=	logging.get_logger(__name__)

__lowerCAmelCase												=	{
    '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   (   __snake_case					,							__snake_case				):







       '''simple docstring'''

       lowerCAmelCase_ 						=						"nat"

       lowerCAmelCase_ 						=						{
           "num_attention_heads": "num_heads",
           "num_hidden_layers": "num_layers",
       }

       def __init__(self  ,  UpperCAmelCase=4  ,  UpperCAmelCase=3  ,  UpperCAmelCase=64  ,  UpperCAmelCase=[3, 4, 6, 5]  ,  UpperCAmelCase=[2, 4, 8, 16]  ,  UpperCAmelCase=7  ,  UpperCAmelCase=3.0  ,  UpperCAmelCase=True  ,  UpperCAmelCase=0.0  ,  UpperCAmelCase=0.0  ,  UpperCAmelCase=0.1  ,  UpperCAmelCase="gelu"  ,  UpperCAmelCase=0.02  ,  UpperCAmelCase=1e-5  ,  UpperCAmelCase=0.0  ,  UpperCAmelCase=None  ,  UpperCAmelCase=None  ,  **UpperCAmelCase  ,  )					->       str:
              super().__init__(**UpperCAmelCase  )

              _snake_case       =  patch_size
              _snake_case       =  num_channels
              _snake_case       =  embed_dim
              _snake_case       =  depths
              _snake_case       =  len(UpperCAmelCase  )
              _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(UpperCAmelCase  ) - 1)  )
              _snake_case       =  layer_scale_init_value
              _snake_case       =  ["""stem"""] + [f"""stage{idx}""" for idx in range(1  ,  len(UpperCAmelCase  ) + 1  )]
              _snake_case,							_snake_case       =  get_aligned_output_features_output_indices(
                  out_features=UpperCAmelCase  ,  out_indices=UpperCAmelCase  ,  stage_names=self.stage_names  )

'''simple docstring'''
from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_torch_available,
)


__lowerCAmelCase												=	{
    'configuration_resnet': ['RESNET_PRETRAINED_CONFIG_ARCHIVE_MAP', 'ResNetConfig', 'ResNetOnnxConfig']
}

try:
				if not is_torch_available():
								raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
				pass
else:
				__lowerCAmelCase												=	[
				    'RESNET_PRETRAINED_MODEL_ARCHIVE_LIST',
				    'ResNetForImageClassification',
				    'ResNetModel',
				    'ResNetPreTrainedModel',
				    'ResNetBackbone',
				]

try:
				if not is_tf_available():
								raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
				pass
else:
				__lowerCAmelCase												=	[
				    'TF_RESNET_PRETRAINED_MODEL_ARCHIVE_LIST',
				    'TFResNetForImageClassification',
				    'TFResNetModel',
				    'TFResNetPreTrainedModel',
				]

try:
				if not is_flax_available():
								raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
				pass
else:
				__lowerCAmelCase												=	[
				    'FlaxResNetForImageClassification',
				    'FlaxResNetModel',
				    'FlaxResNetPreTrainedModel',
				]

if TYPE_CHECKING:
				from .configuration_resnet import RESNET_PRETRAINED_CONFIG_ARCHIVE_MAP, ResNetConfig, ResNetOnnxConfig

				try:
								if not is_torch_available():
												raise OptionalDependencyNotAvailable()
				except OptionalDependencyNotAvailable:
								pass
				else:
								from .modeling_resnet import (
								    RESNET_PRETRAINED_MODEL_ARCHIVE_LIST,
								    ResNetBackbone,
								    ResNetForImageClassification,
								    ResNetModel,
								    ResNetPreTrainedModel,
								)

				try:
								if not is_tf_available():
												raise OptionalDependencyNotAvailable()
				except OptionalDependencyNotAvailable:
								pass
				else:
								from .modeling_tf_resnet import (
								    TF_RESNET_PRETRAINED_MODEL_ARCHIVE_LIST,
								    TFResNetForImageClassification,
								    TFResNetModel,
								    TFResNetPreTrainedModel,
								)

				try:
								if not is_flax_available():
												raise OptionalDependencyNotAvailable()
				except OptionalDependencyNotAvailable:
								pass
				else:
								from .modeling_flax_resnet import FlaxResNetForImageClassification, FlaxResNetModel, FlaxResNetPreTrainedModel


else:
				import sys

				__lowerCAmelCase												=	_LazyModule(__name__, globals()['__file__'], _import_structure)