




"""simple docstring"""

import os
from pathlib import Path






def 		_snake_case	(   _snake_case				:   Union[str, Any]							,    _snake_case				:   Dict							,    _snake_case				:   List[Any]							,    _snake_case				:   Dict				)       ->   Union[str, Any]:






      '''simple docstring'''


      _A     =  {
          'en': 'Machine learning is great, isn\'t it?',
          'ru': 'Машинное обучение - это здорово, не так ли?',
          'de': 'Maschinelles Lernen ist großartig, nicht wahr?',
      }

      # BLUE scores as follows:
      # "pair": [fairseq, transformers]
      _A     =  {
          '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],
      }
      _A     =  F'''{src_lang}-{tgt_lang}'''

      _A     =  F'''
---
language:
- {src_lang}
- {tgt_lang}
thumbnail:
tags:
- translation
- wmt16
- allenai
license: apache-2.0
datasets:
- wmt16
metrics:
- bleu
---

# FSMT

## Model description

This is a ported version of fairseq-based [wmt16 transformer](https://github.com/jungokasai/deep-shallow/) for {src_lang}-{tgt_lang}.

For more details, please, see [Deep Encoder, Shallow Decoder: Reevaluating the Speed-Quality Tradeoff in Machine Translation](https://arxiv.org/abs/2006.10369).

All 3 models are available:

* [wmt16-en-de-dist-12-1](https://huggingface.co/allenai/wmt16-en-de-dist-12-1)
* [wmt16-en-de-dist-6-1](https://huggingface.co/allenai/wmt16-en-de-dist-6-1)
* [wmt16-en-de-12-1](https://huggingface.co/allenai/wmt16-en-de-12-1)


## Intended uses & limitations

#### How to use

```python
from transformers import FSMTForConditionalGeneration, FSMTTokenizer
mname = \"allenai/{model_name}\"
tokenizer = FSMTTokenizer.from_pretrained(mname)
model = FSMTForConditionalGeneration.from_pretrained(mname)

input = \"{texts[src_lang]}\"
input_ids = tokenizer.encode(input, return_tensors=\"pt\")
outputs = model.generate(input_ids)
decoded = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(decoded) # {texts[tgt_lang]}

```

#### Limitations and bias


## Training data

Pretrained weights were left identical to the original model released by allenai. For more details, please, see the [paper](https://arxiv.org/abs/2006.10369).

## Eval results

Here are the BLEU scores:

model   | fairseq | transformers
-------|---------|----------
{model_name}  | {scores[model_name][0]} | {scores[model_name][1]}

The 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.

The score was calculated using this code:

```bash
git clone https://github.com/huggingface/transformers
cd transformers
export PAIR={pair}
export DATA_DIR=data/$PAIR
export SAVE_DIR=data/$PAIR
export BS=8
export NUM_BEAMS=5
mkdir -p $DATA_DIR
sacrebleu -t wmt16 -l $PAIR --echo src > $DATA_DIR/val.source
sacrebleu -t wmt16 -l $PAIR --echo ref > $DATA_DIR/val.target
echo $PAIR
PYTHONPATH=\"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
```

## Data Sources

- [training, etc.](http://www.statmt.org/wmt16/)
- [test set](http://matrix.statmt.org/test_sets/newstest2016.tgz?1504722372)


### BibTeX entry and citation info

```
@misc{{kasai2020deep,
    title={{Deep Encoder, Shallow Decoder: Reevaluating the Speed-Quality Tradeoff in Machine Translation}},
    author={{Jungo Kasai and Nikolaos Pappas and Hao Peng and James Cross and Noah A. Smith}},
    year={{2020}},
    eprint={{2006.10369}},
    archivePrefix={{arXiv}},
    primaryClass={{cs.CL}}
}}
```

'''
      model_card_dir.mkdir(parents=UpperCamelCase__							,    exist_ok=UpperCamelCase__				)
      _A     =  os.path.join(UpperCamelCase__							,    'README.md'				)
      print(F'''Generating {path}'''				)
      with open(UpperCamelCase__							,    'w'							,    encoding='utf-8'				) as f:
            f.write(UpperCamelCase__				)


# make sure we are under the root of the project
a							      =     Path(__file__).resolve().parent.parent.parent
a							      =     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"]:
       a							      =     model_cards_dir / "allenai" / model_name
       write_model_card(model_card_dir, src_lang='''en''', tgt_lang='''de''', model_name=model_name)


'''simple docstring'''


from typing import List, Optional, Union

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


__lowerCAmelCase						:							Union[str, Any]    							=						logging.get_logger(__name__)

