
import unittest

from transformers import BigBirdConfig, is_flax_available
from transformers.testing_utils import require_flax, slow

from ...test_modeling_flax_common import FlaxModelTesterMixin, ids_tensor, random_attention_mask


if is_flax_available():
		import jax

		from transformers.models.big_bird.modeling_flax_big_bird import (
		    FlaxBigBirdForCausalLM,
		    FlaxBigBirdForMaskedLM,
		    FlaxBigBirdForMultipleChoice,
		    FlaxBigBirdForPreTraining,
		    FlaxBigBirdForQuestionAnswering,
		    FlaxBigBirdForSequenceClassification,
		    FlaxBigBirdForTokenClassification,
		    FlaxBigBirdModel,
		)

class        snake_case__    (unittest.TestCase		):







						"""simple docstring"""




						def __init__(       self ,       __lowercase ,       __lowercase=2 ,       __lowercase=5_6 ,       __lowercase=True ,       __lowercase=True ,       __lowercase=True ,       __lowercase=True ,       __lowercase=9_9 ,       __lowercase=3_2 ,       __lowercase=2 ,       __lowercase=2 ,       __lowercase=7 ,       __lowercase="gelu_new" ,       __lowercase=0.1 ,       __lowercase=0.1 ,       __lowercase=5_1_2 ,       __lowercase=1_6 ,       __lowercase=2 ,       __lowercase=0.0_2 ,       __lowercase=4 ,       __lowercase="block_sparse" ,       __lowercase=True ,       __lowercase=False ,       __lowercase=2 ,       __lowercase=3 ,       ) ->				int:
									"""simple docstring"""




									a__       :						Any							=  parent
									a__       :						int							=  batch_size
									a__       :						int							=  seq_length
									a__       :						List[Any]							=  is_training
									a__       :						Any							=  use_attention_mask
									a__       :						Dict							=  use_token_type_ids
									a__       :						str							=  use_labels
									a__       :						Dict							=  vocab_size
									a__       :						Tuple							=  hidden_size
									a__       :						Dict							=  num_hidden_layers
									a__       :						Optional[Any]							=  num_attention_heads
									a__       :						List[str]							=  intermediate_size
									a__       :						Tuple							=  hidden_act
									a__       :						Dict							=  hidden_dropout_prob
									a__       :						List[str]							=  attention_probs_dropout_prob
									a__       :						Optional[int]							=  max_position_embeddings
									a__       :						int							=  type_vocab_size
									a__       :						int							=  type_sequence_label_size
									a__       :						Optional[int]							=  initializer_range
									a__       :						int							=  num_choices

									a__       :						Optional[Any]							=  rescale_embeddings
									a__       :						str							=  attention_type
									a__       :						Optional[Any]							=  use_bias
									a__       :						Optional[Any]							=  block_size
									a__       :						List[str]							=  num_random_blocks

						def 							SCREAMING_SNAKE_CASE__(       self  ) ->				int:
									"""simple docstring"""




									a__       :						List[Any]							=  ids_tensor([self.batch_size, self.seq_length] ,       self.vocab_size  )

									a__       :						int							=  None
									if self.use_attention_mask:
												a__       :						Optional[Any]							=  random_attention_mask([self.batch_size, self.seq_length]  )

									a__       :						Optional[Any]							=  None
									if self.use_token_type_ids:
												a__       :						List[Any]							=  ids_tensor([self.batch_size, self.seq_length] ,       self.type_vocab_size  )

									a__       :						Union[str, Any]							=  BigBirdConfig(
									    vocab_size=self.vocab_size ,       hidden_size=self.hidden_size ,       num_hidden_layers=self.num_hidden_layers ,       num_attention_heads=self.num_attention_heads ,       intermediate_size=self.intermediate_size ,       hidden_act=self.hidden_act ,       hidden_dropout_prob=self.hidden_dropout_prob ,       attention_probs_dropout_prob=self.attention_probs_dropout_prob ,       max_position_embeddings=self.max_position_embeddings ,       type_vocab_size=self.type_vocab_size ,       is_decoder=__lowercase ,       initializer_range=self.initializer_range ,       attention_type=self.attention_type ,       block_size=self.block_size ,       num_random_blocks=self.num_random_blocks ,       use_bias=self.use_bias ,       rescale_embeddings=self.rescale_embeddings ,       )

									return config, input_ids, token_type_ids, attention_mask

						def 							SCREAMING_SNAKE_CASE__(       self  ) ->				List[str]:
									"""simple docstring"""




									a__       :						Dict							=  self.prepare_config_and_inputs()
									a__       :						List[Any]							=  config_and_inputs
									a__       :						Optional[Any]							=  {
									    'input_ids': input_ids,
									    'token_type_ids': token_type_ids,
									    'attention_mask': attention_mask,
									}
									return config, inputs_dict




