





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

import black


lowercase    : Optional[int]    	=  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.
lowercase    : Any    	=  """    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  __A(						unittest.TestCase ):

     def 	_UpperCamelCase     (      self      ):





            """simple docstring"""

            _UpperCamelCase              =						tempfile.mkdtemp()
            os.makedirs(os.path.join(self.transformer_dir,       '''models/bert/'''      )      )
            _UpperCamelCase              =						self.transformer_dir
            shutil.copy(
                os.path.join(A,       '''src/transformers/models/bert/modeling_bert.py'''      ),       os.path.join(self.transformer_dir,       '''models/bert/modeling_bert.py'''      ),       )

     def 	_UpperCamelCase     (      self      ):





            """simple docstring"""

            _UpperCamelCase              =						'''src/transformers'''
            shutil.rmtree(self.transformer_dir      )

     def 	_UpperCamelCase     (      self,       A,       A,       A,       A=None      ):





            """simple docstring"""

            _UpperCamelCase              =						comment + F'''\nclass {class_name}(nn.Module):\n''' + class_code
            if overwrite_result is not None:
                   _UpperCamelCase              =						comment + F'''\nclass {class_name}(nn.Module):\n''' + overwrite_result
            _UpperCamelCase              =						black.Mode(target_versions={black.TargetVersion.PYaa},       line_length=119      )
            _UpperCamelCase              =						black.format_str(A,       mode=A      )
            _UpperCamelCase              =						os.path.join(self.transformer_dir,       '''new_code.py'''      )
            with open(A,       '''w''',       newline='''\n'''      ) as f:
                   f.write(A      )
            if overwrite_result is None:
                   self.assertTrue(len(check_copies.is_copy_consistent(A      )      ) == 0      )
            else:
                   check_copies.is_copy_consistent(f.name,       overwrite=A      )
                   with open(A,       '''r'''      ) as f:
                          self.assertTrue(f.read(),       A      )

     def 	_UpperCamelCase     (      self      ):





            """simple docstring"""

            _UpperCamelCase              =						check_copies.find_code_in_transformers('''models.bert.modeling_bert.BertLMPredictionHead'''      )
            self.assertEqual(A,       A      )

     def 	_UpperCamelCase     (      self      ):





            """simple docstring"""

            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''',       A,       )

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

            # Copy consistency with a really long name
            _UpperCamelCase              =						'''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''',       A,       A      ),       )

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



     def 	_UpperCamelCase     (      self      ):





            """simple docstring"""

            _UpperCamelCase              =						check_copies.LOCALIZED_READMES['''README_zh-hans.md''']

            _UpperCamelCase              =						(
                '''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.'''
            )
            _UpperCamelCase              =						(
                '''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'''
            )
            _UpperCamelCase              =						(
                '''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'''
            )

            _UpperCamelCase       ,		_UpperCamelCase              =						check_copies.convert_to_localized_md(
                A,       A,       localized_readme['''format_model_list''']      )

            self.assertFalse(A      )
            self.assertEqual(A,       A      )

            _UpperCamelCase       ,		_UpperCamelCase              =						check_copies.convert_to_localized_md(
                A,       A,       localized_readme['''format_model_list''']      )

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

            _UpperCamelCase              =						(
                '''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.'''
            )
            _UpperCamelCase              =						(
                '''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'''
            )
            _UpperCamelCase              =						(
                '''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'''
            )

            _UpperCamelCase       ,		_UpperCamelCase              =						check_copies.convert_to_localized_md(
                A,       A,       localized_readme['''format_model_list''']      )

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













def     SCREAMING_SNAKE_CASE			(      lowerCAmelCase					):
       _UpperCamelCase              =						0
       for ch in input_str:
              _UpperCamelCase              =						ord(lowerCAmelCase					)
              _UpperCamelCase              =						pow(2    ,       lowerCAmelCase					)

              # If we already turned on bit for current character's unicode
              if bitmap >> ch_unicode & 1 == 1:
                     return False
              bitmap |= ch_bit_index_on
       return True


if __name__ == "__main__":
       import doctest

       doctest.testmod()






