





import inspect
import os
import re

from transformers.configuration_utils import PretrainedConfig
from transformers.utils import direct_transformers_import


# All paths are set with the intent you should run this script from the root of the repo with the command
# python utils/check_config_docstrings.py
__UpperCAmelCase	:       Dict    	=							"src/transformers"


# This is to make sure the transformers module imported is the one in the repo.
__UpperCAmelCase	:       Optional[int]    	=							direct_transformers_import(PATH_TO_TRANSFORMERS)

__UpperCAmelCase	:       List[Any]    	=							transformers.models.auto.configuration_auto.CONFIG_MAPPING

__UpperCAmelCase	:       str    	=							{
    # used to compute the property `self.chunk_length`
    "EncodecConfig": ["overlap"],
    # used as `self.bert_model = BertModel(config, ...)`
    "DPRConfig": True,
    # not used in modeling files, but it's an important information
    "FSMTConfig": ["langs"],
    # used internally in the configuration class file
    "GPTNeoConfig": ["attention_types"],
    # used internally in the configuration class file
    "EsmConfig": ["is_folding_model"],
    # used during training (despite we don't have training script for these models yet)
    "Mask2FormerConfig": ["ignore_value"],
    # `ignore_value` used during training (despite we don't have training script for these models yet)
    # `norm` used in conversion script (despite not using in the modeling file)
    "OneFormerConfig": ["ignore_value", "norm"],
    # used during preprocessing and collation, see `collating_graphormer.py`
    "GraphormerConfig": ["spatial_pos_max"],
    # used internally in the configuration class file
    "T5Config": ["feed_forward_proj"],
    # used internally in the configuration class file
    # `tokenizer_class` get default value `T5Tokenizer` intentionally
    "MT5Config": ["feed_forward_proj", "tokenizer_class"],
    "UMT5Config": ["feed_forward_proj", "tokenizer_class"],
    # used internally in the configuration class file
    "LongT5Config": ["feed_forward_proj"],
    # used internally in the configuration class file
    "SwitchTransformersConfig": ["feed_forward_proj"],
    # having default values other than `1e-5` - we can't fix them without breaking
    "BioGptConfig": ["layer_norm_eps"],
    # having default values other than `1e-5` - we can't fix them without breaking
    "GLPNConfig": ["layer_norm_eps"],
    # having default values other than `1e-5` - we can't fix them without breaking
    "SegformerConfig": ["layer_norm_eps"],
    # having default values other than `1e-5` - we can't fix them without breaking
    "CvtConfig": ["layer_norm_eps"],
    # having default values other than `1e-5` - we can't fix them without breaking
    "PerceiverConfig": ["layer_norm_eps"],
    # used internally to calculate the feature size
    "InformerConfig": ["num_static_real_features", "num_time_features"],
    # used internally to calculate the feature size
    "TimeSeriesTransformerConfig": ["num_static_real_features", "num_time_features"],
    # used internally to calculate the feature size
    "AutoformerConfig": ["num_static_real_features", "num_time_features"],
    # used internally to calculate `mlp_dim`
    "SamVisionConfig": ["mlp_ratio"],
    # For (head) training, but so far not implemented
    "ClapAudioConfig": ["num_classes"],
    # Not used, but providing useful information to users
    "SpeechT5HifiGanConfig": ["sampling_rate"],
}


# TODO (ydshieh): Check the failing cases, try to fix them or move some cases to the above block once we are sure
SPECIAL_CASES_TO_ALLOW.update(
    {
        "CLIPSegConfig": True,
        "DeformableDetrConfig": True,
        "DetaConfig": True,
        "DinatConfig": True,
        "DonutSwinConfig": True,
        "EfficientFormerConfig": True,
        "FSMTConfig": True,
        "JukeboxConfig": True,
        "LayoutLMv2Config": True,
        "MaskFormerSwinConfig": True,
        "MT5Config": True,
        "NatConfig": True,
        "OneFormerConfig": True,
        "PerceiverConfig": True,
        "RagConfig": True,
        "SpeechT5Config": True,
        "SwinConfig": True,
        "Swin2SRConfig": True,
        "Swinv2Config": True,
        "SwitchTransformersConfig": True,
        "TableTransformerConfig": True,
        "TapasConfig": True,
        "TransfoXLConfig": True,
        "UniSpeechConfig": True,
        "UniSpeechSatConfig": True,
        "WavLMConfig": True,
        "WhisperConfig": True,
        # TODO: @Arthur (for `alignment_head` and `alignment_layer`)
        "JukeboxPriorConfig": True,
        # TODO: @Younes (for `is_decoder`)
        "Pix2StructTextConfig": True,
    }
)







