






# Usage:
# ./gen-card-allenai-wmt16.py

import os
from pathlib import Path
def       snake_case_		(     lowerCAmelCase_       :						List[str]       ,       lowerCAmelCase_       :						Optional[int]       ,       lowerCAmelCase_       :						List[str]       ,       lowerCAmelCase_       :						List[str]      ):
							__lowercase      :							List[str]				=     {
							    """en""": """Machine learning is great, isn't it?""",
							    """ru""": """Машинное обучение - это здорово, не так ли?""",
							    """de""": """Maschinelles Lernen ist großartig, nicht wahr?""",
							}

							# BLUE scores as follows:
							# "pair": [fairseq, transformers]
							__lowercase      :							int				=     {
							    """wmt16-en-de-dist-12-1""": [28.3, 27.52],
							    """wmt16-en-de-dist-6-1""": [27.4, 27.11],
							    """wmt16-en-de-12-1""": [26.9, 25.75],
							}
							__lowercase      :							Optional[Any]				=     F"{src_lang}-{tgt_lang}"

							__lowercase      :							int				=     F"\n---\nlanguage:\n- {src_lang}\n- {tgt_lang}\nthumbnail:\ntags:\n- translation\n- wmt16\n- allenai\nlicense: apache-2.0\ndatasets:\n- wmt16\nmetrics:\n- bleu\n---\n\n# FSMT\n\n## Model description\n\nThis is a ported version of fairseq-based [wmt16 transformer](https://github.com/jungokasai/deep-shallow/) for {src_lang}-{tgt_lang}.\n\nFor more details, please, see [Deep Encoder, Shallow Decoder: Reevaluating the Speed-Quality Tradeoff in Machine Translation](https://arxiv.org/abs/2006.10369).\n\nAll 3 models are available:\n\n* [wmt16-en-de-dist-12-1](https://huggingface.co/allenai/wmt16-en-de-dist-12-1)\n* [wmt16-en-de-dist-6-1](https://huggingface.co/allenai/wmt16-en-de-dist-6-1)\n* [wmt16-en-de-12-1](https://huggingface.co/allenai/wmt16-en-de-12-1)\n\n\n## Intended uses & limitations\n\n#### How to use\n\n```python\nfrom transformers import FSMTForConditionalGeneration, FSMTTokenizer\nmname = \"allenai/{model_name}\"\ntokenizer = FSMTTokenizer.from_pretrained(mname)\nmodel = FSMTForConditionalGeneration.from_pretrained(mname)\n\ninput = \"{texts[src_lang]}\"\ninput_ids = tokenizer.encode(input, return_tensors=\"pt\")\noutputs = model.generate(input_ids)\ndecoded = tokenizer.decode(outputs[0], skip_special_tokens=True)\nprint(decoded) # {texts[tgt_lang]}\n\n```\n\n#### Limitations and bias\n\n\n## Training data\n\nPretrained weights were left identical to the original model released by allenai. For more details, please, see the [paper](https://arxiv.org/abs/2006.10369).\n\n## Eval results\n\nHere are the BLEU scores:\n\nmodel   | fairseq | transformers\n-------|---------|----------\n{model_name}  | {scores[model_name][0]} | {scores[model_name][1]}\n\nThe score is slightly below the score reported in the paper, as the researchers don't use `sacrebleu` and measure the score on tokenized outputs. `transformers` score was measured using `sacrebleu` on detokenized outputs.\n\nThe score was calculated using this code:\n\n```bash\ngit clone https://github.com/huggingface/transformers\ncd transformers\nexport PAIR={pair}\nexport DATA_DIR=data/$PAIR\nexport SAVE_DIR=data/$PAIR\nexport BS=8\nexport NUM_BEAMS=5\nmkdir -p $DATA_DIR\nsacrebleu -t wmt16 -l $PAIR --echo src > $DATA_DIR/val.source\nsacrebleu -t wmt16 -l $PAIR --echo ref > $DATA_DIR/val.target\necho $PAIR\nPYTHONPATH=\"src:examples/seq2seq\" python examples/seq2seq/run_eval.py allenai/{model_name} $DATA_DIR/val.source $SAVE_DIR/test_translations.txt --reference_path $DATA_DIR/val.target --score_path $SAVE_DIR/test_bleu.json --bs $BS --task translation --num_beams $NUM_BEAMS\n```\n\n## Data Sources\n\n- [training, etc.](http://www.statmt.org/wmt16/)\n- [test set](http://matrix.statmt.org/test_sets/newstest2016.tgz?1504722372)\n\n\n### BibTeX entry and citation info\n\n```\n@misc{{kasai2020deep,\n    title={{Deep Encoder, Shallow Decoder: Reevaluating the Speed-Quality Tradeoff in Machine Translation}},\n    author={{Jungo Kasai and Nikolaos Pappas and Hao Peng and James Cross and Noah A. Smith}},\n    year={{2020}},\n    eprint={{2006.10369}},\n    archivePrefix={{arXiv}},\n    primaryClass={{cs.CL}}\n}}\n```\n\n"
							model_card_dir.mkdir(parents=lowerCAmelCase_       ,       exist_ok=lowerCAmelCase_      )
							__lowercase      :							List[Any]				=     os.path.join(lowerCAmelCase_       ,       """README.md"""      )
							print(F"Generating {path}"      )
							with open(lowerCAmelCase_       ,       """w"""       ,       encoding="""utf-8"""      ) as f:
														f.write(lowerCAmelCase_      )


