






'''simple docstring'''
import numpy as np
from scipy.spatial.distance import cdist
from sklearn.metrics import fa_score

import datasets


UpperCamelCase__ =			'\\n    @inproceedings{kakwani2020indicnlpsuite,\n    title={{IndicNLPSuite: Monolingual Corpora, Evaluation Benchmarks and Pre-trained Multilingual Language Models for Indian Languages}},\n    author={Divyanshu Kakwani and Anoop Kunchukuttan and Satish Golla and Gokul N.C. and Avik Bhattacharyya and Mitesh M. Khapra and Pratyush Kumar},\n    year={2020},\n    booktitle={Findings of EMNLP},\n}\n'

UpperCamelCase__ =			'\\n    IndicGLUE is a natural language understanding benchmark for Indian languages. It contains a wide\n    variety of tasks and covers 11 major Indian languages - as, bn, gu, hi, kn, ml, mr, or, pa, ta, te.\n'

UpperCamelCase__ =			'\nCompute IndicGLUE evaluation metric associated to each IndicGLUE dataset.\nArgs:\n    predictions: list of predictions to score (as int64),\n        except for \'cvit-mkb-clsr\' where each prediction is a vector (of float32).\n    references: list of ground truth labels corresponding to the predictions (as int64),\n        except for \'cvit-mkb-clsr\' where each reference is a vector (of float32).\nReturns: depending on the IndicGLUE subset, one or several of:\n    "accuracy": Accuracy\n    "f1": F1 score\n    "precision": Precision@10\nExamples:\n\n    >>> indic_glue_metric = datasets.load_metric(\'indic_glue\', \'wnli\')  # \'wnli\' or any of ["copa", "sna", "csqa", "wstp", "inltkh", "bbca", "iitp-mr", "iitp-pr", "actsa-sc", "md"]\n    >>> references = [0, 1]\n    >>> predictions = [0, 1]\n    >>> results = indic_glue_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {\'accuracy\': 1.0}\n\n    >>> indic_glue_metric = datasets.load_metric(\'indic_glue\', \'wiki-ner\')\n    >>> references = [0, 1]\n    >>> predictions = [0, 1]\n    >>> results = indic_glue_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {\'accuracy\': 1.0, \'f1\': 1.0}\n\n    >>> indic_glue_metric = datasets.load_metric(\'indic_glue\', \'cvit-mkb-clsr\')\n    >>> references = [[0.5, 0.5, 0.5], [0.1, 0.2, 0.3]]\n    >>> predictions = [[0.5, 0.5, 0.5], [0.1, 0.2, 0.3]]\n    >>> results = indic_glue_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {\'precision@10\': 1.0}\n\n'




def 		__SCREAMING_SNAKE_CASE					(  _UpperCamelCase						,		_UpperCamelCase							):


   """simple docstring"""




   return float((preds == labels).mean()							)




def 		__SCREAMING_SNAKE_CASE					(  _UpperCamelCase						,		_UpperCamelCase							):


   """simple docstring"""




   lowercase_	:    Optional[Any]           =     simple_accuracy(_UpperCamelCase						,		_UpperCamelCase							)
   lowercase_	:    str           =     float(fa_score(y_true=_UpperCamelCase						,		y_pred=_UpperCamelCase							)							)
   return {
       "accuracy": acc,
       "f1": fa,
   }




def 		__SCREAMING_SNAKE_CASE					(  _UpperCamelCase						,		_UpperCamelCase							):


   """simple docstring"""




   lowercase_	:    Dict           =     np.array(_UpperCamelCase							)
   lowercase_	:    int           =     np.array(_UpperCamelCase							)
   lowercase_	:    Union[str, Any]           =     en_sentvecs.shape[0]

   # mean centering
   lowercase_	:    Optional[Any]           =     en_sentvecs - np.mean(_UpperCamelCase						,		axis=0							)
   lowercase_	:    List[Any]           =     in_sentvecs - np.mean(_UpperCamelCase						,		axis=0							)

   lowercase_	:    Optional[int]           =     cdist(_UpperCamelCase						,		_UpperCamelCase						,		"cosine"							)
   lowercase_	:    List[Any]           =     np.array(range(_UpperCamelCase							)							)
   lowercase_	:    int           =     sim.argsort(axis=1							)[:, :10]
   lowercase_	:    Dict           =     np.any(preds == actual[:, None]						,		axis=1							)
   return float(matches.mean()							)





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




    def 				lowerCAmelCase__				(			self  :       Dict			):






       '''simple docstring'''






       if self.config_name not in [
           "wnli",
           "copa",
           "sna",
           "csqa",
           "wstp",
           "inltkh",
           "bbca",
           "cvit-mkb-clsr",
           "iitp-mr",
           "iitp-pr",
           "actsa-sc",
           "md",
           "wiki-ner",
       ]:
          raise KeyError(
              "You should supply a configuration name selected in "
              "[\"wnli\", \"copa\", \"sna\", \"csqa\", \"wstp\", \"inltkh\", \"bbca\", "
              "\"cvit-mkb-clsr\", \"iitp-mr\", \"iitp-pr\", \"actsa-sc\", \"md\", "
              "\"wiki-ner\"]"			)
       return datasets.MetricInfo(
           description=_DESCRIPTION  ,     citation=_CITATION  ,     inputs_description=_KWARGS_DESCRIPTION  ,     features=datasets.Features(
               {
                   "predictions": datasets.Value("int64"			)
                   if self.config_name != "cvit-mkb-clsr"
                   else datasets.Sequence(datasets.Value("float32"			)			),
                   "references": datasets.Value("int64"			)
                   if self.config_name != "cvit-mkb-clsr"
                   else datasets.Sequence(datasets.Value("float32"			)			),
               }			)  ,     codebase_urls=[]  ,     reference_urls=[]  ,     format="numpy" if self.config_name != "cvit-mkb-clsr" else None  ,     )





    def 				lowerCAmelCase__				(			self  :       str  ,     a  :       str  ,     a  :       Optional[int]			):






       '''simple docstring'''






       if self.config_name == "cvit-mkb-clsr":
          return {"precision@10": precision_at_aa(a  ,     a			)}
       elif self.config_name in ["wiki-ner"]:
          return acc_and_fa(a  ,     a			)
       elif self.config_name in [
           "wnli",
           "copa",
           "sna",
           "csqa",
           "wstp",
           "inltkh",
           "bbca",
           "iitp-mr",
           "iitp-pr",
           "actsa-sc",
           "md",
       ]:
          return {"accuracy": simple_accuracy(a  ,     a			)}
       else:
          raise KeyError(
              "You should supply a configuration name selected in "
              "[\"wnli\", \"copa\", \"sna\", \"csqa\", \"wstp\", \"inltkh\", \"bbca\", "
              "\"cvit-mkb-clsr\", \"iitp-mr\", \"iitp-pr\", \"actsa-sc\", \"md\", "
              "\"wiki-ner\"]"			)