def       A__							(   SCREAMING_SNAKE_CASE__ , SCREAMING_SNAKE_CASE__ , SCREAMING_SNAKE_CASE__ , SCREAMING_SNAKE_CASE__)       ->   Any:
  __snake_case:						Tuple			  =						False
  for attribute in attributes:
    for modeling_source in source_strings:
      # check if we can find `config.xxx`, `getattr(config, "xxx", ...)` or `getattr(self.config, "xxx", ...)`
      if (
          F'''config.{attribute}''' in modeling_source
          or F'''getattr(config, "{attribute}"''' in modeling_source
          or F'''getattr(self.config, "{attribute}"''' in modeling_source
      ):
        __snake_case:						Optional[Any]			  =						True
      # Deal with multi-line cases
      elif (
          re.search(
              rF'''getattr[ \t\v\n\r\f]*\([ \t\v\n\r\f]*(self\.)?config,[ \t\v\n\r\f]*"{attribute}"''' , __lowerCAmelCase , )
          is not None
      ):
        __snake_case:						List[Any]			  =						True
      # `SequenceSummary` is called with `SequenceSummary(config)`
      elif attribute in [
          "summary_type",
          "summary_use_proj",
          "summary_activation",
          "summary_last_dropout",
          "summary_proj_to_labels",
          "summary_first_dropout",
      ]:
        if "SequenceSummary" in modeling_source:
          __snake_case:						Optional[Any]			  =						True
      if attribute_used:
        break
    if attribute_used:
      break

    # common and important attributes, even if they do not always appear in the modeling files
  __snake_case:						List[str]			  =						[
      '''bos_index''',
      '''eos_index''',
      '''pad_index''',
      '''unk_index''',
      '''mask_index''',
      '''image_size''',
      '''use_cache''',
      '''out_features''',
      '''out_indices''',
  ]
  __snake_case:						Optional[int]			  =						['''encoder_no_repeat_ngram_size''']

  # Special cases to be allowed
  __snake_case:						Tuple			  =						True
  if not attribute_used:
    __snake_case:						Optional[Any]			  =						False
    for attribute in attributes:
      # Allow if the default value in the configuration class is different from the one in `PretrainedConfig`
      if attribute in ["is_encoder_decoder"] and default_value is True:
        __snake_case:						Any			  =						True
      elif attribute in ["tie_word_embeddings"] and default_value is False:
        __snake_case:						Optional[int]			  =						True

      # Allow cases without checking the default value in the configuration class
      elif attribute in attributes_to_allow + attributes_used_in_generation:
        __snake_case:						List[str]			  =						True
      elif attribute.endswith("""_token_id"""):
        __snake_case:						Dict			  =						True

      # configuration class specific cases
      if not case_allowed:
        __snake_case:						Tuple			  =						SPECIAL_CASES_TO_ALLOW.get(config_class.__name__ , [])
        __snake_case:						Optional[Any]			  =						allowed_cases is True or attribute in allowed_cases

  return attribute_used or case_allowed