# make sure we are under the root of the project
lowerCamelCase : int						   =       Path(__file__).resolve().parent.parent.parent
lowerCamelCase : Dict						   =       repo_dir / '''model_cards'''

for model_name in ["wmt16-en-de-dist-12-1", "wmt16-en-de-dist-6-1", "wmt16-en-de-12-1"]:
	lowerCamelCase : List[Any]						   =       model_cards_dir / '''allenai''' / model_name
	write_model_card(model_card_dir, src_lang='''en''', tgt_lang='''de''', model_name=model_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
import os

from accelerate.utils import ComputeEnvironment

from .cluster import get_cluster_input
from .config_args import cache_dir, default_config_file, default_yaml_config_file, load_config_from_file  # noqa: F401
from .config_utils import _ask_field, _ask_options, _convert_compute_environment  # noqa: F401
from .sagemaker import get_sagemaker_input


lowerCamelCase : int						   =       '''Launches a series of prompts to create and save a `default_config.yaml` configuration file for your training system. Should always be ran first on your machine'''
def       snake_case_		(     ):
							__lowercase      :							List[Any]				=     _ask_options(
							    """In which compute environment are you running?"""       ,       ["""This machine""", """AWS (Amazon SageMaker)"""]       ,       _convert_compute_environment       ,       )
							if compute_environment == ComputeEnvironment.AMAZON_SAGEMAKER:
														__lowercase      :							Union[str, Any]				=     get_sagemaker_input()
							else:
														__lowercase      :							str				=     get_cluster_input()
							return config
def       snake_case_		(     lowerCAmelCase_       :						List[str]=None      ):
							if subparsers is not None:
														__lowercase      :							Optional[int]				=     subparsers.add_parser("""config"""       ,       description=lowerCAmelCase_      )
							else:
														__lowercase      :							List[str]				=     argparse.ArgumentParser("""Accelerate config command"""       ,       description=lowerCAmelCase_      )

							parser.add_argument(
							    """--config_file"""       ,       default=lowerCAmelCase_       ,       help=(
							        """The path to use to store the config file. Will default to a file named default_config.yaml in the cache """
							        """location, which is the content of the environment `HF_HOME` suffixed with 'accelerate', or if you don't have """
							        """such an environment variable, your cache directory ('~/.cache' or the content of `XDG_CACHE_HOME`) suffixed """
							        """with 'huggingface'."""
							    )       ,       )

							if subparsers is not None:
														parser.set_defaults(func=lowerCAmelCase_      )
							return parser
def       snake_case_		(     lowerCAmelCase_       :						Tuple      ):
							__lowercase      :							Union[str, Any]				=     get_user_input()
							if args.config_file is not None:
														__lowercase      :							List[Any]				=     args.config_file
							else:
														if not os.path.isdir(lowerCAmelCase_      ):
																					os.makedirs(lowerCAmelCase_      )
														__lowercase      :							Any				=     default_yaml_config_file

							if config_file.endswith(""".json"""      ):
														config.to_json_file(lowerCAmelCase_      )
							else:
														config.to_yaml_file(lowerCAmelCase_      )
							print(F"accelerate configuration saved at {config_file}"      )
def       snake_case_		(     ):
							__lowercase      :							str				=     config_command_parser()
							__lowercase      :							str				=     parser.parse_args()
							config_command(lowerCAmelCase_      )


if __name__ == "__main__":
	main()