

"""simple docstring"""




from typing import List, Optional

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


__UpperCAmelCase =				logging.get_logger(__name__)

__UpperCAmelCase =				{
    'huggingface/autoformer-tourism-monthly': 'https://huggingface.co/huggingface/autoformer-tourism-monthly/resolve/main/config.json',
}







class      __lowercase			(    __lowerCamelCase					):
  snake_case_				       =       """autoformer"""
  snake_case_				       =       {
      """hidden_size""": """d_model""",
      """num_attention_heads""": """encoder_attention_heads""",
      """num_hidden_layers""": """encoder_layers""",
  }

  def __init__(  self		:			Optional[int]					,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		:			bool = True					,A		:			int = 0					,A		:			int = 0					,A		:			int = 0					,A		:			int = 0					,A		:			Optional[List[int]] = None					,A		:			Optional[List[int]] = None					,A		:			int = 64					,A		:			int = 2					,A		:			int = 2					,A		:			int = 2					,A		:			int = 2					,A		:			int = 32					,A		:			int = 32					,A		:			str = "gelu"					,A		:			float = 0.1					,A		:			float = 0.1					,A		:			float = 0.1					,A		:			float = 0.1					,A		:			float = 0.1					,A		:			int = 100					,A		:			float = 0.0_2					,A		:			bool = True					,A		:			List[Any]=True					,A		:			int = 10					,A		:			int = 25					,A		:			int = 3					,**A		:			List[str]					,):






   '''simple docstring'''
   UpperCAmelCase__					:  List[str]					   =					prediction_length
   UpperCAmelCase__					:  int					   =					context_length if context_length is not None else prediction_length
   UpperCAmelCase__					:  List[Any]					   =					distribution_output
   UpperCAmelCase__					:  Optional[int]					   =					loss
   UpperCAmelCase__					:  Optional[int]					   =					input_size
   UpperCAmelCase__					:  Dict					   =					num_time_features
   UpperCAmelCase__					:  Union[str, Any]					   =					lags_sequence
   UpperCAmelCase__					:  Dict					   =					scaling
   UpperCAmelCase__					:  Tuple					   =					num_dynamic_real_features
   UpperCAmelCase__					:  List[str]					   =					num_static_real_features
   UpperCAmelCase__					:  Union[str, Any]					   =					num_static_categorical_features
   if cardinality is not None 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__					:  List[str]					   =					cardinality
   else:
    UpperCAmelCase__					:  Dict					   =					[0]
   if embedding_dimension is not None 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__					:  Optional[int]					   =					embedding_dimension
   else:
    UpperCAmelCase__					:  Tuple					   =					[min(50					,(cat + 1) // 2    ) for cat in self.cardinality]
   UpperCAmelCase__					:  Optional[int]					   =					num_parallel_samples

   # Transformer architecture configuration
   UpperCAmelCase__					:  str					   =					input_size * len(self.lags_sequence    ) + self._number_of_features
   UpperCAmelCase__					:  Optional[int]					   =					d_model
   UpperCAmelCase__					:  Optional[Any]					   =					encoder_attention_heads
   UpperCAmelCase__					:  Union[str, Any]					   =					decoder_attention_heads
   UpperCAmelCase__					:  List[Any]					   =					encoder_ffn_dim
   UpperCAmelCase__					:  Optional[int]					   =					decoder_ffn_dim
   UpperCAmelCase__					:  Tuple					   =					encoder_layers
   UpperCAmelCase__					:  List[Any]					   =					decoder_layers

   UpperCAmelCase__					:  Union[str, Any]					   =					dropout
   UpperCAmelCase__					:  List[str]					   =					attention_dropout
   UpperCAmelCase__					:  Dict					   =					activation_dropout
   UpperCAmelCase__					:  str					   =					encoder_layerdrop
   UpperCAmelCase__					:  Union[str, Any]					   =					decoder_layerdrop

   UpperCAmelCase__					:  Union[str, Any]					   =					activation_function
   UpperCAmelCase__					:  Tuple					   =					init_std

   UpperCAmelCase__					:  Union[str, Any]					   =					use_cache

   # Autoformer
   UpperCAmelCase__					:  int					   =					label_length
   UpperCAmelCase__					:  Optional[Any]					   =					moving_average
   UpperCAmelCase__					:  Optional[int]					   =					autocorrelation_factor

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




  @property
  def    __lowercase       (  self		:			Tuple    ):






   '''simple docstring'''
   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
   )








"""simple docstring"""




from typing import List

import jiwer
import jiwer.transforms as tr
from packaging import version

import datasets
from datasets.config import PY_VERSION


if PY_VERSION < version.parse('3.8'):
      import importlib_metadata
else:
      import importlib.metadata as importlib_metadata


__UpperCAmelCase =				''


if version.parse(importlib_metadata.version('jiwer')) < version.parse('2.3.0'):







      class      __lowercase			(    tr.AbstractTransform					):

        def __init__(  self		:			List[str]					,A		:			str = " "    ):






         '''simple docstring'''
         UpperCAmelCase__					:  str					   =					sentence_delimiter

        def    __lowercase       (  self		:			Union[str, Any]					,A		:			str    ):






         '''simple docstring'''
         return list(A    )




        def    __lowercase       (  self		:			int					,A		:			List[str]    ):






         '''simple docstring'''
         UpperCAmelCase__					:  Any					   =					[]
         for sent_idx, sentence in enumerate(A    ):
          chars.extend(self.process_string(A    )    )
          if self.sentence_delimiter is not None and self.sentence_delimiter != "" and sent_idx < len(A    ) - 1:
           chars.append(self.sentence_delimiter    )
         return chars







      __UpperCAmelCase =				tr.Compose(
          [tr.RemoveMultipleSpaces(), tr.Strip(), SentencesToListOfCharacters(SENTENCE_DELIMITER)]
      )
else:
      __UpperCAmelCase =				tr.Compose(
          [
              tr.RemoveMultipleSpaces(),
              tr.Strip(),
              tr.ReduceToSingleSentence(SENTENCE_DELIMITER),
              tr.ReduceToListOfListOfChars(),
          ]
      )


__UpperCAmelCase =				'\\n@inproceedings{inproceedings,\n    author = {Morris, Andrew and Maier, Viktoria and Green, Phil},\n    year = {2004},\n    month = {01},\n    pages = {},\n    title = {From WER and RIL to MER and WIL: improved evaluation measures for connected speech recognition.}\n}\n'

__UpperCAmelCase =				'\\nCharacter error rate (CER) is a common metric of the performance of an automatic speech recognition system.\n\nCER is similar to Word Error Rate (WER), but operates on character instead of word. Please refer to docs of WER for further information.\n\nCharacter error rate can be computed as:\n\nCER = (S + D + I) / N = (S + D + I) / (S + D + C)\n\nwhere\n\nS is the number of substitutions,\nD is the number of deletions,\nI is the number of insertions,\nC is the number of correct characters,\nN is the number of characters in the reference (N=S+D+C).\n\nCER\'s output is not always a number between 0 and 1, in particular when there is a high number of insertions. This value is often associated to the percentage of characters that were incorrectly predicted. The lower the value, the better the\nperformance of the ASR system with a CER of 0 being a perfect score.\n'

__UpperCAmelCase =				'\nComputes CER score of transcribed segments against references.\nArgs:\n    references: list of references for each speech input.\n    predictions: list of transcribtions to score.\n    concatenate_texts: Whether or not to concatenate sentences before evaluation, set to True for more accurate result.\nReturns:\n    (float): the character error rate\n\nExamples:\n\n    >>> predictions = ["this is the prediction", "there is an other sample"]\n    >>> references = ["this is the reference", "there is another one"]\n    >>> cer = datasets.load_metric("cer")\n    >>> cer_score = cer.compute(predictions=predictions, references=references)\n    >>> print(cer_score)\n    0.34146341463414637\n'







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

  def    __lowercase       (  self		:			int    ):






   '''simple docstring'''
   return datasets.MetricInfo(
       description=_DESCRIPTION					,citation=_CITATION					,inputs_description=_KWARGS_DESCRIPTION					,features=datasets.Features(
           {
               """predictions""": datasets.Value("""string"""					,id="""sequence"""    ),
               """references""": datasets.Value("""string"""					,id="""sequence"""    ),
           }    )					,codebase_urls=["""https://github.com/jitsi/jiwer/"""]					,reference_urls=[
           """https://en.wikipedia.org/wiki/Word_error_rate""",
           """https://sites.google.com/site/textdigitisation/qualitymeasures/computingerrorrates""",
       ]					,)




  def    __lowercase       (  self		:			Union[str, Any]					,A		:			Optional[Any]					,A		:			Tuple					,A		:			str=False    ):






   '''simple docstring'''
   if concatenate_texts:
    return jiwer.compute_measures(
        A					,A					,truth_transform=A					,hypothesis_transform=A					,)["wer"]

   UpperCAmelCase__					:  Tuple					   =					0
   UpperCAmelCase__					:  Any					   =					0
   for prediction, reference in zip(A					,A    ):
    UpperCAmelCase__					:  List[str]					   =					jiwer.compute_measures(
        A					,A					,truth_transform=A					,hypothesis_transform=A					,)
    incorrect += measures["substitutions"] + measures["deletions"] + measures["insertions"]
    total += measures["substitutions"] + measures["deletions"] + measures["hits"]

   return incorrect / total





