



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


UpperCAmelCase__   =       logging.get_logger(__name__)

UpperCAmelCase__   =       {
    "speechbrain/m-ctc-t-large": "https://huggingface.co/speechbrain/m-ctc-t-large/resolve/main/config.json",
    # See all M-CTC-T models at https://huggingface.co/models?filter=mctct
}







class 			__lowerCAmelCase    (			SCREAMING_SNAKE_CASE_						):
			UpperCamelCase   					=     '''mctct'''



			def __init__(						self   :  Any ,		A   :  Tuple=80_65 ,		A   :  List[str]=15_36 ,		A   :  str=36 ,		A   :  Union[str, Any]=61_44 ,		A   :  Dict=4 ,		A   :  List[str]=3_84 ,		A   :  Tuple=9_20 ,		A   :  Any=1E-5 ,		A   :  Optional[Any]=0.3 ,		A   :  Tuple="relu" ,		A   :  str=0.0_2 ,		A   :  Union[str, Any]=0.3 ,		A   :  Tuple=0.3 ,		A   :  Tuple=1 ,		A   :  str=0 ,		A   :  Union[str, Any]=2 ,		A   :  str=1 ,		A   :  str=0.3 ,		A   :  Union[str, Any]=1 ,		A   :  Any=(7,) ,		A   :  Dict=(3,) ,		A   :  List[Any]=80 ,		A   :  Optional[int]=1 ,		A   :  Optional[int]=None ,		A   :  Optional[Any]="sum" ,		A   :  Optional[Any]=False ,		**A   :  Tuple ,		)   ->    Tuple:



						"""simple docstring"""






						super().__init__(**__UpperCAmelCase ,		pad_token_id=__UpperCAmelCase ,		bos_token_id=__UpperCAmelCase ,		eos_token_id=__UpperCAmelCase)
						_UpperCAmelCase		       =   vocab_size
						_UpperCAmelCase		       =   hidden_size
						_UpperCAmelCase		       =   num_hidden_layers
						_UpperCAmelCase		       =   intermediate_size
						_UpperCAmelCase		       =   num_attention_heads
						_UpperCAmelCase		       =   attention_head_dim
						_UpperCAmelCase		       =   max_position_embeddings
						_UpperCAmelCase		       =   layer_norm_eps
						_UpperCAmelCase		       =   layerdrop
						_UpperCAmelCase		       =   hidden_act
						_UpperCAmelCase		       =   initializer_range
						_UpperCAmelCase		       =   hidden_dropout_prob
						_UpperCAmelCase		       =   attention_probs_dropout_prob
						_UpperCAmelCase		       =   pad_token_id
						_UpperCAmelCase		       =   bos_token_id
						_UpperCAmelCase		       =   eos_token_id
						_UpperCAmelCase		       =   conv_glu_dim
						_UpperCAmelCase		       =   conv_dropout
						_UpperCAmelCase		       =   num_conv_layers
						_UpperCAmelCase		       =   input_feat_per_channel
						_UpperCAmelCase		       =   input_channels
						_UpperCAmelCase		       =   conv_channels
						_UpperCAmelCase		       =   ctc_loss_reduction
						_UpperCAmelCase		       =   ctc_zero_infinity

						# prevents config testing fail with exporting to json
						_UpperCAmelCase		       =   list(__UpperCAmelCase)
						_UpperCAmelCase		       =   list(__UpperCAmelCase)

						if len(self.conv_kernel) != self.num_conv_layers:
									raise ValueError(
									    'Configuration for convolutional module is incorrect. '
									    'It is required that `len(config.conv_kernel)` == `config.num_conv_layers` '
									    F"but is `len(config.conv_kernel) = {len(self.conv_kernel)}`, "
									    F"`config.num_conv_layers = {self.num_conv_layers}`.")





'''simple docstring'''





import os

from bleurt import score  # From: git+https://github.com/google-research/bleurt.git

import datasets


_lowerCAmelCase      						=	datasets.logging.get_logger(__name__)


_lowerCAmelCase      						=	'''\
@inproceedings{bleurt,
  title={BLEURT: Learning Robust Metrics for Text Generation},
  author={Thibault Sellam and Dipanjan Das and Ankur P. Parikh},
  booktitle={ACL},
  year={2020},
  url={https://arxiv.org/abs/2004.04696}
}
'''

_lowerCAmelCase      						=	'''\
BLEURT a learnt evaluation metric for Natural Language Generation. It is built using multiple phases of transfer learning starting from a pretrained BERT model (Devlin et al. 2018)
and then employing another pre-training phrase using synthetic data. Finally it is trained on WMT human annotations. You may run BLEURT out-of-the-box or fine-tune
it for your specific application (the latter is expected to perform better).

See the project\'s README at https://github.com/google-research/bleurt#readme for more information.
'''

