




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

import black


snake_case_  :      Dict		=		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_  :      Optional[int]		=		"    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 					snake_case_   (     unittest.TestCase	):



				'''simple docstring'''





				def    __SCREAMING_SNAKE_CASE     (      self							:   Optional[int]							)							->			List[Any]:
											lowerCamelCase_			:    int   						=      tempfile.mkdtemp()
											os.makedirs(os.path.join(self.transformer_dir      ,							"models/bert/"							)							)
											lowerCamelCase_			:    Tuple   						=      self.transformer_dir
											shutil.copy(
											    os.path.join(__magic_name__      ,							"src/transformers/models/bert/modeling_bert.py"							)      ,							os.path.join(self.transformer_dir      ,							"models/bert/modeling_bert.py"							)      ,							)





				def    __SCREAMING_SNAKE_CASE     (      self							:   Dict							)							->			Tuple:
											lowerCamelCase_			:    Union[str, Any]   						=      "src/transformers"
											shutil.rmtree(self.transformer_dir							)





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





				def    __SCREAMING_SNAKE_CASE     (      self							:   Tuple							)							->			Union[str, Any]:
											lowerCamelCase_			:    Any   						=      check_copies.find_code_in_transformers("models.bert.modeling_bert.BertLMPredictionHead"							)
											self.assertEqual(__magic_name__      ,							__magic_name__							)





				def    __SCREAMING_SNAKE_CASE     (      self							:   int							)							->			str:
											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"      ,							__magic_name__      ,							)

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

											# Copy consistency with a really long name
											lowerCamelCase_			:    Optional[Any]   						=      "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"      ,							__magic_name__      ,							__magic_name__							)      ,							)

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





				def    __SCREAMING_SNAKE_CASE     (      self							:   Union[str, Any]							)							->			Any:
											lowerCamelCase_			:    Dict   						=      check_copies.LOCALIZED_READMES["README_zh-hans.md"]

											lowerCamelCase_			:    List[str]   						=      (
											    "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_			:    Dict   						=      (
											    "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_			:    Union[str, Any]   						=      (
											    "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_			:    Any   						=      check_copies.convert_to_localized_md(
											    __magic_name__      ,							__magic_name__      ,							localized_readme["format_model_list"]							)

											self.assertFalse(__magic_name__							)
											self.assertEqual(__magic_name__      ,							__magic_name__							)

											lowerCamelCase_						,						lowerCamelCase_			:    Union[str, Any]   						=      check_copies.convert_to_localized_md(
											    __magic_name__      ,							__magic_name__      ,							localized_readme["format_model_list"]							)

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

											lowerCamelCase_			:    List[str]   						=      (
											    "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_			:    Tuple   						=      (
											    "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_			:    Tuple   						=      (
											    "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_			:    Optional[Any]   						=      check_copies.convert_to_localized_md(
											    __magic_name__      ,							__magic_name__      ,							localized_readme["format_model_list"]							)

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





# Copyright 2021 The HuggingFace Team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import argparse

from .config import config_command_parser
from .config_args import default_config_file, load_config_from_file  # noqa: F401
from .default import default_command_parser
from .update import update_command_parser






def 	__lowerCamelCase						(							lowerCamelCase__		:						Any=None      ):





			'''simple docstring'''




			lowerCamelCase    		=  argparse.ArgumentParser(add_help=lowerCamelCase__  ,							allow_abbrev=lowerCamelCase__      )
			# The main config parser
			lowerCamelCase    		=  config_command_parser(lowerCamelCase__      )
			# The subparser to add commands to
			lowerCamelCase    		=  config_parser.add_subparsers(title="""subcommands"""  ,							dest="""subcommand"""      )

			# Then add other parsers with the parent parser
			default_command_parser(lowerCamelCase__  ,							parents=[parent_parser]      )
			update_command_parser(lowerCamelCase__  ,							parents=[parent_parser]      )

			return config_parser






def 	__lowerCamelCase						(							):





			'''simple docstring'''




			lowerCamelCase    		=  get_config_parser()
			lowerCamelCase    		=  config_parser.parse_args()

			if not hasattr(lowerCamelCase__  ,							"""func"""      ):
						config_parser.print_help()
						exit(1      )

			# Run
			args.func(lowerCamelCase__      )


if __name__ == "__main__":
		main()

