"""simple docstring"""


import enum
import inspect
import warnings
from functools import wraps
from typing import Callable, Optional

from .logging import get_logger


__UpperCamelCase								=    set()
__UpperCamelCase								=    get_logger(__name__)







def       UpperCAmelCase					(	UpperCAmelCase = None      )       ->   int:

     def decorator(UpperCAmelCase      ):
          global _emitted_deprecation_warnings

          if inspect.isclass(UpperCAmelCase      ):
               snake_case_       =      deprecated_class_or_function.__init__
               snake_case_       =      deprecated_class_or_function.__name__
          else:
               snake_case_       =      deprecated_class_or_function
               snake_case_       =      deprecated_function.__name__
               # Support deprecating __init__ class method: class name instead
               snake_case_       =      name if name != '__init__' else deprecated_function.__qualname__.split('.'      )[-2]

          snake_case_       =      (
              f'{name} is deprecated and will be removed in the next major version of datasets.' + f' {help_message}'
              if help_message
              else ''
          )

          @wraps(UpperCAmelCase      )
          def wrapper(*UpperCAmelCase		,      **UpperCAmelCase      ):
               snake_case_       =      hash(UpperCAmelCase      )
               if func_hash not in _emitted_deprecation_warnings:
                    warnings.warn(UpperCAmelCase		,      category=UpperCAmelCase		,      stacklevel=2      )
                    _emitted_deprecation_warnings.add(UpperCAmelCase      )
               return deprecated_function(*UpperCAmelCase		,      **UpperCAmelCase      )

          snake_case_       =      'deprecated'

          if inspect.isclass(UpperCAmelCase      ):
               snake_case_       =      wrapper
               return deprecated_class_or_function
          else:
               return wrapper

     return decorator




class 				UpperCamelCase      (       enum.EnumMeta     ):







       def __getattribute__(				cls,							lowerCAmelCase__)   ->   List[Any]:
            snake_case_       =      super().__getattribute__(lowerCAmelCase__)
            if isinstance(lowerCAmelCase__,							enum.Enum) and obj._on_access:
                 obj._on_access()
            return obj







       def __getitem__(				cls,							lowerCAmelCase__)   ->   str:
            snake_case_       =      super().__getitem__(lowerCAmelCase__)
            if member._on_access:
                 member._on_access()
            return member







       def __call__(				cls,							lowerCAmelCase__,							lowerCAmelCase__=None,							*, lowerCAmelCase__=None,							lowerCAmelCase__=None,							lowerCAmelCase__=None,							lowerCAmelCase__=1)   ->   Union[str, Any]:
            snake_case_       =      super().__call__(lowerCAmelCase__,							lowerCAmelCase__,							module=lowerCAmelCase__,							qualname=lowerCAmelCase__,							type=lowerCAmelCase__,							start=lowerCAmelCase__)
            if isinstance(lowerCAmelCase__,							enum.Enum) and obj._on_access:
                 obj._on_access()
            return obj




class 				UpperCamelCase      (       enum.Enum					,	metaclass=lowerCAmelCase__     ):







       def __new__(				cls,							lowerCAmelCase__)   ->   List[Any]:
            snake_case_       =      object.__new__(cls)
            snake_case_       =      value
            snake_case_       =      member.deprecate
            return member







       @property
       def 	a_		(				self)   ->   List[Any]:
            return ""







       def 	a_		(				self)   ->   Optional[Any]:
            snake_case_       =      f' {self.help_message}' if self.help_message else ''
            warnings.warn(
                f'\'{self.__objclass__.__name__}\' is deprecated and will be removed in the next major version of datasets.'
                + help_message,							lowerCAmelCase__,							stacklevel=3,							)


"""simple docstring"""


import copy

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


__UpperCamelCase								=    logging.get_logger(__name__)

__UpperCamelCase								=    {
    '''facebook/sam-vit-huge''': '''https://huggingface.co/facebook/sam-vit-huge/resolve/main/config.json''',
    '''facebook/sam-vit-large''': '''https://huggingface.co/facebook/sam-vit-large/resolve/main/config.json''',
    '''facebook/sam-vit-base''': '''https://huggingface.co/facebook/sam-vit-base/resolve/main/config.json''',
}




class 				UpperCamelCase      (       lowerCAmelCase__     ):







       def __init__(				self,							lowerCAmelCase__=256,							lowerCAmelCase__=1024,							lowerCAmelCase__=16,							lowerCAmelCase__=16,							lowerCAmelCase__=4,							lowerCAmelCase__="gelu",							lowerCAmelCase__=1e-6,							**lowerCAmelCase__,							)   ->   int:
            super().__init__(**lowerCAmelCase__)
            snake_case_       =      hidden_size
            snake_case_       =      image_size
            snake_case_       =      patch_size
            snake_case_       =      image_size // patch_size
            snake_case_       =      mask_input_channels
            snake_case_       =      num_point_embeddings
            snake_case_       =      hidden_act
            snake_case_       =      layer_norm_eps




