


'''simple docstring'''




import os
import re
import shutil
import sys
import tempfile
import unittest

import black


__snake_case    						=os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
sys.path.append(os.path.join(git_repo_path, """utils"""))

import check_copies  # noqa: E402


# This is the reference code that will be used in the tests.
# If BertLMPredictionHead is changed in modeling_bert.py, this code needs to be manually updated.
__snake_case    						="""    def __init__(self, config):
        super().__init__()
        self.transform = BertPredictionHeadTransform(config)

        # The output weights are the same as the input embeddings, but there is
        # an output-only bias for each token.
        self.decoder = nn.Linear(config.hidden_size, config.vocab_size, bias=False)

        self.bias = nn.Parameter(torch.zeros(config.vocab_size))

        # Need a link between the two variables so that the bias is correctly resized with `resize_token_embeddings`
        self.decoder.bias = self.bias

    def forward(self, hidden_states):
        hidden_states = self.transform(hidden_states)
        hidden_states = self.decoder(hidden_states)
        return hidden_states
"""

class 		UpperCAmelCase_      (  unittest.TestCase		):





     def 							__UpperCAmelCase      ( self       :      Dict    )				->  List[Any]:
        lowerCAmelCase     =			tempfile.mkdtemp()
        os.makedirs(os.path.join(self.transformer_dir    ,      'models/bert/'    )    )
        lowerCAmelCase     =			self.transformer_dir
        shutil.copy(
            os.path.join(UpperCAmelCase__    ,      'src/transformers/models/bert/modeling_bert.py'    )    ,      os.path.join(self.transformer_dir    ,      'models/bert/modeling_bert.py'    )    ,      )





     def 							__UpperCAmelCase      ( self       :      int    )				->  str:
        lowerCAmelCase     =			'src/transformers'
        shutil.rmtree(self.transformer_dir    )





     def 							__UpperCAmelCase      ( self       :      Union[str, Any]    ,      UpperCAmelCase__       :      Any    ,      UpperCAmelCase__       :      Tuple    ,      UpperCAmelCase__       :      Optional[int]    ,      UpperCAmelCase__       :      List[str]=None    )				->  Union[str, Any]:
        lowerCAmelCase     =			comment + F'''\nclass {class_name}(nn.Module):\n''' + class_code
        if overwrite_result is not None:
           lowerCAmelCase     =			comment + F'''\nclass {class_name}(nn.Module):\n''' + overwrite_result
        lowerCAmelCase     =			black.Mode(target_versions={black.TargetVersion.PYaa}    ,      line_length=1_1_9    )
        lowerCAmelCase     =			black.format_str(UpperCAmelCase__    ,      mode=UpperCAmelCase__    )
        lowerCAmelCase     =			os.path.join(self.transformer_dir    ,      'new_code.py'    )
        with open(UpperCAmelCase__    ,      'w'    ,      newline='\n'    ) as f:
           f.write(UpperCAmelCase__    )
        if overwrite_result is None:
           self.assertTrue(len(check_copies.is_copy_consistent(UpperCAmelCase__    )    ) == 0    )
        else:
           check_copies.is_copy_consistent(f.name    ,      overwrite=UpperCAmelCase__    )
           with open(UpperCAmelCase__    ,      'r'    ) as f:
              self.assertTrue(f.read()    ,      UpperCAmelCase__    )





     def 							__UpperCAmelCase      ( self       :      Union[str, Any]    )				->  Dict:
        lowerCAmelCase     =			check_copies.find_code_in_transformers('models.bert.modeling_bert.BertLMPredictionHead'    )
        self.assertEqual(UpperCAmelCase__    ,      UpperCAmelCase__    )





     def 							__UpperCAmelCase      ( self       :      Dict    )				->  Any:
        # Base copy consistency
        self.check_copy_consistency(
            '# Copied from transformers.models.bert.modeling_bert.BertLMPredictionHead'    ,      'BertLMPredictionHead'    ,      REFERENCE_CODE + '\n'    ,      )

        # With no empty line at the end
        self.check_copy_consistency(
            '# Copied from transformers.models.bert.modeling_bert.BertLMPredictionHead'    ,      'BertLMPredictionHead'    ,      UpperCAmelCase__    ,      )

        # Copy consistency with rename
        self.check_copy_consistency(
            '# Copied from transformers.models.bert.modeling_bert.BertLMPredictionHead with Bert->TestModel'    ,      'TestModelLMPredictionHead'    ,      re.sub('Bert'    ,      'TestModel'    ,      UpperCAmelCase__    )    ,      )

        # Copy consistency with a really long name
        lowerCAmelCase     =			'TestModelWithAReallyLongNameBecauseSomePeopleLikeThatForSomeReason'
        self.check_copy_consistency(
            F'''# Copied from transformers.models.bert.modeling_bert.BertLMPredictionHead with Bert->{long_class_name}'''    ,      F'''{long_class_name}LMPredictionHead'''    ,      re.sub('Bert'    ,      UpperCAmelCase__    ,      UpperCAmelCase__    )    ,      )

        # Copy consistency with overwrite
        self.check_copy_consistency(
            '# Copied from transformers.models.bert.modeling_bert.BertLMPredictionHead with Bert->TestModel'    ,      'TestModelLMPredictionHead'    ,      UpperCAmelCase__    ,      overwrite_result=re.sub('Bert'    ,      'TestModel'    ,      UpperCAmelCase__    )    ,      )





     def 							__UpperCAmelCase      ( self       :      Any    )				->  Any:
        lowerCAmelCase     =			check_copies.LOCALIZED_READMES['README_zh-hans.md']

        lowerCAmelCase     =			(
            '1. **[ALBERT](https://huggingface.co/transformers/model_doc/albert.html)** (from Google Research and the'
            ' Toyota Technological Institute at Chicago) released with the paper [ALBERT: A Lite BERT for'
            ' Self-supervised Learning of Language Representations](https://arxiv.org/abs/1909.11942), by Zhenzhong'
            ' Lan, Mingda Chen, Sebastian Goodman, Kevin Gimpel, Piyush Sharma, Radu Soricut.\n1.'
            ' **[DistilBERT](https://huggingface.co/transformers/model_doc/distilbert.html)** (from HuggingFace),'
            ' released together with the paper [DistilBERT, a distilled version of BERT: smaller, faster, cheaper and'
            ' lighter](https://arxiv.org/abs/1910.01108) by Victor Sanh, Lysandre Debut and Thomas Wolf. The same'
            ' method has been applied to compress GPT2 into'
            ' [DistilGPT2](https://github.com/huggingface/transformers/tree/main/examples/distillation), RoBERTa into'
            ' [DistilRoBERTa](https://github.com/huggingface/transformers/tree/main/examples/distillation),'
            ' Multilingual BERT into'
            ' [DistilmBERT](https://github.com/huggingface/transformers/tree/main/examples/distillation) and a German'
            ' version of DistilBERT.\n1. **[ELECTRA](https://huggingface.co/transformers/model_doc/electra.html)**'
            ' (from Google Research/Stanford University) released with the paper [ELECTRA: Pre-training text encoders'
            ' as discriminators rather than generators](https://arxiv.org/abs/2003.10555) by Kevin Clark, Minh-Thang'
            ' Luong, Quoc V. Le, Christopher D. Manning.'
        )
        lowerCAmelCase     =			(
            '1. **[ALBERT](https://huggingface.co/transformers/model_doc/albert.html)** (来自 Google Research and the'
            ' Toyota Technological Institute at Chicago) 伴随论文 [ALBERT: A Lite BERT for Self-supervised Learning of'
            ' Language Representations](https://arxiv.org/abs/1909.11942), 由 Zhenzhong Lan, Mingda Chen, Sebastian'
            ' Goodman, Kevin Gimpel, Piyush Sharma, Radu Soricut 发布。\n'
        )
        lowerCAmelCase     =			(
            '1. **[ALBERT](https://huggingface.co/transformers/model_doc/albert.html)** (来自 Google Research and the'
            ' Toyota Technological Institute at Chicago) 伴随论文 [ALBERT: A Lite BERT for Self-supervised Learning of'
            ' Language Representations](https://arxiv.org/abs/1909.11942), 由 Zhenzhong Lan, Mingda Chen, Sebastian'
            ' Goodman, Kevin Gimpel, Piyush Sharma, Radu Soricut 发布。\n1.'
            ' **[DistilBERT](https://huggingface.co/transformers/model_doc/distilbert.html)** (来自 HuggingFace) 伴随论文'
            ' [DistilBERT, a distilled version of BERT: smaller, faster, cheaper and'
            ' lighter](https://arxiv.org/abs/1910.01108) 由 Victor Sanh, Lysandre Debut and Thomas Wolf 发布。 The same'
            ' method has been applied to compress GPT2 into'
            ' [DistilGPT2](https://github.com/huggingface/transformers/tree/main/examples/distillation), RoBERTa into'
            ' [DistilRoBERTa](https://github.com/huggingface/transformers/tree/main/examples/distillation),'
            ' Multilingual BERT into'
            ' [DistilmBERT](https://github.com/huggingface/transformers/tree/main/examples/distillation) and a German'
            ' version of DistilBERT.\n1. **[ELECTRA](https://huggingface.co/transformers/model_doc/electra.html)** (来自'
            ' Google Research/Stanford University) 伴随论文 [ELECTRA: Pre-training text encoders as discriminators rather'
            ' than generators](https://arxiv.org/abs/2003.10555) 由 Kevin Clark, Minh-Thang Luong, Quoc V. Le,'
            ' Christopher D. Manning 发布。\n'
        )

        lowerCAmelCase     ,  lowerCAmelCase     =			check_copies.convert_to_localized_md(
            UpperCAmelCase__    ,      UpperCAmelCase__    ,      localized_readme['format_model_list']    )

        self.assertFalse(UpperCAmelCase__    )
        self.assertEqual(UpperCAmelCase__    ,      UpperCAmelCase__    )

        lowerCAmelCase     ,  lowerCAmelCase     =			check_copies.convert_to_localized_md(
            UpperCAmelCase__    ,      UpperCAmelCase__    ,      localized_readme['format_model_list']    )

        # Check whether the number of models is equal to README.md after conversion.
        self.assertTrue(UpperCAmelCase__    )

        lowerCAmelCase     =			(
            '1. **[ALBERT](https://huggingface.co/transformers/model_doc/albert.html)** (from Google Research and the'
            ' Toyota Technological Institute at Chicago) released with the paper [ALBERT: A Lite BERT for'
            ' Self-supervised Learning of Language Representations](https://arxiv.org/abs/1909.11942), by Zhenzhong'
            ' Lan, Mingda Chen, Sebastian Goodman, Kevin Gimpel, Piyush Sharma, Radu Soricut.'
        )
        lowerCAmelCase     =			(
            '1. **[ALBERT](https://huggingface.co/transformers/main/model_doc/albert.html)** (来自 Google Research and'
            ' the Toyota Technological Institute at Chicago) 伴随论文 [ALBERT: A Lite BERT for Self-supervised Learning of'
            ' Language Representations](https://arxiv.org/abs/1909.11942), 由 Zhenzhong Lan, Mingda Chen, Sebastian'
            ' Goodman, Kevin Gimpel, Piyush Sharma, Radu Soricut 发布。\n'
        )
        lowerCAmelCase     =			(
            '1. **[ALBERT](https://huggingface.co/transformers/model_doc/albert.html)** (来自 Google Research and the'
            ' Toyota Technological Institute at Chicago) 伴随论文 [ALBERT: A Lite BERT for Self-supervised Learning of'
            ' Language Representations](https://arxiv.org/abs/1909.11942), 由 Zhenzhong Lan, Mingda Chen, Sebastian'
            ' Goodman, Kevin Gimpel, Piyush Sharma, Radu Soricut 发布。\n'
        )

        lowerCAmelCase     ,  lowerCAmelCase     =			check_copies.convert_to_localized_md(
            UpperCAmelCase__    ,      UpperCAmelCase__    ,      localized_readme['format_model_list']    )

        # Check if the model link is synchronized.
        self.assertEqual(UpperCAmelCase__    ,      UpperCAmelCase__    )