def       A__							(   SCREAMING_SNAKE_CASE__)       ->   str:
  __snake_case:						Union[str, Any]			  =						dict(inspect.signature(config_class.__init__).parameters)
  __snake_case:						Optional[int]			  =						[x for x in list(signature.keys()) if x not in ['''self''', '''kwargs''']]
  __snake_case:						List[Any]			  =						[signature[param].default for param in parameter_names]

  # If `attribute_map` exists, an attribute can have different names to be used in the modeling files, and as long
  # as one variant is used, the test should pass
  __snake_case:						Tuple			  =						{}
  if len(config_class.attribute_map) > 0:
    __snake_case:						List[Any]			  =						{v: k for k, v in config_class.attribute_map.items()}

  # Get the path to modeling source files
  __snake_case:						Dict			  =						inspect.getsourcefile(__lowerCAmelCase)
  __snake_case:						int			  =						os.path.dirname(__lowerCAmelCase)
  # Let's check against all frameworks: as long as one framework uses an attribute, we are good.
  __snake_case:						List[str]			  =						[os.path.join(__lowerCAmelCase , __lowerCAmelCase) for fn in os.listdir(__lowerCAmelCase) if fn.startswith("""modeling_""")]

  # Get the source code strings
  __snake_case:						List[Any]			  =						[]
  for path in modeling_paths:
    if os.path.isfile(__lowerCAmelCase):
      with open(__lowerCAmelCase) as fp:
        modeling_sources.append(fp.read())

  __snake_case:						int			  =						[]
  for config_param, default_value in zip(__lowerCAmelCase , __lowerCAmelCase):
    # `attributes` here is all the variant names for `config_param`
    __snake_case:						Tuple			  =						[config_param]
    # some configuration classes have non-empty `attribute_map`, and both names could be used in the
    # corresponding modeling files. As long as one of them appears, it is fine.
    if config_param in reversed_attribute_map:
      attributes.append(reversed_attribute_map[config_param])

    if not check_attribute_being_used(__lowerCAmelCase , __lowerCAmelCase , __lowerCAmelCase , __lowerCAmelCase):
      unused_attributes.append(attributes[0])

  return sorted(__lowerCAmelCase)







def       A__							(   )       ->   Optional[Any]:
  __snake_case:						Optional[Any]			  =						{}
  for _config_class in list(CONFIG_MAPPING.values()):
    # Skip deprecated models
    if "models.deprecated" in _config_class.__module__:
      continue
    # Some config classes are not in `CONFIG_MAPPING` (e.g. `CLIPVisionConfig`, `Blip2VisionConfig`, etc.)
    __snake_case:						Tuple			  =						[
        cls
        for name, cls in inspect.getmembers(
            inspect.getmodule(_config_class) , lambda SCREAMING_SNAKE_CASE__: inspect.isclass(__lowerCAmelCase)
            and issubclass(__lowerCAmelCase , __lowerCAmelCase)
            and inspect.getmodule(__lowerCAmelCase) == inspect.getmodule(_config_class) , )
    ]
    for config_class in config_classes_in_module:
      __snake_case:						Dict			  =						check_config_attributes_being_used(__lowerCAmelCase)
      if len(__lowerCAmelCase) > 0:
        __snake_case:						List[str]			  =						unused_attributes

  if len(__lowerCAmelCase) > 0:
    __snake_case:						Union[str, Any]			  =						'''The following configuration classes contain unused attributes in the corresponding modeling files:\n'''
    for name, attributes in configs_with_unused_attributes.items():
      error += F'''{name}: {attributes}\n'''

    raise ValueError(__lowerCAmelCase)


if __name__ == "__main__":
      check_config_attributes()













import functools
import operator

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


__UpperCAmelCase	:       Optional[Any]    	=							logging.get_logger(__name__)

__UpperCAmelCase	:       Union[str, Any]    	=							{
    "asapp/sew-d-tiny-100k": "https://huggingface.co/asapp/sew-d-tiny-100k/resolve/main/config.json",
    # See all SEW-D models at https://huggingface.co/models?filter=sew-d
}