__lowerCAmelCase						:							Optional[int]    							=						{
    "huggingface/time-series-transformer-tourism-monthly": (
        "https://huggingface.co/huggingface/time-series-transformer-tourism-monthly/resolve/main/config.json"
    ),
    # See all TimeSeriesTransformer models at https://huggingface.co/models?filter=time_series_transformer
}






class     A ( UpperCAmelCase ):
							a_										=   '''time_series_transformer'''
							a_										=   {
							    '''hidden_size''': '''d_model''',
							    '''num_attention_heads''': '''encoder_attention_heads''',
							    '''num_hidden_layers''': '''encoder_layers''',
							}





							def __init__(   self					:				str  ,		__a					:				Optional[int] = None  ,		__a					:				Optional[int] = None  ,		__a					:				str = "student_t"  ,		__a					:				str = "nll"  ,		__a					:				int = 1  ,		__a					:				List[int] = [1, 2, 3, 4, 5, 6, 7]  ,		__a					:				Optional[Union[str, bool]] = "mean"  ,		__a					:				int = 0  ,		__a					:				int = 0  ,		__a					:				int = 0  ,		__a					:				int = 0  ,		__a					:				Optional[List[int]] = None  ,		__a					:				Optional[List[int]] = None  ,		__a					:				int = 3_2  ,		__a					:				int = 3_2  ,		__a					:				int = 2  ,		__a					:				int = 2  ,		__a					:				int = 2  ,		__a					:				int = 2  ,		__a					:				bool = True  ,		__a					:				str = "gelu"  ,		__a					:				int = 6_4  ,		__a					:				float = 0.1  ,		__a					:				float = 0.1  ,		__a					:				float = 0.1  ,		__a					:				float = 0.1  ,		__a					:				float = 0.1  ,		__a					:				int = 1_0_0  ,		__a					:				float = 0.0_2  ,		__a					:				Optional[int]=True  ,		**__a					:				str  ,		)				->						int:
								# time series specific configuration
								__UpperCAmelCase      					=      prediction_length
								__UpperCAmelCase      					=      context_length or prediction_length
								__UpperCAmelCase      					=      distribution_output
								__UpperCAmelCase      					=      loss
								__UpperCAmelCase      					=      input_size
								__UpperCAmelCase      					=      num_time_features
								__UpperCAmelCase      					=      lags_sequence
								__UpperCAmelCase      					=      scaling
								__UpperCAmelCase      					=      num_dynamic_real_features
								__UpperCAmelCase      					=      num_static_real_features
								__UpperCAmelCase      					=      num_static_categorical_features
								if cardinality and num_static_categorical_features > 0:
									if len(__a						) != num_static_categorical_features:
										raise ValueError(
										    '''The cardinality should be a list of the same length as `num_static_categorical_features`'''						)
									__UpperCAmelCase      					=      cardinality
								else:
									__UpperCAmelCase      					=      [0]
								if embedding_dimension and num_static_categorical_features > 0:
									if len(__a						) != num_static_categorical_features:
										raise ValueError(
										    '''The embedding dimension should be a list of the same length as `num_static_categorical_features`'''						)
									__UpperCAmelCase      					=      embedding_dimension
								else:
									__UpperCAmelCase      					=      [min(5_0  ,		(cat + 1) // 2						) for cat in self.cardinality]
								__UpperCAmelCase      					=      num_parallel_samples

								# Transformer architecture configuration
								__UpperCAmelCase      					=      input_size * len(__a						) + self._number_of_features
								__UpperCAmelCase      					=      d_model
								__UpperCAmelCase      					=      encoder_attention_heads
								__UpperCAmelCase      					=      decoder_attention_heads
								__UpperCAmelCase      					=      encoder_ffn_dim
								__UpperCAmelCase      					=      decoder_ffn_dim
								__UpperCAmelCase      					=      encoder_layers
								__UpperCAmelCase      					=      decoder_layers

								__UpperCAmelCase      					=      dropout
								__UpperCAmelCase      					=      attention_dropout
								__UpperCAmelCase      					=      activation_dropout
								__UpperCAmelCase      					=      encoder_layerdrop
								__UpperCAmelCase      					=      decoder_layerdrop

								__UpperCAmelCase      					=      activation_function
								__UpperCAmelCase      					=      init_std

								__UpperCAmelCase      					=      use_cache

								super().__init__(is_encoder_decoder=__a  ,		**__a						)






							@property
							def    snake_case__    (   self					:				List[Any]						)				->						int:
								return (
								    sum(self.embedding_dimension						)
								    + self.num_dynamic_real_features
								    + self.num_time_features
								    + self.num_static_real_features
								    + self.input_size * 2  # the log1p(abs(loc)) and log(scale) features
								)