@require_flax
class        snake_case__    (A__ ,     unittest.TestCase		):







						"""simple docstring"""




						__lowerCAmelCase					:int      =					(
						    (
						        FlaxBigBirdForCausalLM,
						        FlaxBigBirdModel,
						        FlaxBigBirdForPreTraining,
						        FlaxBigBirdForMaskedLM,
						        FlaxBigBirdForMultipleChoice,
						        FlaxBigBirdForQuestionAnswering,
						        FlaxBigBirdForSequenceClassification,
						        FlaxBigBirdForTokenClassification,
						    )
						    if is_flax_available()
						    else ()
						)

						__lowerCAmelCase					:str      =					False
						__lowerCAmelCase					:Any      =					False

						def 							SCREAMING_SNAKE_CASE__(       self  ) ->				Union[str, Any]:
									"""simple docstring"""




									a__       :						Tuple							=  FlaxBigBirdModelTester(self  )

						@slow
						# copied from `test_modeling_flax_common` because it takes much longer than other models
						def 							SCREAMING_SNAKE_CASE__(       self  ) ->				Any:
									"""simple docstring"""




									super().test_from_pretrained_save_pretrained()

						@slow
						# copied from `test_modeling_flax_common` because it takes much longer than other models
						def 							SCREAMING_SNAKE_CASE__(       self  ) ->				int:
									"""simple docstring"""




									super().test_from_pretrained_with_no_automatic_init()

						@slow
						# copied from `test_modeling_flax_common` because it takes much longer than other models
						def 							SCREAMING_SNAKE_CASE__(       self  ) ->				Tuple:
									"""simple docstring"""




									super().test_no_automatic_init()

						@slow
						# copied from `test_modeling_flax_common` because it takes much longer than other models
						def 							SCREAMING_SNAKE_CASE__(       self  ) ->				Dict:
									"""simple docstring"""




									super().test_hidden_states_output()

						@slow
						def 							SCREAMING_SNAKE_CASE__(       self  ) ->				Union[str, Any]:
									"""simple docstring"""




									for model_class_name in self.all_model_classes:
												a__       :						Optional[Any]							=  model_class_name.from_pretrained("""google/bigbird-roberta-base"""  )
												self.assertIsNotNone(__lowercase  )

						def 							SCREAMING_SNAKE_CASE__(       self  ) ->				Union[str, Any]:
									"""simple docstring"""




									if self.test_attn_probs:
												super().test_attention_outputs()

						@slow
						# copied from `test_modeling_flax_common` because it takes much longer than other models
						def 							SCREAMING_SNAKE_CASE__(       self  ) ->				Dict:
									"""simple docstring"""




									a__       :						Optional[Any]							=  self.model_tester.prepare_config_and_inputs_for_common()

									for model_class in self.all_model_classes:
												with self.subTest(model_class.__name__  ):
															a__       :						int							=  self._prepare_for_class(__lowercase ,       __lowercase  )
															a__       :						Optional[Any]							=  model_class(__lowercase  )

															@jax.jit
															def model_jitted(__lowercase ,       __lowercase=None ,       **__lowercase  ):
																		return model(input_ids=__lowercase ,       attention_mask=__lowercase ,       **__lowercase  )

															with self.subTest("""JIT Enabled"""  ):
																		a__       :						Tuple							=  model_jitted(**__lowercase  ).to_tuple()

															with self.subTest("""JIT Disabled"""  ):
																		with jax.disable_jit():
																					a__       :						List[Any]							=  model_jitted(**__lowercase  ).to_tuple()

															self.assertEqual(len(__lowercase  ) ,       len(__lowercase  )  )
															for jitted_output, output in zip(__lowercase ,       __lowercase  ):
																		self.assertEqual(jitted_output.shape ,       output.shape  )

						def 							SCREAMING_SNAKE_CASE__(       self ,       __lowercase ,       __lowercase ,       __lowercase ,       __lowercase=1E-5 ,       __lowercase="outputs" ,       __lowercase=None  ) ->				Optional[Any]:
									"""simple docstring"""




									if name.startswith("""outputs.attentions"""  ):
												return
									else:
												super().check_pt_flax_outputs(__lowercase ,       __lowercase ,       __lowercase ,       __lowercase ,       __lowercase ,       __lowercase  )









