code: 
  
  
  
  """simple docstring"""
  
  
  
  
  import sacrebleu as scb
  from packaging import version
  
  import datasets
  
  
  _lowerCAmelCase       :      Dict							=							"""\
  @inproceedings{post-2018-call,
      title = \"A Call for Clarity in Reporting {BLEU} Scores\",
      author = \"Post, Matt\",
      booktitle = \"Proceedings of the Third Conference on Machine Translation: Research Papers\",
      month = oct,
      year = \"2018\",
      address = \"Belgium, Brussels\",
      publisher = \"Association for Computational Linguistics\",
      url = \"https://www.aclweb.org/anthology/W18-6319\",
      pages = \"186--191\",
  }
  """
  
  _lowerCAmelCase       :      List[Any]							=							"""\
  SacreBLEU provides hassle-free computation of shareable, comparable, and reproducible BLEU scores.
  Inspired by Rico Sennrich's `multi-bleu-detok.perl`, it produces the official WMT scores but works with plain text.
  It also knows all the standard test sets and handles downloading, processing, and tokenization for you.
  
  See the [README.md] file at https://github.com/mjpost/sacreBLEU for more information.
  """
  
  _lowerCAmelCase       :      Tuple							=							"""
  Produces BLEU scores along with its sufficient statistics
  from a source against one or more references.
  
  Args:
      predictions (`list` of `str`): list of translations to score. Each translation should be tokenized into a list of tokens.
      references (`list` of `list` of `str`): A list of lists of references. The contents of the first sub-list are the references for the first prediction, the contents of the second sub-list are for the second prediction, etc. Note that there must be the same number of references for each prediction (i.e. all sub-lists must be of the same length).
      smooth_method (`str`): The smoothing method to use, defaults to `'exp'`. Possible values are:
          - `'none'`: no smoothing
          - `'floor'`: increment zero counts
          - `'add-k'`: increment num/denom by k for n>1
          - `'exp'`: exponential decay
      smooth_value (`float`): The smoothing value. Only valid when `smooth_method='floor'` (in which case `smooth_value` defaults to `0.1`) or `smooth_method='add-k'` (in which case `smooth_value` defaults to `1`).
      tokenize (`str`): Tokenization method to use for BLEU. If not provided, defaults to `'zh'` for Chinese, `'ja-mecab'` for Japanese and `'13a'` (mteval) otherwise. Possible values are:
          - `'none'`: No tokenization.
          - `'zh'`: Chinese tokenization.
          - `'13a'`: mimics the `mteval-v13a` script from Moses.
          - `'intl'`: International tokenization, mimics the `mteval-v14` script from Moses
          - `'char'`: Language-agnostic character-level tokenization.
          - `'ja-mecab'`: Japanese tokenization. Uses the [MeCab tokenizer](https://pypi.org/project/mecab-python3).
      lowercase (`bool`): If `True`, lowercases the input, enabling case-insensitivity. Defaults to `False`.
      force (`bool`): If `True`, insists that your tokenized input is actually detokenized. Defaults to `False`.
      use_effective_order (`bool`): If `True`, stops including n-gram orders for which precision is 0. This should be `True`, if sentence-level BLEU will be computed. Defaults to `False`.
  
  Returns:
      'score': BLEU score,
      'counts': Counts,
      'totals': Totals,
      'precisions': Precisions,
      'bp': Brevity penalty,
      'sys_len': predictions length,
      'ref_len': reference length,
  
  Examples:
  
      Example 1:
          >>> predictions = [\"hello there general kenobi\", \"foo bar foobar\"]
          >>> references = [[\"hello there general kenobi\", \"hello there !\"], [\"foo bar foobar\", \"foo bar foobar\"]]
          >>> sacrebleu = datasets.load_metric(\"sacrebleu\")
          >>> results = sacrebleu.compute(predictions=predictions, references=references)
          >>> print(list(results.keys()))
          ['score', 'counts', 'totals', 'precisions', 'bp', 'sys_len', 'ref_len']
          >>> print(round(results[\"score\"], 1))
          100.0
  
      Example 2:
          >>> predictions = [\"hello there general kenobi\",
          ...                 \"on our way to ankh morpork\"]
          >>> references = [[\"hello there general kenobi\", \"hello there !\"],
          ...                 [\"goodbye ankh morpork\", \"ankh morpork\"]]
          >>> sacrebleu = datasets.load_metric(\"sacrebleu\")
          >>> results = sacrebleu.compute(predictions=predictions,
          ...                             references=references)
          >>> print(list(results.keys()))
          ['score', 'counts', 'totals', 'precisions', 'bp', 'sys_len', 'ref_len']
          >>> print(round(results[\"score\"], 1))
          39.8
  """
  
  
  
  
  
  
  @datasets.utils.file_utils.add_start_docstrings(_DESCRIPTION ,    _KWARGS_DESCRIPTION		)
  class 			UpperCAmelCase_						(       datasets.Metric		):
  
  
  
        def 		snake_case_      (  self  :			str		):
             if version.parse(scb.__version__		) < version.parse("1.4.12"		):
                  raise ImportWarning(
                      "To use `sacrebleu`, the module `sacrebleu>=1.4.12` is required, and the current version of `sacrebleu` doesn't match this condition.\n"
                      "You can install it with `pip install \"sacrebleu>=1.4.12\"`."		)
             return datasets.MetricInfo(
                 description=_DESCRIPTION  ,			citation=_CITATION  ,			homepage="https://github.com/mjpost/sacreBLEU"  ,			inputs_description=_KWARGS_DESCRIPTION  ,			features=datasets.Features(
                     {
                         "predictions": datasets.Value("string"  ,			id="sequence"		),
                         "references": datasets.Sequence(datasets.Value("string"  ,			id="sequence"		)  ,			id="references"		),
                     }		)  ,			codebase_urls=["https://github.com/mjpost/sacreBLEU"]  ,			reference_urls=[
                     "https://github.com/mjpost/sacreBLEU",
                     "https://en.wikipedia.org/wiki/BLEU",
                     "https://towardsdatascience.com/evaluating-text-output-in-nlp-bleu-at-your-own-risk-e8609665a213",
                 ]  ,			)
  
  
  
        def 		snake_case_      (  self  :			List[Any]  ,			A  :			Optional[int]  ,			A  :			Dict  ,			A  :			Tuple="exp"  ,			A  :			str=None  ,			A  :			List[str]=False  ,			A  :			List[str]=False  ,			A  :			Optional[int]=None  ,			A  :			Union[str, Any]=False  ,			):
             _UpperCAmelCase    :			List[str]              =					len(references[0]		)
             if any(len(lowerCamelCase__		) != references_per_prediction for refs in references		):
                  raise ValueError("Sacrebleu requires the same number of references for each prediction"		)
             _UpperCAmelCase    :			Tuple              =					[[refs[i] for refs in references] for i in range(lowerCamelCase__		)]
             _UpperCAmelCase    :			int              =					scb.corpus_bleu(
                 lowerCamelCase__  ,			lowerCamelCase__  ,			smooth_method=lowerCamelCase__  ,			smooth_value=lowerCamelCase__  ,			force=lowerCamelCase__  ,			lowercase=lowerCamelCase__  ,			use_effective_order=lowerCamelCase__  ,			**({"tokenize": tokenize} if tokenize else {})  ,			)
             _UpperCAmelCase    :			Optional[Any]              =					{
                 "score": output.score,
                 "counts": output.counts,
                 "totals": output.totals,
                 "precisions": output.precisions,
                 "bp": output.bp,
                 "sys_len": output.sys_len,
                 "ref_len": output.ref_len,
             }
             return output_dict
  