_lowerCAmelCase      						=	'''
BLEURT score.

Args:
    `predictions` (list of str): prediction/candidate sentences
    `references` (list of str): reference sentences
    `checkpoint` BLEURT checkpoint. Will default to BLEURT-tiny if None.

Returns:
    \'scores\': List of scores.
Examples:

    >>> predictions = ["hello there", "general kenobi"]
    >>> references = ["hello there", "general kenobi"]
    >>> bleurt = datasets.load_metric("bleurt")
    >>> results = bleurt.compute(predictions=predictions, references=references)
    >>> print([round(v, 2) for v in results["scores"]])
    [1.03, 1.04]
'''

_lowerCAmelCase      						=	{
    '''bleurt-tiny-128''': '''https://storage.googleapis.com/bleurt-oss/bleurt-tiny-128.zip''',
    '''bleurt-tiny-512''': '''https://storage.googleapis.com/bleurt-oss/bleurt-tiny-512.zip''',
    '''bleurt-base-128''': '''https://storage.googleapis.com/bleurt-oss/bleurt-base-128.zip''',
    '''bleurt-base-512''': '''https://storage.googleapis.com/bleurt-oss/bleurt-base-512.zip''',
    '''bleurt-large-128''': '''https://storage.googleapis.com/bleurt-oss/bleurt-large-128.zip''',
    '''bleurt-large-512''': '''https://storage.googleapis.com/bleurt-oss/bleurt-large-512.zip''',
    '''BLEURT-20-D3''': '''https://storage.googleapis.com/bleurt-oss-21/BLEURT-20-D3.zip''',
    '''BLEURT-20-D6''': '''https://storage.googleapis.com/bleurt-oss-21/BLEURT-20-D6.zip''',
    '''BLEURT-20-D12''': '''https://storage.googleapis.com/bleurt-oss-21/BLEURT-20-D12.zip''',
    '''BLEURT-20''': '''https://storage.googleapis.com/bleurt-oss-21/BLEURT-20.zip''',
}






@datasets.utils.file_utils.add_start_docstrings(_DESCRIPTION						, _KWARGS_DESCRIPTION     )
class        lowerCAmelCase_(				datasets.Metric     ):
  '''simple docstring'''




  def 							UpperCAmelCase_	(    self      )    ->		Union[str, Any]:
      return datasets.MetricInfo(
          description=_DESCRIPTION  ,citation=_CITATION  ,homepage="""https://github.com/google-research/bleurt"""  ,inputs_description=_KWARGS_DESCRIPTION  ,features=datasets.Features(
              {
                  """predictions""": datasets.Value("""string"""  ,id="""sequence"""      ),
                  """references""": datasets.Value("""string"""  ,id="""sequence"""      ),
              }      )  ,codebase_urls=["""https://github.com/google-research/bleurt"""]  ,reference_urls=["""https://github.com/google-research/bleurt""", """https://arxiv.org/abs/2004.04696"""]  ,)




  def 							UpperCAmelCase_	(    self  ,__UpperCAmelCase      )    ->		Tuple:
      # check that config name specifies a valid BLEURT model
      if self.config_name == "default":
          logger.warning(
              """Using default BLEURT-Base checkpoint for sequence maximum length 128. """
              """You can use a bigger model for better results with e.g.: datasets.load_metric('bleurt', 'bleurt-large-512')."""      )
          lowerCAmelCase__ :  str							      =					"""bleurt-base-128"""

      if self.config_name.lower() in CHECKPOINT_URLS:
          lowerCAmelCase__ :  Union[str, Any]							      =					self.config_name.lower()

      elif self.config_name.upper() in CHECKPOINT_URLS:
          lowerCAmelCase__ :  List[Any]							      =					self.config_name.upper()

      else:
          raise KeyError(
              F"""{self.config_name} model not found. You should supply the name of a model checkpoint for bleurt in {CHECKPOINT_URLS.keys()}"""      )

      # download the model checkpoint specified by self.config_name and set up the scorer
      lowerCAmelCase__ :  int							      =					dl_manager.download_and_extract(CHECKPOINT_URLS[checkpoint_name]      )
      lowerCAmelCase__ :  Dict							      =					score.BleurtScorer(os.path.join(__UpperCAmelCase  ,__UpperCAmelCase      )      )






  def 							UpperCAmelCase_	(    self  ,__UpperCAmelCase  ,__UpperCAmelCase      )    ->		Union[str, Any]:
      lowerCAmelCase__ :  Union[str, Any]							      =					self.scorer.score(references=__UpperCAmelCase  ,candidates=__UpperCAmelCase      )
      return {"scores": scores}


