from sklearn.metrics import accuracy_score

import datasets


__lowerCAmelCase    :  Tuple										= '\nAccuracy is the proportion of correct predictions among the total number of cases processed. It can be computed with:\nAccuracy = (TP + TN) / (TP + TN + FP + FN)\n Where:\nTP: True positive\nTN: True negative\nFP: False positive\nFN: False negative\n'


__lowerCAmelCase    :  List[str]										= '\nArgs:\n    predictions (`list` of `int`): Predicted labels.\n    references (`list` of `int`): Ground truth labels.\n    normalize (`boolean`): If set to False, returns the number of correctly classified samples. Otherwise, returns the fraction of correctly classified samples. Defaults to True.\n    sample_weight (`list` of `float`): Sample weights Defaults to None.\n\nReturns:\n    accuracy (`float` or `int`): Accuracy score. Minimum possible value is 0. Maximum possible value is 1.0, or the number of examples input, if `normalize` is set to `True`.. A higher score means higher accuracy.\n\nExamples:\n\n    Example 1-A simple example\n        >>> accuracy_metric = datasets.load_metric("accuracy")\n        >>> results = accuracy_metric.compute(references=[0, 1, 2, 0, 1, 2], predictions=[0, 1, 1, 2, 1, 0])\n        >>> print(results)\n        {\'accuracy\': 0.5}\n\n    Example 2-The same as Example 1, except with `normalize` set to `False`.\n        >>> accuracy_metric = datasets.load_metric("accuracy")\n        >>> results = accuracy_metric.compute(references=[0, 1, 2, 0, 1, 2], predictions=[0, 1, 1, 2, 1, 0], normalize=False)\n        >>> print(results)\n        {\'accuracy\': 3.0}\n\n    Example 3-The same as Example 1, except with `sample_weight` set.\n        >>> accuracy_metric = datasets.load_metric("accuracy")\n        >>> results = accuracy_metric.compute(references=[0, 1, 2, 0, 1, 2], predictions=[0, 1, 1, 2, 1, 0], sample_weight=[0.5, 2, 0.7, 0.5, 9, 0.4])\n        >>> print(results)\n        {\'accuracy\': 0.8778625954198473}\n'


__lowerCAmelCase    :  str										= '\n@article{scikit-learn,\n  title={Scikit-learn: Machine Learning in {P}ython},\n  author={Pedregosa, F. and Varoquaux, G. and Gramfort, A. and Michel, V.\n         and Thirion, B. and Grisel, O. and Blondel, M. and Prettenhofer, P.\n         and Weiss, R. and Dubourg, V. and Vanderplas, J. and Passos, A. and\n         Cournapeau, D. and Brucher, M. and Perrot, M. and Duchesnay, E.},\n  journal={Journal of Machine Learning Research},\n  volume={12},\n  pages={2825--2830},\n  year={2011}\n}\n'
@datasets.utils.file_utils.add_start_docstrings(_DESCRIPTION				,     _KWARGS_DESCRIPTION					)
class 				lowerCamelCase			(							datasets.Metric					):






      def 			lowerCAmelCase_   (      self						)     ->				List[Any]:


          '''simple docstring'''







          return datasets.MetricInfo(
              description=_DESCRIPTION  ,		citation=_CITATION  ,		inputs_description=_KWARGS_DESCRIPTION  ,		features=datasets.Features(
                  {
                      """predictions""": datasets.Sequence(datasets.Value("""int32"""						)						),
                      """references""": datasets.Sequence(datasets.Value("""int32"""						)						),
                  }
                  if self.config_name == """multilabel"""
                  else {
                      """predictions""": datasets.Value("""int32"""						),
                      """references""": datasets.Value("""int32"""						),
                  }						)  ,		reference_urls=["""https://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html"""]  ,		)






      def 			lowerCAmelCase_   (      self  ,		__lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase=True  ,		__lowerCamelCase=None						)     ->				str:


          '''simple docstring'''







          return {
              "accuracy": float(
                  accuracy_score(__lowerCamelCase  ,		__lowerCamelCase  ,		normalize=__lowerCamelCase  ,		sample_weight=__lowerCamelCase						)						)
          }



from collections import OrderedDict
from typing import Any, Mapping, Optional

from ... import PreTrainedTokenizer
from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig, OnnxConfigWithPast, OnnxSeqaSeqConfigWithPast
from ...onnx.utils import compute_effective_axis_dimension
from ...utils import TensorType, is_torch_available, logging


__lowerCAmelCase    :  Optional[int]										= logging.get_logger(__name__)

