





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

import datasets


snake_case_           =      '\\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'

snake_case_           =      '\\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'

snake_case_           =      '\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 lowerCamelCase__   (							snake_case_     :  Union[str, Any]	,				snake_case_     :  Any	)				->    int:
   return float((preds == labels).mean()	)






def lowerCamelCase__   (							snake_case_     :  str	,				snake_case_     :  Optional[int]	)				->    Optional[Any]:
   __snake_case								=       simple_accuracy(lowerCamelCase_	,				lowerCamelCase_	)
   __snake_case								=       float(fa_score(y_true=lowerCamelCase_	,				y_pred=lowerCamelCase_	)	)
   return {
       "accuracy": acc,
       "f1": fa,
   }






def lowerCamelCase__   (							snake_case_     :  Optional[int]	,				snake_case_     :  Tuple	)				->    int:
   __snake_case								=       np.array(lowerCamelCase_	)
   __snake_case								=       np.array(lowerCamelCase_	)
   __snake_case								=       en_sentvecs.shape[0]

   # mean centering
   __snake_case								=       en_sentvecs - np.mean(lowerCamelCase_	,				axis=0	)
   __snake_case								=       in_sentvecs - np.mean(lowerCamelCase_	,				axis=0	)

   __snake_case								=       cdist(lowerCamelCase_	,				lowerCamelCase_	,				'''cosine'''	)
   __snake_case								=       np.array(range(lowerCamelCase_	)	)
   __snake_case								=       sim.argsort(axis=1	)[:, :10]
   __snake_case								=       np.any(preds == actual[:, None]	,				axis=1	)
   return float(matches.mean()	)







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


      def        a			(self	:				List[Any]				):





         """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        a			(self	:				int    ,      a__	:				List[Any]    ,      a__	:				Union[str, Any]				):





         """simple docstring"""



         if self.config_name == "cvit-mkb-clsr":
            return {"precision@10": precision_at_aa(__lowerCamelCase    ,      __lowerCamelCase				)}
         elif self.config_name in ["wiki-ner"]:
            return acc_and_fa(__lowerCamelCase    ,      __lowerCamelCase				)
         elif self.config_name in [
             "wnli",
             "copa",
             "sna",
             "csqa",
             "wstp",
             "inltkh",
             "bbca",
             "iitp-mr",
             "iitp-pr",
             "actsa-sc",
             "md",
         ]:
            return {"accuracy": simple_accuracy(__lowerCamelCase    ,      __lowerCamelCase				)}
         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"]'''				)








# Algorithm for the pigeonhole sorting








def lowerCamelCase__   (							snake_case_     :  int	)				->    Optional[int]:
   __snake_case								=       min(snake_case_	)  # min() finds the minimum value
   __snake_case								=       max(snake_case_	)  # max() finds the maximum value

   __snake_case								=       max_val - min_val + 1  # size is difference of max and min values plus one

   # list of pigeonholes of size equal to the variable size
   __snake_case								=       [0] * size

   # Populate the pigeonholes.
   for x in a:
      assert isinstance(snake_case_	,				snake_case_	), "integers only please"
      holes[x - min_val] += 1

   # Putting the elements back into the array in an order.
   __snake_case								=       0
   for count in range(snake_case_	):
      while holes[count] > 0:
         holes[count] -= 1
         __snake_case								=       count + min_val
         i += 1






def lowerCamelCase__   (							)				->    Union[str, Any]:
   __snake_case								=       [8, 3, 2, 7, 4, 6, 8]
   pigeonhole_sort(snake_case_	)
   print('''Sorted order is:'''	,				''' '''.join(snake_case_	)	)


if __name__ == "__main__":
    main()