import sacrebleu as scb
from packaging import version
from sacrebleu import TER

import datasets


_lowercase		:				Any      		="\\n@inproceedings{snover-etal-2006-study,\n    title = \"A Study of Translation Edit Rate with Targeted Human Annotation\",\n    author = \"Snover, Matthew  and\n      Dorr, Bonnie  and\n      Schwartz, Rich  and\n      Micciulla, Linnea  and\n      Makhoul, John\",\n    booktitle = \"Proceedings of the 7th Conference of the Association for Machine Translation in the Americas: Technical Papers\",\n    month = aug # \" 8-12\",\n    year = \"2006\",\n    address = \"Cambridge, Massachusetts, USA\",\n    publisher = \"Association for Machine Translation in the Americas\",\n    url = \"https://aclanthology.org/2006.amta-papers.25\",\n    pages = \"223--231\",\n}\n@inproceedings{post-2018-call,\n    title = \"A Call for Clarity in Reporting {BLEU} Scores\",\n    author = \"Post, Matt\",\n    booktitle = \"Proceedings of the Third Conference on Machine Translation: Research Papers\",\n    month = oct,\n    year = \"2018\",\n    address = \"Belgium, Brussels\",\n    publisher = \"Association for Computational Linguistics\",\n    url = \"https://www.aclweb.org/anthology/W18-6319\",\n    pages = \"186--191\",\n}\n"

_lowercase		:				str      		="\\nTER (Translation Edit Rate, also called Translation Error Rate) is a metric to quantify the edit operations that a\nhypothesis requires to match a reference translation. We use the implementation that is already present in sacrebleu\n(https://github.com/mjpost/sacreBLEU#ter), which in turn is inspired by the TERCOM implementation, which can be found\nhere: https://github.com/jhclark/tercom.\n\nThe implementation here is slightly different from sacrebleu in terms of the required input format. The length of\nthe references and hypotheses lists need to be the same, so you may need to transpose your references compared to\nsacrebleu's required input format. See https://github.com/huggingface/datasets/issues/3154#issuecomment-950746534\n\nSee the README.md file at https://github.com/mjpost/sacreBLEU#ter for more information.\n"