__lowerCAmelCase    :  Dict										= {
    'google/bigbird-pegasus-large-arxiv': (
        'https://huggingface.co/google/bigbird-pegasus-large-arxiv/resolve/main/config.json'
    ),
    'google/bigbird-pegasus-large-pubmed': (
        'https://huggingface.co/google/bigbird-pegasus-large-pubmed/resolve/main/config.json'
    ),
    'google/bigbird-pegasus-large-bigpatent': (
        'https://huggingface.co/google/bigbird-pegasus-large-bigpatent/resolve/main/config.json'
    ),
    # See all BigBirdPegasus models at https://huggingface.co/models?filter=bigbird_pegasus
}
class 				lowerCamelCase			(							__snake_case					):
      __lowerCamelCase							=					'bigbird_pegasus'
      __lowerCamelCase							=					['past_key_values']
      __lowerCamelCase							=					{
          'num_attention_heads': 'encoder_attention_heads',
          'hidden_size': 'd_model',
          'attention_probs_dropout_prob': 'attention_dropout',
      }






      def __init__(      self  ,		__lowerCamelCase=9_61_03  ,		__lowerCamelCase=40_96  ,		__lowerCamelCase=16  ,		__lowerCamelCase=40_96  ,		__lowerCamelCase=16  ,		__lowerCamelCase=16  ,		__lowerCamelCase=40_96  ,		__lowerCamelCase=16  ,		__lowerCamelCase=0.0  ,		__lowerCamelCase=0.0  ,		__lowerCamelCase=True  ,		__lowerCamelCase=True  ,		__lowerCamelCase="gelu_new"  ,		__lowerCamelCase=10_24  ,		__lowerCamelCase=0.1  ,		__lowerCamelCase=0.0  ,		__lowerCamelCase=0.0  ,		__lowerCamelCase=0.02  ,		__lowerCamelCase=2  ,		__lowerCamelCase=0.0  ,		__lowerCamelCase=True  ,		__lowerCamelCase=0  ,		__lowerCamelCase=2  ,		__lowerCamelCase=1  ,		__lowerCamelCase="block_sparse"  ,		__lowerCamelCase=64  ,		__lowerCamelCase=3  ,		__lowerCamelCase=False  ,		**__lowerCamelCase  ,		)     ->				Dict:


          '''simple docstring'''







          snake_case:						Dict         =   vocab_size
          snake_case:						Union[str, Any]         =   max_position_embeddings
          snake_case:						Tuple         =   d_model
          snake_case:						int         =   encoder_ffn_dim
          snake_case:						List[Any]         =   encoder_layers
          snake_case:						Tuple         =   encoder_attention_heads
          snake_case:						int         =   decoder_ffn_dim
          snake_case:						str         =   decoder_layers
          snake_case:						str         =   decoder_attention_heads
          snake_case:						Optional[Any]         =   dropout
          snake_case:						Union[str, Any]         =   attention_dropout
          snake_case:						List[str]         =   activation_dropout
          snake_case:						Optional[Any]         =   activation_function
          snake_case:						Dict         =   init_std
          snake_case:						str         =   encoder_layerdrop
          snake_case:						List[Any]         =   decoder_layerdrop
          snake_case:						int         =   classifier_dropout
          snake_case:						Optional[Any]         =   use_cache
          snake_case:						int         =   encoder_layers
          snake_case:						str         =   scale_embedding  # scale factor will be sqrt(d_model) if True

          # extra config
          snake_case:						Union[str, Any]         =   attention_type
          snake_case:						Optional[int]         =   block_size
          snake_case:						Optional[int]         =   num_random_blocks
          snake_case:						List[Any]         =   use_bias

          super().__init__(
              pad_token_id=__lowerCamelCase  ,		bos_token_id=__lowerCamelCase  ,		eos_token_id=__lowerCamelCase  ,		is_encoder_decoder=__lowerCamelCase  ,		decoder_start_token_id=__lowerCamelCase  ,		**__lowerCamelCase  ,		)





