





"""simple docstring"""





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


lowercase__					:int					 =							logging.get_logger(__name__)

lowercase__					:Optional[Any]					 =							{
    'speechbrain/m-ctc-t-large': 'https://huggingface.co/speechbrain/m-ctc-t-large/resolve/main/config.json',
    # See all M-CTC-T models at https://huggingface.co/models?filter=mctct
}




class 				snake_case				(      __a			):

      '''simple docstring'''



      _A  :							List[str]								=							'mctct'

      def __init__(				self							:   str    ,					__lowercase							:   Any=8_065    ,					__lowercase							:   Optional[int]=1_536    ,					__lowercase							:   Union[str, Any]=36    ,					__lowercase							:   int=6_144    ,					__lowercase							:   int=4    ,					__lowercase							:   Any=384    ,					__lowercase							:   Any=920    ,					__lowercase							:   List[str]=1e-5    ,					__lowercase							:   Union[str, Any]=0.3    ,					__lowercase							:   Tuple="relu"    ,					__lowercase							:   Any=0.0_2    ,					__lowercase							:   Any=0.3    ,					__lowercase							:   List[str]=0.3    ,					__lowercase							:   List[Any]=1    ,					__lowercase							:   Dict=0    ,					__lowercase							:   List[str]=2    ,					__lowercase							:   Tuple=1    ,					__lowercase							:   List[Any]=0.3    ,					__lowercase							:   Optional[int]=1    ,					__lowercase							:   Optional[int]=(7,)    ,					__lowercase							:   int=(3,)    ,					__lowercase							:   Optional[Any]=80    ,					__lowercase							:   int=1    ,					__lowercase							:   Union[str, Any]=None    ,					__lowercase							:   List[str]="sum"    ,					__lowercase							:   Optional[Any]=False    ,					**__lowercase							:   List[Any]    ,					):


        '''simple docstring'''




        super().__init__(**lowercase_    ,					pad_token_id=lowercase_    ,					bos_token_id=lowercase_    ,					eos_token_id=lowercase_			)
        __UpperCAmelCase     :    Optional[Any]							=    vocab_size
        __UpperCAmelCase     :    Union[str, Any]							=    hidden_size
        __UpperCAmelCase     :    str							=    num_hidden_layers
        __UpperCAmelCase     :    int							=    intermediate_size
        __UpperCAmelCase     :    Optional[Any]							=    num_attention_heads
        __UpperCAmelCase     :    Tuple							=    attention_head_dim
        __UpperCAmelCase     :    Optional[Any]							=    max_position_embeddings
        __UpperCAmelCase     :    List[Any]							=    layer_norm_eps
        __UpperCAmelCase     :    Any							=    layerdrop
        __UpperCAmelCase     :    Union[str, Any]							=    hidden_act
        __UpperCAmelCase     :    Optional[int]							=    initializer_range
        __UpperCAmelCase     :    Optional[int]							=    hidden_dropout_prob
        __UpperCAmelCase     :    Optional[Any]							=    attention_probs_dropout_prob
        __UpperCAmelCase     :    Union[str, Any]							=    pad_token_id
        __UpperCAmelCase     :    Tuple							=    bos_token_id
        __UpperCAmelCase     :    str							=    eos_token_id
        __UpperCAmelCase     :    int							=    conv_glu_dim
        __UpperCAmelCase     :    str							=    conv_dropout
        __UpperCAmelCase     :    List[str]							=    num_conv_layers
        __UpperCAmelCase     :    Dict							=    input_feat_per_channel
        __UpperCAmelCase     :    Dict							=    input_channels
        __UpperCAmelCase     :    Optional[Any]							=    conv_channels
        __UpperCAmelCase     :    Union[str, Any]							=    ctc_loss_reduction
        __UpperCAmelCase     :    Any							=    ctc_zero_infinity

        # prevents config testing fail with exporting to json
        __UpperCAmelCase     :    List[str]							=    list(lowercase_			)
        __UpperCAmelCase     :    Dict							=    list(lowercase_			)

        if len(self.conv_kernel			) != self.num_conv_layers:
          raise ValueError(
              '''Configuration for convolutional module is incorrect. '''
              '''It is required that `len(config.conv_kernel)` == `config.num_conv_layers` '''
              f'''but is `len(config.conv_kernel) = {len(self.conv_kernel			)}`, '''
              f'''`config.num_conv_layers = {self.num_conv_layers}`.'''			)