_lowercase		:				Optional[Any]      		="\nProduces TER scores alongside the number of edits and reference length.\n\nArgs:\n    predictions (list of str): The system stream (a sequence of segments).\n    references (list of list of str): A list of one or more reference streams (each a sequence of segments).\n    normalized (boolean): If `True`, applies basic tokenization and normalization to sentences. Defaults to `False`.\n    ignore_punct (boolean): If `True`, applies basic tokenization and normalization to sentences. Defaults to `False`.\n    support_zh_ja_chars (boolean): If `True`, tokenization/normalization supports processing of Chinese characters,\n                                    as well as Japanese Kanji, Hiragana, Katakana, and Phonetic Extensions of Katakana.\n                                    Only applies if `normalized = True`. Defaults to `False`.\n    case_sensitive (boolean): If `False`, makes all predictions and references lowercase to ignore differences in case. Defaults to `False`.\n\nReturns:\n    'score' (float): TER score (num_edits / sum_ref_lengths * 100)\n    'num_edits' (int): The cumulative number of edits\n    'ref_length' (float): The cumulative average reference length\n\nExamples:\n    Example 1:\n        >>> predictions = [\"does this sentence match??\",\n        ...                     \"what about this sentence?\",\n        ...                     \"What did the TER metric user say to the developer?\"]\n        >>> references = [[\"does this sentence match\", \"does this sentence match!?!\"],\n        ...             [\"wHaT aBoUt ThIs SeNtEnCe?\", \"wHaT aBoUt ThIs SeNtEnCe?\"],\n        ...             [\"Your jokes are...\", \"...TERrible\"]]\n        >>> ter = datasets.load_metric(\"ter\")\n        >>> results = ter.compute(predictions=predictions,\n        ...                         references=references,\n        ...                         case_sensitive=True)\n        >>> print(results)\n        {'score': 150.0, 'num_edits': 15, 'ref_length': 10.0}\n\n    Example 2:\n        >>> predictions = [\"does this sentence match??\",\n        ...                     \"what about this sentence?\"]\n        >>> references = [[\"does this sentence match\", \"does this sentence match!?!\"],\n        ...             [\"wHaT aBoUt ThIs SeNtEnCe?\", \"wHaT aBoUt ThIs SeNtEnCe?\"]]\n        >>> ter = datasets.load_metric(\"ter\")\n        >>> results = ter.compute(predictions=predictions,\n        ...                         references=references,\n        ...                         case_sensitive=True)\n        >>> print(results)\n        {'score': 62.5, 'num_edits': 5, 'ref_length': 8.0}\n\n    Example 3:\n        >>> predictions = [\"does this sentence match??\",\n        ...                     \"what about this sentence?\"]\n        >>> references = [[\"does this sentence match\", \"does this sentence match!?!\"],\n        ...             [\"wHaT aBoUt ThIs SeNtEnCe?\", \"wHaT aBoUt ThIs SeNtEnCe?\"]]\n        >>> ter = datasets.load_metric(\"ter\")\n        >>> results = ter.compute(predictions=predictions,\n        ...                         references=references,\n        ...                         normalized=True,\n        ...                         case_sensitive=True)\n        >>> print(results)\n        {'score': 57.14285714285714, 'num_edits': 6, 'ref_length': 10.5}\n\n    Example 4:\n        >>> predictions = [\"does this sentence match??\",\n        ...                     \"what about this sentence?\"]\n        >>> references = [[\"does this sentence match\", \"does this sentence match!?!\"],\n        ...             [\"wHaT aBoUt ThIs SeNtEnCe?\", \"wHaT aBoUt ThIs SeNtEnCe?\"]]\n        >>> ter = datasets.load_metric(\"ter\")\n        >>> results = ter.compute(predictions=predictions,\n        ...                         references=references,\n        ...                         ignore_punct=True,\n        ...                         case_sensitive=False)\n        >>> print(results)\n        {'score': 0.0, 'num_edits': 0, 'ref_length': 8.0}\n\n    Example 5:\n        >>> predictions = [\"does this sentence match??\",\n        ...                    \"what about this sentence?\",\n        ...                    \"What did the TER metric user say to the developer?\"]\n        >>> references = [[\"does this sentence match\", \"does this sentence match!?!\"],\n        ...             [\"wHaT aBoUt ThIs SeNtEnCe?\", \"wHaT aBoUt ThIs SeNtEnCe?\"],\n        ...             [\"Your jokes are...\", \"...TERrible\"]]\n        >>> ter = datasets.load_metric(\"ter\")\n        >>> results = ter.compute(predictions=predictions,\n        ...                         references=references,\n        ...                         ignore_punct=True,\n        ...                         case_sensitive=False)\n        >>> print(results)\n        {'score': 100.0, 'num_edits': 10, 'ref_length': 10.0}\n"

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







						"""simple docstring"""




						def 							SCREAMING_SNAKE_CASE__(       self  ) ->				Tuple:
									"""simple docstring"""




									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="""http://www.cs.umd.edu/~snover/tercom/""" ,       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#ter"""] ,       reference_urls=[
									        """https://github.com/jhclark/tercom""",
									    ] ,       )

						def 							SCREAMING_SNAKE_CASE__(       self ,       __lowercase ,       __lowercase ,       __lowercase = False ,       __lowercase = False ,       __lowercase = False ,       __lowercase = False ,       ) ->				Any:
									"""simple docstring"""




									a__       :						Any							=  len(references[0]  )
									if any(len(__lowercase  ) != references_per_prediction for refs in references  ):
												raise ValueError("""Sacrebleu requires the same number of references for each prediction"""  )
									a__       :						str							=  [[refs[i] for refs in references] for i in range(__lowercase  )]

									a__       :						int							=  TER(
									    normalized=__lowercase ,       no_punct=__lowercase ,       asian_support=__lowercase ,       case_sensitive=__lowercase ,       )
									a__       :						Optional[int]							=  sb_ter.corpus_score(__lowercase ,       __lowercase  )

									return {"score": output.score, "num_edits": output.num_edits, "ref_length": output.ref_length}