class 				lowerCamelCase			(							__snake_case					):






      @property
      def 			lowerCAmelCase_   (      self						)     ->				Mapping[str, Mapping[int, str]]:


          '''simple docstring'''







          if self.task in ["default", "seq2seq-lm"]:
              snake_case:						Tuple         =   OrderedDict(
                  [
                      ("""input_ids""", {0: """batch""", 1: """encoder_sequence"""}),
                      ("""attention_mask""", {0: """batch""", 1: """encoder_sequence"""}),
                  ]						)

              if self.use_past:
                  snake_case:						List[Any]         =   {0: """batch"""}
                  snake_case:						Optional[int]         =   {0: """batch""", 1: """past_decoder_sequence + sequence"""}
              else:
                  snake_case:						List[Any]         =   {0: """batch""", 1: """decoder_sequence"""}
                  snake_case:						Union[str, Any]         =   {0: """batch""", 1: """decoder_sequence"""}

              if self.use_past:
                  self.fill_with_past_key_values_(__lowerCamelCase  ,		direction="""inputs"""						)
          elif self.task == "causal-lm":
              # TODO: figure this case out.
              snake_case:						List[str]         =   OrderedDict(
                  [
                      ("""input_ids""", {0: """batch""", 1: """encoder_sequence"""}),
                      ("""attention_mask""", {0: """batch""", 1: """encoder_sequence"""}),
                  ]						)
              if self.use_past:
                  snake_case    , snake_case:						str         =   self.num_layers
                  for i in range(__lowerCamelCase						):
                      snake_case:						Any         =   {0: """batch""", 2: """past_sequence + sequence"""}
                      snake_case:						str         =   {0: """batch""", 2: """past_sequence + sequence"""}
          else:
              snake_case:						str         =   OrderedDict(
                  [
                      ("""input_ids""", {0: """batch""", 1: """encoder_sequence"""}),
                      ("""attention_mask""", {0: """batch""", 1: """encoder_sequence"""}),
                      ("""decoder_input_ids""", {0: """batch""", 1: """decoder_sequence"""}),
                      ("""decoder_attention_mask""", {0: """batch""", 1: """decoder_sequence"""}),
                  ]						)

          return common_inputs






      @property
      def 			lowerCAmelCase_   (      self						)     ->				Mapping[str, Mapping[int, str]]:


          '''simple docstring'''







          if self.task in ["default", "seq2seq-lm"]:
              snake_case:						List[str]         =   super().outputs
          else:
              snake_case:						Optional[Any]         =   super(__lowerCamelCase  ,		self						).outputs
              if self.use_past:
                  snake_case    , snake_case:						str         =   self.num_layers
                  for i in range(__lowerCamelCase						):
                      snake_case:						List[Any]         =   {0: """batch""", 2: """past_sequence + sequence"""}
                      snake_case:						int         =   {0: """batch""", 2: """past_sequence + sequence"""}
          return common_outputs






      def 			lowerCAmelCase_   (      self  ,		__lowerCamelCase  ,		__lowerCamelCase = -1  ,		__lowerCamelCase = -1  ,		__lowerCamelCase = False  ,		__lowerCamelCase = None  ,		)     ->				Mapping[str, Any]:


          '''simple docstring'''







          snake_case:						List[Any]         =   self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
              __lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase						)

          # Generate decoder inputs
          snake_case:						Any         =   seq_length if not self.use_past else 1
          snake_case:						List[str]         =   self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
              __lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase						)
          snake_case:						Dict         =   {F"decoder_{name}": tensor for name, tensor in decoder_inputs.items()}
          snake_case:						List[str]         =   dict(**__lowerCamelCase  ,		**__lowerCamelCase						)

          if self.use_past:
              if not is_torch_available():
                  raise ValueError("""Cannot generate dummy past_keys inputs without PyTorch installed."""						)
              else:
                  import torch
              snake_case    , snake_case:						Optional[int]         =   common_inputs["""input_ids"""].shape
              snake_case:						Optional[Any]         =   common_inputs["""decoder_input_ids"""].shape[1]
              snake_case    , snake_case:						Any         =   self.num_attention_heads
              snake_case:						Optional[int]         =   (
                  batch,
                  num_encoder_attention_heads,
                  encoder_seq_length,
                  self._config.hidden_size // num_encoder_attention_heads,
              )
              snake_case:						List[Any]         =   decoder_seq_length + 3
              snake_case:						Optional[Any]         =   (
                  batch,
                  num_decoder_attention_heads,
                  decoder_past_length,
                  self._config.hidden_size // num_decoder_attention_heads,
              )

              snake_case:						Tuple         =   torch.cat(
                  [common_inputs["""decoder_attention_mask"""], torch.ones(__lowerCamelCase  ,		__lowerCamelCase						)]  ,		dim=1						)

              snake_case:						Tuple         =   []
              # If the number of encoder and decoder layers are present in the model configuration, both are considered
              snake_case    , snake_case:						Union[str, Any]         =   self.num_layers
              snake_case:						List[str]         =   min(__lowerCamelCase  ,		__lowerCamelCase						)
              snake_case:						List[str]         =   max(__lowerCamelCase  ,		__lowerCamelCase						) - min_num_layers
              snake_case:						Union[str, Any]         =   """encoder""" if num_encoder_layers > num_decoder_layers else """decoder"""

              for _ in range(__lowerCamelCase						):
                  common_inputs["past_key_values"].append(
                      (
                          torch.zeros(__lowerCamelCase						),
                          torch.zeros(__lowerCamelCase						),
                          torch.zeros(__lowerCamelCase						),
                          torch.zeros(__lowerCamelCase						),
                      )						)
              # TODO: test this.
              snake_case:						Dict         =   encoder_shape if remaining_side_name == """encoder""" else decoder_shape
              for _ in range(__lowerCamelCase  ,		__lowerCamelCase						):
                  common_inputs["past_key_values"].append((torch.zeros(__lowerCamelCase						), torch.zeros(__lowerCamelCase						))						)
          return common_inputs






      def 			lowerCAmelCase_   (      self  ,		__lowerCamelCase  ,		__lowerCamelCase = -1  ,		__lowerCamelCase = -1  ,		__lowerCamelCase = False  ,		__lowerCamelCase = None  ,		)     ->				Mapping[str, Any]:


          '''simple docstring'''







          snake_case:						Any         =   self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
              __lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase						)

          if self.use_past:
              if not is_torch_available():
                  raise ValueError("""Cannot generate dummy past_keys inputs without PyTorch installed."""						)
              else:
                  import torch
              snake_case    , snake_case:						Dict         =   common_inputs["""input_ids"""].shape
              # Not using the same length for past_key_values
              snake_case:						int         =   seqlen + 2
              snake_case    , snake_case:						Dict         =   self.num_layers
              snake_case    , snake_case:						Tuple         =   self.num_attention_heads
              snake_case:						Optional[int]         =   (
                  batch,
                  num_encoder_attention_heads,
                  past_key_values_length,
                  self._config.hidden_size // num_encoder_attention_heads,
              )

              snake_case:						int         =   common_inputs["""attention_mask"""].dtype
              snake_case:						Union[str, Any]         =   torch.cat(
                  [common_inputs["""attention_mask"""], torch.ones(__lowerCamelCase  ,		__lowerCamelCase  ,		dtype=__lowerCamelCase						)]  ,		dim=1						)
              snake_case:						Dict         =   [
                  (torch.zeros(__lowerCamelCase						), torch.zeros(__lowerCamelCase						)) for _ in range(__lowerCamelCase						)
              ]
          return common_inputs






      def 			lowerCAmelCase_   (      self  ,		__lowerCamelCase  ,		__lowerCamelCase = -1  ,		__lowerCamelCase = -1  ,		__lowerCamelCase = False  ,		__lowerCamelCase = None  ,		)     ->				Mapping[str, Any]:


          '''simple docstring'''







          snake_case:						str         =   compute_effective_axis_dimension(
              __lowerCamelCase  ,		fixed_dimension=OnnxConfig.default_fixed_batch  ,		num_token_to_add=0						)

          # If dynamic axis (-1) we forward with a fixed dimension of 8 tokens to avoid optimizations made by ONNX
          snake_case:						str         =   tokenizer.num_special_tokens_to_add(__lowerCamelCase						)
          snake_case:						int         =   compute_effective_axis_dimension(
              __lowerCamelCase  ,		fixed_dimension=OnnxConfig.default_fixed_sequence  ,		num_token_to_add=__lowerCamelCase						)

          # Generate dummy inputs according to compute batch and sequence
          snake_case:						Dict         =   [""" """.join([tokenizer.unk_token]						) * seq_length] * batch_size
          snake_case:						Any         =   dict(tokenizer(__lowerCamelCase  ,		return_tensors=__lowerCamelCase						)						)
          return common_inputs






      def 			lowerCAmelCase_   (      self  ,		__lowerCamelCase  ,		__lowerCamelCase = -1  ,		__lowerCamelCase = -1  ,		__lowerCamelCase = False  ,		__lowerCamelCase = None  ,		)     ->				Mapping[str, Any]:


          '''simple docstring'''







          if self.task in ["default", "seq2seq-lm"]:
              snake_case:						Union[str, Any]         =   self._generate_dummy_inputs_for_default_and_seqaseq_lm(
                  __lowerCamelCase  ,		batch_size=__lowerCamelCase  ,		seq_length=__lowerCamelCase  ,		is_pair=__lowerCamelCase  ,		framework=__lowerCamelCase						)

          elif self.task == "causal-lm":
              snake_case:						Union[str, Any]         =   self._generate_dummy_inputs_for_causal_lm(
                  __lowerCamelCase  ,		batch_size=__lowerCamelCase  ,		seq_length=__lowerCamelCase  ,		is_pair=__lowerCamelCase  ,		framework=__lowerCamelCase						)
          else:
              snake_case:						int         =   self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
                  __lowerCamelCase  ,		batch_size=__lowerCamelCase  ,		seq_length=__lowerCamelCase  ,		is_pair=__lowerCamelCase  ,		framework=__lowerCamelCase						)

          return common_inputs






      def 			lowerCAmelCase_   (      self  ,		__lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase						)     ->				List[Any]:


          '''simple docstring'''







          if self.task in ["default", "seq2seq-lm"]:
              snake_case:						Optional[int]         =   super()._flatten_past_key_values_(__lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase						)
          else:
              snake_case:						List[str]         =   super(__lowerCamelCase  ,		self						)._flatten_past_key_values_(
                  __lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase  ,		__lowerCamelCase						)