class 				UpperCamelCase      (       lowerCAmelCase__     ):







       def __init__(				self,							lowerCAmelCase__=256,							lowerCAmelCase__="relu",							lowerCAmelCase__=2048,							lowerCAmelCase__=2,							lowerCAmelCase__=8,							lowerCAmelCase__=2,							lowerCAmelCase__=3,							lowerCAmelCase__=3,							lowerCAmelCase__=256,							lowerCAmelCase__=1e-6,							**lowerCAmelCase__,							)   ->   List[str]:
            super().__init__(**lowerCAmelCase__)
            snake_case_       =      hidden_size
            snake_case_       =      hidden_act
            snake_case_       =      mlp_dim
            snake_case_       =      num_hidden_layers
            snake_case_       =      num_attention_heads
            snake_case_       =      attention_downsample_rate
            snake_case_       =      num_multimask_outputs
            snake_case_       =      iou_head_depth
            snake_case_       =      iou_head_hidden_dim
            snake_case_       =      layer_norm_eps




class 				UpperCamelCase      (       lowerCAmelCase__     ):







       def __init__(				self,							lowerCAmelCase__=768,							lowerCAmelCase__=256,							lowerCAmelCase__=12,							lowerCAmelCase__=12,							lowerCAmelCase__=3,							lowerCAmelCase__=1024,							lowerCAmelCase__=16,							lowerCAmelCase__="gelu",							lowerCAmelCase__=1e-06,							lowerCAmelCase__=0.0,							lowerCAmelCase__=1e-10,							lowerCAmelCase__=True,							lowerCAmelCase__=4.0,							lowerCAmelCase__=True,							lowerCAmelCase__=True,							lowerCAmelCase__=14,							lowerCAmelCase__=[2, 5, 8, 11],							lowerCAmelCase__=128,							lowerCAmelCase__=None,							**lowerCAmelCase__,							)   ->   List[str]:
            super().__init__(**lowerCAmelCase__)

            snake_case_       =      hidden_size
            snake_case_       =      output_channels
            snake_case_       =      num_hidden_layers
            snake_case_       =      num_attention_heads
            snake_case_       =      num_channels
            snake_case_       =      image_size
            snake_case_       =      patch_size
            snake_case_       =      hidden_act
            snake_case_       =      layer_norm_eps
            snake_case_       =      attention_dropout
            snake_case_       =      initializer_range
            snake_case_       =      qkv_bias
            snake_case_       =      mlp_ratio
            snake_case_       =      use_abs_pos
            snake_case_       =      use_rel_pos
            snake_case_       =      window_size
            snake_case_       =      global_attn_indexes
            snake_case_       =      num_pos_feats
            snake_case_       =      int(hidden_size * mlp_ratio) if mlp_dim is None else mlp_dim




class 				UpperCamelCase      (       lowerCAmelCase__     ):
       SCREAMING_SNAKE_CASE_				=   "sam"
       SCREAMING_SNAKE_CASE_				=   True







       def __init__(				self,							lowerCAmelCase__=None,							lowerCAmelCase__=None,							lowerCAmelCase__=None,							lowerCAmelCase__=0.02,							**lowerCAmelCase__,							)   ->   Any:
            super().__init__(**lowerCAmelCase__)
            snake_case_       =      vision_config if vision_config is not None else {}
            snake_case_       =      prompt_encoder_config if prompt_encoder_config is not None else {}
            snake_case_       =      mask_decoder_config if mask_decoder_config is not None else {}

            if isinstance(lowerCAmelCase__,							lowerCAmelCase__):
                 snake_case_       =      vision_config.to_dict()
            if isinstance(lowerCAmelCase__,							lowerCAmelCase__):
                 snake_case_       =      prompt_encoder_config.to_dict()
            if isinstance(lowerCAmelCase__,							lowerCAmelCase__):
                 snake_case_       =      mask_decoder_config.to_dict()

            snake_case_       =      SamVisionConfig(**lowerCAmelCase__)
            snake_case_       =      SamPromptEncoderConfig(**lowerCAmelCase__)
            snake_case_       =      SamMaskDecoderConfig(**lowerCAmelCase__)
            snake_case_       =      initializer_range







       def 	a_		(				self)   ->   Dict:
            snake_case_       =      copy.deepcopy(self.__dict__)
            snake_case_       =      self.vision_config.to_dict()
            snake_case_       =      self.prompt_encoder_config.to_dict()
            snake_case_       =      self.mask_decoder_config.to_dict()
            snake_case_       =      self.__class__.model_type
            return output