class    __snake_case	(							__lowerCamelCase      ):





       '''simple docstring'''







       lowerCAmelCase__						=					"""sew-d"""




       def __init__(  self			:   Dict							,    A			:   Any=32							,    A			:   Dict=768							,    A			:   Optional[Any]=12							,    A			:   Union[str, Any]=12							,    A			:   Union[str, Any]=3_072							,    A			:   Optional[Any]=2							,    A			:   Union[str, Any]=512							,    A			:   List[Any]=256							,    A			:   Dict=True							,    A			:   Union[str, Any]=True							,    A			:   Optional[int]=("p2c", "c2p")							,    A			:   str="layer_norm"							,    A			:   Dict="gelu_python"							,    A			:   Tuple=0.1							,    A			:   Any=0.1							,    A			:   Tuple=0.1							,    A			:   Optional[int]=0.0							,    A			:   Any=0.1							,    A			:   Any=0.02							,    A			:   Dict=1E-7							,    A			:   str=1E-5							,    A			:   int="group"							,    A			:   int="gelu"							,    A			:   str=(64, 128, 128, 128, 128, 256, 256, 256, 256, 512, 512, 512, 512)							,    A			:   Union[str, Any]=(5, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1)							,    A			:   List[Any]=(10, 3, 1, 3, 1, 3, 1, 3, 1, 2, 1, 2, 1)							,    A			:   Optional[int]=False							,    A			:   int=128							,    A			:   int=16							,    A			:   Optional[Any]=True							,    A			:   List[Any]=0.05							,    A			:   Any=10							,    A			:   Dict=2							,    A			:   List[Any]=0.0							,    A			:   Union[str, Any]=10							,    A			:   int=0							,    A			:   List[Any]="mean"							,    A			:   Union[str, Any]=False							,    A			:   Any=False							,    A			:   Optional[int]=256							,    A			:   List[Any]=0							,    A			:   Any=1							,    A			:   List[Any]=2							,    **A			:   List[Any]							,    ):
         super().__init__(**A							,    pad_token_id=A							,    bos_token_id=A							,    eos_token_id=A		)
         __snake_case:						Optional[int]			  =						hidden_size
         __snake_case:						str			  =						feat_extract_norm
         __snake_case:						int			  =						feat_extract_activation
         __snake_case:						str			  =						list(A		)
         __snake_case:						Any			  =						list(A		)
         __snake_case:						str			  =						list(A		)
         __snake_case:						Union[str, Any]			  =						conv_bias
         __snake_case:						int			  =						num_conv_pos_embeddings
         __snake_case:						str			  =						num_conv_pos_embedding_groups
         __snake_case:						List[Any]			  =						len(self.conv_dim		)
         __snake_case:						List[str]			  =						num_hidden_layers
         __snake_case:						Union[str, Any]			  =						intermediate_size
         __snake_case:						Dict			  =						squeeze_factor
         __snake_case:						List[Any]			  =						max_position_embeddings
         __snake_case:						List[Any]			  =						position_buckets
         __snake_case:						List[str]			  =						share_att_key
         __snake_case:						int			  =						relative_attention
         __snake_case:						Union[str, Any]			  =						norm_rel_ebd
         __snake_case:						List[str]			  =						list(A		)
         __snake_case:						Tuple			  =						hidden_act
         __snake_case:						List[Any]			  =						num_attention_heads
         __snake_case:						str			  =						hidden_dropout
         __snake_case:						int			  =						attention_dropout
         __snake_case:						Dict			  =						activation_dropout
         __snake_case:						Any			  =						feat_proj_dropout
         __snake_case:						int			  =						final_dropout
         __snake_case:						List[Any]			  =						layer_norm_eps
         __snake_case:						List[str]			  =						feature_layer_norm_eps
         __snake_case:						List[Any]			  =						initializer_range
         __snake_case:						List[Any]			  =						vocab_size

         if (
             (len(self.conv_stride		) != self.num_feat_extract_layers)
             or (len(self.conv_kernel		) != self.num_feat_extract_layers)
             or (len(self.conv_dim		) != self.num_feat_extract_layers)
         ):
           raise ValueError(
               """Configuration for convolutional layers is incorrect."""
               """It is required that `len(config.conv_dim)` == `len(config.conv_stride)` == `len(config.conv_kernel)`,"""
               f'''but is `len(config.conv_dim) = {len(self.conv_dim		)}`, `len(config.conv_stride)'''
               f'''= {len(self.conv_stride		)}`, `len(config.conv_kernel) = {len(self.conv_kernel		)}`.'''		)

         # fine-tuning config parameters for SpecAugment: https://arxiv.org/abs/1904.08779
         __snake_case:						List[Any]			  =						apply_spec_augment
         __snake_case:						List[Any]			  =						mask_time_prob
         __snake_case:						str			  =						mask_time_length
         __snake_case:						List[str]			  =						mask_time_min_masks
         __snake_case:						str			  =						mask_feature_prob
         __snake_case:						Optional[int]			  =						mask_feature_length
         __snake_case:						Dict			  =						mask_feature_min_masks

         # ctc loss
         __snake_case:						Any			  =						ctc_loss_reduction
         __snake_case:						str			  =						ctc_zero_infinity

         # sequence classification
         __snake_case:						Optional[Any]			  =						use_weighted_layer_sum
         __snake_case:						List[Any]			  =						classifier_proj_size






       @property
       def 							UpperCAmelCase__			(  self			:   int		):
         return functools.reduce(operator.mul							,    self.conv_stride							,    1		)