'''simple docstring'''




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


__snake_case    						=logging.get_logger(__name__)

__snake_case    						={
    """facebook/s2t-wav2vec2-large-en-de""": (
        """https://huggingface.co/facebook/s2t-wav2vec2-large-en-de/resolve/main/config.json"""
    ),
    # See all Speech2Text models at https://huggingface.co/models?filter=speech2text2
}

class 		UpperCAmelCase_      (  __lowercase		):
     lowerCamelCase				:	Union[str, Any]		=     '''speech_to_text_2'''
     lowerCamelCase				:	Any		=     ['''past_key_values''']
     lowerCamelCase				:	Optional[Any]		=     {'''num_attention_heads''': '''decoder_attention_heads''', '''hidden_size''': '''d_model'''}





     def __init__( self       :      Optional[int]    ,      UpperCAmelCase__       :      Optional[Any]=1_0_0_0_0    ,      UpperCAmelCase__       :      int=6    ,      UpperCAmelCase__       :      Optional[Any]=2_0_4_8    ,      UpperCAmelCase__       :      Union[str, Any]=4    ,      UpperCAmelCase__       :      List[Any]=0.0    ,      UpperCAmelCase__       :      str=True    ,      UpperCAmelCase__       :      str="relu"    ,      UpperCAmelCase__       :      Any=2_5_6    ,      UpperCAmelCase__       :      Optional[Any]=0.1    ,      UpperCAmelCase__       :      Any=0.0    ,      UpperCAmelCase__       :      Tuple=0.0    ,      UpperCAmelCase__       :      List[Any]=0.02    ,      UpperCAmelCase__       :      List[Any]=2    ,      UpperCAmelCase__       :      str=True    ,      UpperCAmelCase__       :      List[str]=1    ,      UpperCAmelCase__       :      Any=0    ,      UpperCAmelCase__       :      Dict=2    ,      UpperCAmelCase__       :      int=1_0_2_4    ,      **UpperCAmelCase__       :      Optional[Any]    ,      )				->  Dict:
        lowerCAmelCase     =			vocab_size
        lowerCAmelCase     =			d_model
        lowerCAmelCase     =			decoder_ffn_dim
        lowerCAmelCase     =			decoder_layers
        lowerCAmelCase     =			decoder_attention_heads
        lowerCAmelCase     =			dropout
        lowerCAmelCase     =			attention_dropout
        lowerCAmelCase     =			activation_dropout
        lowerCAmelCase     =			activation_function
        lowerCAmelCase     =			init_std
        lowerCAmelCase     =			decoder_layerdrop
        lowerCAmelCase     =			use_cache
        lowerCAmelCase     =			decoder_layers
        lowerCAmelCase     =			scale_embedding  # scale factor will be sqrt(d_model) if True
        lowerCAmelCase     =			max_target_positions

        super().__init__(
            pad_token_id=UpperCAmelCase__    ,      bos_token_id=UpperCAmelCase__    ,      eos_token_id=UpperCAmelCase__    ,      decoder_start_token_id=UpperCAmelCase__    ,      **UpperCAmelCase__    ,      )





