





'''simple docstring'''






import copy
import json
import os
import tempfile

from transformers import is_torch_available

from .test_configuration_utils import config_common_kwargs
class 					__snake_case  (					__SCREAMING_SNAKE_CASE							):






   '''simple docstring'''





   def __init__(							self	,		__SCREAMING_SNAKE_CASE	,		__SCREAMING_SNAKE_CASE=None	,		__SCREAMING_SNAKE_CASE=True	,		__SCREAMING_SNAKE_CASE=None	,		**__SCREAMING_SNAKE_CASE       ):
    snake_case__     :					Optional[Any]    =  parent
    snake_case__     :					List[str]    =  config_class
    snake_case__     :					str    =  has_text_modality
    snake_case__     :					Optional[Any]    =  kwargs
    snake_case__     :					Optional[Any]    =  common_properties

   def 		__UpperCamelCase						(							self       ):
    snake_case__     :					Any    =  self.config_class(**self.inputs_dict       )
    snake_case__     :					int    =  (
        ["""hidden_size""", """num_attention_heads""", """num_hidden_layers"""]
        if self.common_properties is None
        else self.common_properties
    )

    # Add common fields for text models
    if self.has_text_modality:
     common_properties.extend(["""vocab_size"""]       )

    # Test that config has the common properties as getters
    for prop in common_properties:
     self.parent.assertTrue(hasattr(_A	,		_A       )	,		msg=f"`{prop}` does not exist"       )

    # Test that config has the common properties as setter
    for idx, name in enumerate(_A       ):
     try:
      setattr(_A	,		_A	,		_A       )
      self.parent.assertEqual(
          getattr(_A	,		_A       )	,		_A	,		msg=f"`{name} value {idx} expected, but was {getattr(_A	,		_A       )}"       )
     except NotImplementedError:
      # Some models might not be able to implement setters for common_properties
      # In that case, a NotImplementedError is raised
      pass

        # Test if config class can be called with Config(prop_name=..)
    for idx, name in enumerate(_A       ):
     try:
      snake_case__     :					Any    =  self.config_class(**{name: idx}       )
      self.parent.assertEqual(
          getattr(_A	,		_A       )	,		_A	,		msg=f"`{name} value {idx} expected, but was {getattr(_A	,		_A       )}"       )
     except NotImplementedError:
      # Some models might not be able to implement setters for common_properties
      # In that case, a NotImplementedError is raised
      pass

   def 		__UpperCamelCase						(							self       ):
    snake_case__     :					Any    =  self.config_class(**self.inputs_dict       )
    snake_case__     :					Optional[Any]    =  json.loads(config.to_json_string()       )
    for key, value in self.inputs_dict.items():
     self.parent.assertEqual(obj[key]	,		_A       )

   def 		__UpperCamelCase						(							self       ):
    snake_case__     :					str    =  self.config_class(**self.inputs_dict       )

    with tempfile.TemporaryDirectory() as tmpdirname:
     snake_case__     :					Any    =  os.path.join(_A	,		"""config.json"""       )
     config_first.to_json_file(_A       )
     snake_case__     :					Optional[int]    =  self.config_class.from_json_file(_A       )

    self.parent.assertEqual(config_second.to_dict()	,		config_first.to_dict()       )

   def 		__UpperCamelCase						(							self       ):
    snake_case__     :					str    =  self.config_class(**self.inputs_dict       )

    with tempfile.TemporaryDirectory() as tmpdirname:
     config_first.save_pretrained(_A       )
     snake_case__     :					Optional[int]    =  self.config_class.from_pretrained(_A       )

    self.parent.assertEqual(config_second.to_dict()	,		config_first.to_dict()       )

   def 		__UpperCamelCase						(							self       ):
    snake_case__     :					str    =  self.config_class(**self.inputs_dict       )

    snake_case__     :					int    =  """test"""
    with tempfile.TemporaryDirectory() as tmpdirname:
     snake_case__     :					Union[str, Any]    =  os.path.join(_A	,		_A       )
     config_first.save_pretrained(_A       )
     snake_case__     :					str    =  self.config_class.from_pretrained(_A	,		subfolder=_A       )

    self.parent.assertEqual(config_second.to_dict()	,		config_first.to_dict()       )

   def 		__UpperCamelCase						(							self       ):
    snake_case__     :					Dict    =  self.config_class(**self.inputs_dict	,		num_labels=5       )
    self.parent.assertEqual(len(config.idalabel       )	,		5       )
    self.parent.assertEqual(len(config.labelaid       )	,		5       )

    snake_case__     :					Tuple    =  3
    self.parent.assertEqual(len(config.idalabel       )	,		3       )
    self.parent.assertEqual(len(config.labelaid       )	,		3       )

   def 		__UpperCamelCase						(							self       ):







    if self.config_class.is_composition:
     return
    snake_case__     :					str    =  self.config_class()
    self.parent.assertIsNotNone(_A       )

   def 		__UpperCamelCase						(							self       ):
    snake_case__     :					Optional[int]    =  copy.deepcopy(_A       )
    snake_case__     :					Dict    =  self.config_class(**_A       )
    snake_case__     :					List[Any]    =  []
    for key, value in config_common_kwargs.items():
     if key == "torch_dtype":
      if not is_torch_available():
       continue
      else:
       import torch

       if config.torch_dtype != torch.floataa:
        wrong_values.append(("""torch_dtype""", config.torch_dtype, torch.floataa)       )
     elif getattr(_A	,		_A       ) != value:
      wrong_values.append((key, getattr(_A	,		_A       ), value)       )

    if len(_A       ) > 0:
     snake_case__     :					Dict    =  """\n""".join([f"- {v[0]}: got {v[1]} instead of {v[2]}" for v in wrong_values]       )
     raise ValueError(f"The following keys were not properly set in the config:\n{errors}"       )


   def 		__UpperCamelCase						(							self       ):
    self.create_and_test_config_common_properties()
    self.create_and_test_config_to_json_string()
    self.create_and_test_config_to_json_file()
    self.create_and_test_config_from_and_save_pretrained()
    self.create_and_test_config_from_and_save_pretrained_subfolder()
    self.create_and_test_config_with_num_labels()
    self.check_config_can_be_init_without_params()
    self.check_config_arguments_init()