'''simple docstring'''


import argparse
import collections
import os
import re

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_table.py
__snake_case						  =		"""src/transformers"""
__snake_case						  =		"""docs/source/en"""
__snake_case						  =		"""."""

def   A_      (       SCREAMING_SNAKE_CASE_ ,	SCREAMING_SNAKE_CASE_ ,	SCREAMING_SNAKE_CASE_						)			->Tuple:
  with open(SCREAMING_SNAKE_CASE_ ,	"""r""" ,	encoding="""utf-8""" ,	newline="""\n"""						) as f:
    lowercase_     =       f.readlines()
  # Find the start prompt.
  lowercase_     =       0
  while not lines[start_index].startswith(SCREAMING_SNAKE_CASE_						):
    start_index += 1
  start_index += 1

  lowercase_     =       start_index
  while not lines[end_index].startswith(SCREAMING_SNAKE_CASE_						):
    end_index += 1
  end_index -= 1

  while len(lines[start_index]						) <= 1:
    start_index += 1
  while len(lines[end_index]						) <= 1:
    end_index -= 1
  end_index += 1
  return "".join(lines[start_index:end_index]						), start_index, end_index, lines


# Add here suffixes that are used to identify models, separated by |
__snake_case						  =		"""Model|Encoder|Decoder|ForConditionalGeneration"""
# Regexes that match TF/Flax/PT model names.
__snake_case						  =		re.compile(r"""TF(.*)(?:Model|Encoder|Decoder|ForConditionalGeneration)""")
__snake_case						  =		re.compile(r"""Flax(.*)(?:Model|Encoder|Decoder|ForConditionalGeneration)""")
# Will match any TF or Flax model too so need to be in an else branch afterthe two previous regexes.
__snake_case						  =		re.compile(r"""(.*)(?:Model|Encoder|Decoder|ForConditionalGeneration)""")


# This is to make sure the transformers module imported is the one in the repo.
__snake_case						  =		direct_transformers_import(TRANSFORMERS_PATH)

def   A_      (       SCREAMING_SNAKE_CASE_						)			->Dict:
  lowercase_     =       re.finditer(""".+?(?:(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|$)""" ,	SCREAMING_SNAKE_CASE_						)
  return [m.group(0						) for m in matches]

def   A_      (       SCREAMING_SNAKE_CASE_ ,	SCREAMING_SNAKE_CASE_						)			->Optional[Any]:
  lowercase_     =       2 if text == """✅""" or text == """❌""" else len(SCREAMING_SNAKE_CASE_						)
  lowercase_     =       (width - text_length) // 2
  lowercase_     =       width - text_length - left_indent
  return " " * left_indent + text + " " * right_indent