'''simple docstring'''
from typing import List, Optional, Union

from ...processing_utils import ProcessorMixin
from ...tokenization_utils_base import BatchEncoding, PaddingStrategy, PreTokenizedInput, TextInput, TruncationStrategy
from ...utils import TensorType


class        _UpperCAmelCase						(		snake_case			):
    __lowerCamelCase:   str		       =    ['image_processor', 'tokenizer']
    __lowerCamelCase:   Dict		       =    'Pix2StructImageProcessor'
    __lowerCamelCase:   Union[str, Any]		       =    ('T5Tokenizer', 'T5TokenizerFast')




    def __init__(			self  :       str  ,     a  :       Dict  ,     a  :       List[str]			):






       '''simple docstring'''






       lowercase_	:    Optional[Any]           =     False
       super().__init__(a  ,     a			)




    def __call__(			self  :       Tuple  ,     a  :       int=None  ,     a  :       Union[TextInput, PreTokenizedInput, List[TextInput], List[PreTokenizedInput]] = None  ,     a  :       bool = True  ,     a  :       Union[bool, str, PaddingStrategy] = False  ,     a  :       Union[bool, str, TruncationStrategy] = None  ,     a  :       Optional[int] = None  ,     a  :       Optional[int] = 2_0_4_8  ,     a  :       int = 0  ,     a  :       Optional[int] = None  ,     a  :       Optional[bool] = None  ,     a  :       bool = False  ,     a  :       bool = False  ,     a  :       bool = False  ,     a  :       bool = False  ,     a  :       bool = False  ,     a  :       bool = True  ,     a  :       Optional[Union[str, TensorType]] = None  ,     **a  :       List[str]  ,     ):






       '''simple docstring'''






       if images is None and text is None:
          raise ValueError("You have to specify either images or text."			)

       # Get only text
       if images is None and not self.image_processor.is_vqa:
          lowercase_	:    Dict           =     self.tokenizer
          lowercase_	:    Tuple           =     self.tokenizer(
              text=a  ,     add_special_tokens=a  ,     padding=a  ,     truncation=a  ,     max_length=a  ,     stride=a  ,     pad_to_multiple_of=a  ,     return_attention_mask=a  ,     return_overflowing_tokens=a  ,     return_special_tokens_mask=a  ,     return_offsets_mapping=a  ,     return_token_type_ids=a  ,     return_length=a  ,     verbose=a  ,     return_tensors=a  ,     **a  ,     )
          return text_encoding

       if not self.image_processor.is_vqa:
          # add pixel_values
          lowercase_	:    Optional[int]           =     self.image_processor(
              a  ,     return_tensors=a  ,     max_patches=a  ,     **a			)
       else:
          # add pixel_values and bbox
          lowercase_	:    Any           =     self.image_processor(
              a  ,     return_tensors=a  ,     max_patches=a  ,     header_text=a  ,     **a			)

       if text is not None and not self.image_processor.is_vqa:
          lowercase_	:    int           =     self.tokenizer(
              text=a  ,     add_special_tokens=a  ,     padding=a  ,     truncation=a  ,     max_length=a  ,     stride=a  ,     pad_to_multiple_of=a  ,     return_attention_mask=a  ,     return_overflowing_tokens=a  ,     return_special_tokens_mask=a  ,     return_offsets_mapping=a  ,     return_token_type_ids=a  ,     return_length=a  ,     verbose=a  ,     return_tensors=a  ,     **a  ,     )

          if "attention_mask" in text_encoding:
             lowercase_	:    str           =     text_encoding.pop("attention_mask"			)
          if "input_ids" in text_encoding:
             lowercase_	:    Dict           =     text_encoding.pop("input_ids"			)
       else:
          lowercase_	:    str           =     None

       if text_encoding is not None:
          encoding_image_processor.update(a			)

       return encoding_image_processor




    def 				lowerCAmelCase__				(			self  :       Any  ,     *a  :       str  ,     **a  :       Tuple			):






       '''simple docstring'''






       return self.tokenizer.batch_decode(*a  ,     **a			)




    def 				lowerCAmelCase__				(			self  :       str  ,     *a  :       Optional[int]  ,     **a  :       Any			):






       '''simple docstring'''






       return self.tokenizer.decode(*a  ,     **a			)





    @property
    def 				lowerCAmelCase__				(			self  :       str			):






       '''simple docstring'''






       lowercase_	:    Tuple           =     self.tokenizer.model_input_names
       lowercase_	:    Dict           =     self.image_processor.model_input_names
       return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names			)			)




