
'''simple docstring'''





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

import black


lowercase_	 =						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_	 =						"    def __init__(self, config):\n        super().__init__()\n        self.transform = BertPredictionHeadTransform(config)\n\n        # The output weights are the same as the input embeddings, but there is\n        # an output-only bias for each token.\n        self.decoder = nn.Linear(config.hidden_size, config.vocab_size, bias=False)\n\n        self.bias = nn.Parameter(torch.zeros(config.vocab_size))\n\n        # Need a link between the two variables so that the bias is correctly resized with `resize_token_embeddings`\n        self.decoder.bias = self.bias\n\n    def forward(self, hidden_states):\n        hidden_states = self.transform(hidden_states)\n        hidden_states = self.decoder(hidden_states)\n        return hidden_states\n"






class __A    (						unittest.TestCase		):



 '''simple docstring'''







 def       a__						(self )					->  int:


      """simple docstring"""



      _a											=						tempfile.mkdtemp()
      os.makedirs(os.path.join(self.transformer_dir				,     '''models/bert/''' ) )
      _a											=						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       a__						(self )					->  str:


      """simple docstring"""



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



 def       a__						(self				,     A				,     A				,     A				,     A=None )					->  List[str]:


      """simple docstring"""



      _a											=						comment + f'''\nclass {class_name}(nn.Module):\n''' + class_code
      if overwrite_result is not None:
           _a											=						comment + f'''\nclass {class_name}(nn.Module):\n''' + overwrite_result
      _a											=						black.Mode(target_versions={black.TargetVersion.PYaa}				,     line_length=119 )
      _a											=						black.format_str(A				,     mode=A )
      _a											=						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       a__						(self )					->  Dict:


      """simple docstring"""



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



 def       a__						(self )					->  Union[str, Any]:


      """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
      _a											=						'''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       a__						(self )					->  int:


      """simple docstring"""



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

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

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

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

      _a						,					_a											=						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 )

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

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

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








'''simple docstring'''





import datasets

from .nmt_bleu import compute_bleu  # From: https://github.com/tensorflow/nmt/blob/master/nmt/scripts/bleu.py


lowercase_	 =						"\\n@INPROCEEDINGS{Papineni02bleu:a,\n    author = {Kishore Papineni and Salim Roukos and Todd Ward and Wei-jing Zhu},\n    title = {BLEU: a Method for Automatic Evaluation of Machine Translation},\n    booktitle = {},\n    year = {2002},\n    pages = {311--318}\n}\n@inproceedings{lin-och-2004-orange,\n    title = \"{ORANGE}: a Method for Evaluating Automatic Evaluation Metrics for Machine Translation\",\n    author = \"Lin, Chin-Yew  and\n      Och, Franz Josef\",\n    booktitle = \"{COLING} 2004: Proceedings of the 20th International Conference on Computational Linguistics\",\n    month = \"aug 23{--}aug 27\",\n    year = \"2004\",\n    address = \"Geneva, Switzerland\",\n    publisher = \"COLING\",\n    url = \"https://www.aclweb.org/anthology/C04-1072\",\n    pages = \"501--507\",\n}\n"

lowercase_	 =						"\\nBLEU (bilingual evaluation understudy) is an algorithm for evaluating the quality of text which has been machine-translated from one natural language to another.\nQuality is considered to be the correspondence between a machine's output and that of a human: \"the closer a machine translation is to a professional human translation,\nthe better it is\" – this is the central idea behind BLEU. BLEU was one of the first metrics to claim a high correlation with human judgements of quality, and\nremains one of the most popular automated and inexpensive metrics.\n\nScores are calculated for individual translated segments—generally sentences—by comparing them with a set of good quality reference translations.\nThose scores are then averaged over the whole corpus to reach an estimate of the translation's overall quality. Intelligibility or grammatical correctness\nare not taken into account[citation needed].\n\nBLEU's output is always a number between 0 and 1. This value indicates how similar the candidate text is to the reference texts, with values closer to 1\nrepresenting more similar texts. Few human translations will attain a score of 1, since this would indicate that the candidate is identical to one of the\nreference translations. For this reason, it is not necessary to attain a score of 1. Because there are more opportunities to match, adding additional\nreference translations will increase the BLEU score.\n"

lowercase_	 =						"\nComputes BLEU score of translated segments against one or more references.\nArgs:\n    predictions: list of translations to score.\n        Each translation should be tokenized into a list of tokens.\n    references: list of lists of references for each translation.\n        Each reference should be tokenized into a list of tokens.\n    max_order: Maximum n-gram order to use when computing BLEU score.\n    smooth: Whether or not to apply Lin et al. 2004 smoothing.\nReturns:\n    'bleu': bleu score,\n    'precisions': geometric mean of n-gram precisions,\n    'brevity_penalty': brevity penalty,\n    'length_ratio': ratio of lengths,\n    'translation_length': translation_length,\n    'reference_length': reference_length\nExamples:\n\n    >>> predictions = [\n    ...     [\"hello\", \"there\", \"general\", \"kenobi\"],                             # tokenized prediction of the first sample\n    ...     [\"foo\", \"bar\", \"foobar\"]                                             # tokenized prediction of the second sample\n    ... ]\n    >>> references = [\n    ...     [[\"hello\", \"there\", \"general\", \"kenobi\"], [\"hello\", \"there\", \"!\"]],  # tokenized references for the first sample (2 references)\n    ...     [[\"foo\", \"bar\", \"foobar\"]]                                           # tokenized references for the second sample (1 reference)\n    ... ]\n    >>> bleu = datasets.load_metric(\"bleu\")\n    >>> results = bleu.compute(predictions=predictions, references=references)\n    >>> print(results[\"bleu\"])\n    1.0\n"






@datasets.utils.file_utils.add_start_docstrings(_DESCRIPTION     ,     _KWARGS_DESCRIPTION		)
class __A    (						datasets.Metric		):



 '''simple docstring'''







 def       a__						(self )					->  Union[str, Any]:


      """simple docstring"""



      return datasets.MetricInfo(
          description=_DESCRIPTION				,     citation=_CITATION				,     inputs_description=_KWARGS_DESCRIPTION				,     features=datasets.Features(
              {
                  '''predictions''': datasets.Sequence(datasets.Value('''string'''				,     id='''token''' )				,     id='''sequence''' ),
                  '''references''': datasets.Sequence(
                      datasets.Sequence(datasets.Value('''string'''				,     id='''token''' )				,     id='''sequence''' )				,     id='''references''' ),
              } )				,     codebase_urls=['''https://github.com/tensorflow/nmt/blob/master/nmt/scripts/bleu.py''']				,     reference_urls=[
              '''https://en.wikipedia.org/wiki/BLEU''',
              '''https://towardsdatascience.com/evaluating-text-output-in-nlp-bleu-at-your-own-risk-e8609665a213''',
          ]				,     )



 def       a__						(self				,     A				,     A				,     A=4				,     A=False )					->  Tuple:


      """simple docstring"""



      _a											=						compute_bleu(
          reference_corpus=A				,     translation_corpus=A				,     max_order=A				,     smooth=A )
      ((_a)						,					(_a)						,					(_a)						,					(_a)						,					(_a)						,					(_a))											=						score
      return {
          "bleu": bleu,
          "precisions": precisions,
          "brevity_penalty": bp,
          "length_ratio": ratio,
          "translation_length": translation_length,
          "reference_length": reference_length,
      }