style_context: 
  
  
  
  """simple docstring"""
  
  
  
  
  def 		__snake_case		(   SCREAMING_SNAKE_CASE__			:		list       )						->     bool:
  
  
  
  
  
       '''simple docstring'''
  
       if not isinstance(SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__       ):
            raise ValueError("Input series is not valid, valid series - [1, 2/3, 2]"       )
       if len(SCREAMING_SNAKE_CASE__       ) == 0:
            raise ValueError("Input list must be a non empty list"       )
       if len(SCREAMING_SNAKE_CASE__       ) == 1 and series[0] != 0:
            return True
       _UpperCAmelCase    :			Tuple              =					[]
       _UpperCAmelCase    :			Any              =					len(SCREAMING_SNAKE_CASE__       )
       for i in range(0		,						SCREAMING_SNAKE_CASE__       ):
            if series[i] == 0:
                 raise ValueError("Input series cannot have 0 as an element"       )
            rec_series.append(1 / series[i]       )
       _UpperCAmelCase    :			Dict              =					rec_series[1] - rec_series[0]
       for index in range(2		,						SCREAMING_SNAKE_CASE__       ):
            if rec_series[index] - rec_series[index - 1] != common_diff:
                 return False
       return True
  
  def 		__snake_case		(   SCREAMING_SNAKE_CASE__			:		list       )						->     float:
  
  
  
  
  
       '''simple docstring'''
  
       if not isinstance(SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__       ):
            raise ValueError("Input series is not valid, valid series - [2, 4, 6]"       )
       if len(SCREAMING_SNAKE_CASE__       ) == 0:
            raise ValueError("Input list must be a non empty list"       )
       _UpperCAmelCase    :			Any              =					0
       for val in series:
            answer += 1 / val
       return len(SCREAMING_SNAKE_CASE__       ) / answer
  
  
  if __name__ == "__main__":
   import doctest
  
   doctest.testmod()
  