def   A_      (       )			->Tuple:
  lowercase_     =       transformers_module.models.auto.configuration_auto.CONFIG_MAPPING_NAMES
  lowercase_     =       {
      name: config_maping_names[code]
      for code, name in transformers_module.MODEL_NAMES_MAPPING.items()
      if code in config_maping_names
  }
  lowercase_     =       {name: config.replace("""Config""" ,	""""""						) for name, config in model_name_to_config.items()}

  # Dictionaries flagging if each model prefix has a slow/fast tokenizer, backend in PT/TF/Flax.
  lowercase_     =       collections.defaultdict(SCREAMING_SNAKE_CASE_						)
  lowercase_     =       collections.defaultdict(SCREAMING_SNAKE_CASE_						)
  lowercase_     =       collections.defaultdict(SCREAMING_SNAKE_CASE_						)
  lowercase_     =       collections.defaultdict(SCREAMING_SNAKE_CASE_						)
  lowercase_     =       collections.defaultdict(SCREAMING_SNAKE_CASE_						)

  # Let's lookup through all transformers object (once).
  for attr_name in dir(SCREAMING_SNAKE_CASE_						):
    lowercase_     =       None
    if attr_name.endswith("""Tokenizer"""						):
      lowercase_     =       slow_tokenizers
      lowercase_     =       attr_name[:-9]
    elif attr_name.endswith("""TokenizerFast"""						):
      lowercase_     =       fast_tokenizers
      lowercase_     =       attr_name[:-13]
    elif _re_tf_models.match(SCREAMING_SNAKE_CASE_						) is not None:
      lowercase_     =       tf_models
      lowercase_     =       _re_tf_models.match(SCREAMING_SNAKE_CASE_						).groups()[0]
    elif _re_flax_models.match(SCREAMING_SNAKE_CASE_						) is not None:
      lowercase_     =       flax_models
      lowercase_     =       _re_flax_models.match(SCREAMING_SNAKE_CASE_						).groups()[0]
    elif _re_pt_models.match(SCREAMING_SNAKE_CASE_						) is not None:
      lowercase_     =       pt_models
      lowercase_     =       _re_pt_models.match(SCREAMING_SNAKE_CASE_						).groups()[0]

    if lookup_dict is not None:
      while len(SCREAMING_SNAKE_CASE_						) > 0:
        if attr_name in model_name_to_prefix.values():
          lowercase_     =       True
          break
        # Try again after removing the last word in the name
        lowercase_     =       """""".join(camel_case_split(SCREAMING_SNAKE_CASE_						)[:-1]						)

    # Let's build that table!
  lowercase_     =       list(model_name_to_config.keys()						)
  model_names.sort(key=str.lower						)
  lowercase_     =       ["""Model""", """Tokenizer slow""", """Tokenizer fast""", """PyTorch support""", """TensorFlow support""", """Flax Support"""]
  # We'll need widths to properly display everything in the center (+2 is to leave one extra space on each side).
  lowercase_     =       [len(SCREAMING_SNAKE_CASE_						) + 2 for c in columns]
  lowercase_     =       max([len(SCREAMING_SNAKE_CASE_						) for name in model_names]						) + 2

  # Build the table per se
  lowercase_     =       """|""" + """|""".join([_center_text(SCREAMING_SNAKE_CASE_ ,	SCREAMING_SNAKE_CASE_						) for c, w in zip(SCREAMING_SNAKE_CASE_ ,	SCREAMING_SNAKE_CASE_						)]						) + """|\n"""
  # Use ":-----:" format to center-aligned table cell texts
  table += "|" + "|".join([""":""" + """-""" * (w - 2) + """:""" for w in widths]						) + "|\n"

  lowercase_     =       {True: """✅""", False: """❌"""}
  for name in model_names:
    lowercase_     =       model_name_to_prefix[name]
    lowercase_     =       [
        name,
        check[slow_tokenizers[prefix]],
        check[fast_tokenizers[prefix]],
        check[pt_models[prefix]],
        check[tf_models[prefix]],
        check[flax_models[prefix]],
    ]
    table += "|" + "|".join([_center_text(SCREAMING_SNAKE_CASE_ ,	SCREAMING_SNAKE_CASE_						) for l, w in zip(SCREAMING_SNAKE_CASE_ ,	SCREAMING_SNAKE_CASE_						)]						) + "|\n"
  return table

def   A_      (       SCREAMING_SNAKE_CASE_=False						)			->Dict:
  lowercase_     ,	lowercase_     ,	lowercase_     ,	lowercase_     =       _find_text_in_file(
      filename=os.path.join(SCREAMING_SNAKE_CASE_ ,	"""index.md"""						) ,	start_prompt="""<!--This table is updated automatically from the auto modules""" ,	end_prompt="""<!-- End table-->""" ,	)
  lowercase_     =       get_model_table_from_auto_modules()

  if current_table != new_table:
    if overwrite:
      with open(os.path.join(SCREAMING_SNAKE_CASE_ ,	"""index.md"""						) ,	"""w""" ,	encoding="""utf-8""" ,	newline="""\n"""						) as f:
        f.writelines(lines[:start_index] + [new_table] + lines[end_index:]						)
    else:
      raise ValueError(
          """The model table in the `index.md` has not been updated. Run `make fix-copies` to fix this."""						)


if __name__ == "__main__":
       __snake_case						  =		argparse.ArgumentParser()
       parser.add_argument("""--fix_and_overwrite""", action="""store_true""", help="""Whether to fix inconsistencies.""")
       __snake_case						  =		parser.parse_args()

       check_model_table(args.fix_and_overwrite)

