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

import datasets


lowercase__							:							List[Any]									=			"\\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"

lowercase__							:							Tuple									=			"\\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"

lowercase__							:							Optional[Any]									=			"\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 	A_ (							snake_case							:   Optional[Any] ,      snake_case							:   Optional[int] )      ->    List[str]:



						'''simple docstring'''

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




def 	A_ (							snake_case							:   str ,      snake_case							:   Tuple )      ->    int:



						'''simple docstring'''

						__UpperCamelCase       =			simple_accuracy(snake_case ,      snake_case )
						__UpperCamelCase       =			float(fa_score(y_true=snake_case ,      y_pred=snake_case ) )
						return {
						    "accuracy": acc,
						    "f1": fa,
						}




def 	A_ (							snake_case							:   List[Any] ,      snake_case							:   Optional[int] )      ->    Tuple:



						'''simple docstring'''

						__UpperCamelCase       =			np.array(snake_case )
						__UpperCamelCase       =			np.array(snake_case )
						__UpperCamelCase       =			en_sentvecs.shape[0]

						# mean centering
						__UpperCamelCase       =			en_sentvecs - np.mean(snake_case ,      axis=0 )
						__UpperCamelCase       =			in_sentvecs - np.mean(snake_case ,      axis=0 )

						__UpperCamelCase       =			cdist(snake_case ,      snake_case ,      '''cosine''' )
						__UpperCamelCase       =			np.array(range(snake_case ) )
						__UpperCamelCase       =			sim.argsort(axis=1 )[:, :10]
						__UpperCamelCase       =			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    ):

							"""simple docstring"""






							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     ,	SCREAMING_SNAKE_CASE_     ,	SCREAMING_SNAKE_CASE_			)->   Optional[Any]:





													'''simple docstring'''






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






from collections import OrderedDict
from typing import Mapping

from packaging import version

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig
from ...utils import logging
from ..auto import CONFIG_MAPPING


lowercase__							:							Tuple									=			logging.get_logger(__name__)

lowercase__							:							int									=			{
    "microsoft/table-transformer-detection": (
        "https://huggingface.co/microsoft/table-transformer-detection/resolve/main/config.json"
    ),
}