"""simple docstring"""


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


__magic_name__       :					Dict						=			logging.get_logger(__name__)

__magic_name__       :					List[str]						=			{
    """microsoft/swinv2-tiny-patch4-window8-256""": (
        """https://huggingface.co/microsoft/swinv2-tiny-patch4-window8-256/resolve/main/config.json"""
    ),
}






class 							lowercase__			(   __SCREAMING_SNAKE_CASE	):

			"""simple docstring"""
			__lowerCAmelCase     :				List[str]										=  """swinv2"""

			__lowerCAmelCase     :				Optional[Any]										=  {
			    """num_attention_heads""": """num_heads""",
			    """num_hidden_layers""": """num_layers""",
			}







			def __init__(      self						,   _A=2_2_4						,   _A=4						,   _A=3						,   _A=9_6						,   _A=[2, 2, 6, 2]						,   _A=[3, 6, 1_2, 2_4]						,   _A=7						,   _A=4.0						,   _A=True						,   _A=0.0						,   _A=0.0						,   _A=0.1						,   _A="gelu"						,   _A=False						,   _A=0.02						,   _A=1e-5						,   _A=3_2						,   **_A						,   ):






									'''simple docstring'''







									super().__init__(**_A    )

									UpperCamelCase				:		Optional[Any]				   =			image_size
									UpperCamelCase				:		Tuple				   =			patch_size
									UpperCamelCase				:		str				   =			num_channels
									UpperCamelCase				:		Dict				   =			embed_dim
									UpperCamelCase				:		List[str]				   =			depths
									UpperCamelCase				:		Optional[Any]				   =			len(_A    )
									UpperCamelCase				:		Optional[int]				   =			num_heads
									UpperCamelCase				:		Optional[int]				   =			window_size
									UpperCamelCase				:		List[Any]				   =			mlp_ratio
									UpperCamelCase				:		str				   =			qkv_bias
									UpperCamelCase				:		str				   =			hidden_dropout_prob
									UpperCamelCase				:		Tuple				   =			attention_probs_dropout_prob
									UpperCamelCase				:		List[Any]				   =			drop_path_rate
									UpperCamelCase				:		str				   =			hidden_act
									UpperCamelCase				:		Optional[Any]				   =			use_absolute_embeddings
									UpperCamelCase				:		Dict				   =			layer_norm_eps
									UpperCamelCase				:		Dict				   =			initializer_range
									UpperCamelCase				:		str				   =			encoder_stride
									# we set the hidden_size attribute in order to make Swinv2 work with VisionEncoderDecoderModel
									# this indicates the channel dimension after the last stage of the model
									UpperCamelCase				:		Any				   =			int(embed_dim * 2 ** (len(_A    ) - 1)    )
									UpperCamelCase				:		str				   =			(0, 0, 0, 0)