class        SCREAMING_SNAKE_CASE__    (							SCREAMING_SNAKE_CASE_    ):

							"""simple docstring"""






							_snake_case     		=  'table-transformer'
							_snake_case     		=  ['past_key_values']
							_snake_case     		=  {
							    'hidden_size': 'd_model',
							    'num_attention_heads': 'encoder_attention_heads',
							}



							def __init__(  self     ,	SCREAMING_SNAKE_CASE_=True     ,	SCREAMING_SNAKE_CASE_=None     ,	SCREAMING_SNAKE_CASE_=3     ,	SCREAMING_SNAKE_CASE_=100     ,	SCREAMING_SNAKE_CASE_=6     ,	SCREAMING_SNAKE_CASE_=2048     ,	SCREAMING_SNAKE_CASE_=8     ,	SCREAMING_SNAKE_CASE_=6     ,	SCREAMING_SNAKE_CASE_=2048     ,	SCREAMING_SNAKE_CASE_=8     ,	SCREAMING_SNAKE_CASE_=0.0     ,	SCREAMING_SNAKE_CASE_=0.0     ,	SCREAMING_SNAKE_CASE_=True     ,	SCREAMING_SNAKE_CASE_="relu"     ,	SCREAMING_SNAKE_CASE_=256     ,	SCREAMING_SNAKE_CASE_=0.1     ,	SCREAMING_SNAKE_CASE_=0.0     ,	SCREAMING_SNAKE_CASE_=0.0     ,	SCREAMING_SNAKE_CASE_=0.0_2     ,	SCREAMING_SNAKE_CASE_=1.0     ,	SCREAMING_SNAKE_CASE_=False     ,	SCREAMING_SNAKE_CASE_="sine"     ,	SCREAMING_SNAKE_CASE_="resnet50"     ,	SCREAMING_SNAKE_CASE_=True     ,	SCREAMING_SNAKE_CASE_=False     ,	SCREAMING_SNAKE_CASE_=1     ,	SCREAMING_SNAKE_CASE_=5     ,	SCREAMING_SNAKE_CASE_=2     ,	SCREAMING_SNAKE_CASE_=1     ,	SCREAMING_SNAKE_CASE_=1     ,	SCREAMING_SNAKE_CASE_=5     ,	SCREAMING_SNAKE_CASE_=2     ,	SCREAMING_SNAKE_CASE_=0.1     ,	**SCREAMING_SNAKE_CASE_     ,	)->   Tuple:





													'''simple docstring'''






													if backbone_config is not None and use_timm_backbone:
																			raise ValueError('''You can\'t specify both `backbone_config` and `use_timm_backbone`.'''			)

													if not use_timm_backbone:
																			if backbone_config is None:
																									logger.info('''`backbone_config` is `None`. Initializing the config with the default `ResNet` backbone.'''			)
																									__UpperCamelCase       =			CONFIG_MAPPING['''resnet'''](out_features=['''stage4''']			)
																			elif isinstance(SCREAMING_SNAKE_CASE_     ,	SCREAMING_SNAKE_CASE_			):
																									__UpperCamelCase       =			backbone_config.get('''model_type'''			)
																									__UpperCamelCase       =			CONFIG_MAPPING[backbone_model_type]
																									__UpperCamelCase       =			config_class.from_dict(SCREAMING_SNAKE_CASE_			)
																			# set timm attributes to None
																			__UpperCamelCase  ,							__UpperCamelCase  ,							__UpperCamelCase       =			None, None, None

													__UpperCamelCase       =			use_timm_backbone
													__UpperCamelCase       =			backbone_config
													__UpperCamelCase       =			num_channels
													__UpperCamelCase       =			num_queries
													__UpperCamelCase       =			d_model
													__UpperCamelCase       =			encoder_ffn_dim
													__UpperCamelCase       =			encoder_layers
													__UpperCamelCase       =			encoder_attention_heads
													__UpperCamelCase       =			decoder_ffn_dim
													__UpperCamelCase       =			decoder_layers
													__UpperCamelCase       =			decoder_attention_heads
													__UpperCamelCase       =			dropout
													__UpperCamelCase       =			attention_dropout
													__UpperCamelCase       =			activation_dropout
													__UpperCamelCase       =			activation_function
													__UpperCamelCase       =			init_std
													__UpperCamelCase       =			init_xavier_std
													__UpperCamelCase       =			encoder_layerdrop
													__UpperCamelCase       =			decoder_layerdrop
													__UpperCamelCase       =			encoder_layers
													__UpperCamelCase       =			auxiliary_loss
													__UpperCamelCase       =			position_embedding_type
													__UpperCamelCase       =			backbone
													__UpperCamelCase       =			use_pretrained_backbone
													__UpperCamelCase       =			dilation
													# Hungarian matcher
													__UpperCamelCase       =			class_cost
													__UpperCamelCase       =			bbox_cost
													__UpperCamelCase       =			giou_cost
													# Loss coefficients
													__UpperCamelCase       =			mask_loss_coefficient
													__UpperCamelCase       =			dice_loss_coefficient
													__UpperCamelCase       =			bbox_loss_coefficient
													__UpperCamelCase       =			giou_loss_coefficient
													__UpperCamelCase       =			eos_coefficient
													super().__init__(is_encoder_decoder=SCREAMING_SNAKE_CASE_     ,	**SCREAMING_SNAKE_CASE_			)



							@property
							def     A__		(  self			)->   int:





													'''simple docstring'''






													return self.encoder_attention_heads



							@property
							def     A__		(  self			)->   int:





													'''simple docstring'''






													return self.d_model






class        SCREAMING_SNAKE_CASE__    (							SCREAMING_SNAKE_CASE_    ):

							"""simple docstring"""






							_snake_case     		=  version.parse('1.11'    )



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





													'''simple docstring'''






													return OrderedDict(
													    [
													        ('''pixel_values''', {0: '''batch''', 1: '''num_channels''', 2: '''height''', 3: '''width'''}),
													        ('''pixel_mask''', {0: '''batch'''}),
													    ]			)



							@property
							def     A__		(  self			)->   float:





													'''simple docstring'''






													return 1E-5



							@property
							def     A__		(  self			)->   int:





													'''simple docstring'''






													return 12




