



'''simple docstring'''
from sklearn.metrics import fa_score, matthews_corrcoef

import datasets

from .record_evaluation import evaluate as evaluate_record


snake_case_					:      List[Any]    			=    '\\n@article{wang2019superglue,\n  title={SuperGLUE: A Stickier Benchmark for General-Purpose Language Understanding Systems},\n  author={Wang, Alex and Pruksachatkun, Yada and Nangia, Nikita and Singh, Amanpreet and Michael, Julian and Hill, Felix and Levy, Omer and Bowman, Samuel R},\n  journal={arXiv preprint arXiv:1905.00537},\n  year={2019}\n}\n'

snake_case_					:      List[str]    			=    '\\nSuperGLUE (https://super.gluebenchmark.com/) is a new benchmark styled after\nGLUE with a new set of more difficult language understanding tasks, improved\nresources, and a new public leaderboard.\n'

snake_case_					:      Union[str, Any]    			=    '\nCompute SuperGLUE evaluation metric associated to each SuperGLUE dataset.\nArgs:\n    predictions: list of predictions to score. Depending on the SuperGlUE subset:\n        - for \'record\': list of question-answer dictionaries with the following keys:\n            - \'idx\': index of the question as specified by the dataset\n            - \'prediction_text\': the predicted answer text\n        - for \'multirc\': list of question-answer dictionaries with the following keys:\n            - \'idx\': index of the question-answer pair as specified by the dataset\n            - \'prediction\': the predicted answer label\n        - otherwise: list of predicted labels\n    references: list of reference labels. Depending on the SuperGLUE subset:\n        - for \'record\': list of question-answers dictionaries with the following keys:\n            - \'idx\': index of the question as specified by the dataset\n            - \'answers\': list of possible answers\n        - otherwise: list of reference labels\nReturns: depending on the SuperGLUE subset:\n    - for \'record\':\n        - \'exact_match\': Exact match between answer and gold answer\n        - \'f1\': F1 score\n    - for \'multirc\':\n        - \'exact_match\': Exact match between answer and gold answer\n        - \'f1_m\': Per-question macro-F1 score\n        - \'f1_a\': Average F1 score over all answers\n    - for \'axb\':\n        \'matthews_correlation\': Matthew Correlation\n    - for \'cb\':\n        - \'accuracy\': Accuracy\n        - \'f1\': F1 score\n    - for all others:\n        - \'accuracy\': Accuracy\nExamples:\n\n    >>> super_glue_metric = datasets.load_metric(\'super_glue\', \'copa\')  # any of ["copa", "rte", "wic", "wsc", "wsc.fixed", "boolq", "axg"]\n    >>> predictions = [0, 1]\n    >>> references = [0, 1]\n    >>> results = super_glue_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {\'accuracy\': 1.0}\n\n    >>> super_glue_metric = datasets.load_metric(\'super_glue\', \'cb\')\n    >>> predictions = [0, 1]\n    >>> references = [0, 1]\n    >>> results = super_glue_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {\'accuracy\': 1.0, \'f1\': 1.0}\n\n    >>> super_glue_metric = datasets.load_metric(\'super_glue\', \'record\')\n    >>> predictions = [{\'idx\': {\'passage\': 0, \'query\': 0}, \'prediction_text\': \'answer\'}]\n    >>> references = [{\'idx\': {\'passage\': 0, \'query\': 0}, \'answers\': [\'answer\', \'another_answer\']}]\n    >>> results = super_glue_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {\'exact_match\': 1.0, \'f1\': 1.0}\n\n    >>> super_glue_metric = datasets.load_metric(\'super_glue\', \'multirc\')\n    >>> predictions = [{\'idx\': {\'answer\': 0, \'paragraph\': 0, \'question\': 0}, \'prediction\': 0}, {\'idx\': {\'answer\': 1, \'paragraph\': 2, \'question\': 3}, \'prediction\': 1}]\n    >>> references = [0, 1]\n    >>> results = super_glue_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {\'exact_match\': 1.0, \'f1_m\': 1.0, \'f1_a\': 1.0}\n\n    >>> super_glue_metric = datasets.load_metric(\'super_glue\', \'axb\')\n    >>> references = [0, 1]\n    >>> predictions = [0, 1]\n    >>> results = super_glue_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {\'matthews_correlation\': 1.0}\n'






def A__       (	UpperCAmelCase_    ,    UpperCAmelCase_				):
						return float((preds == labels).mean()				)






def A__       (	UpperCAmelCase_    ,    UpperCAmelCase_    ,    UpperCAmelCase_="binary"				):
						_UpperCamelCase   :						Optional[Any]												=  simple_accuracy(UpperCAmelCase_    ,    UpperCAmelCase_				)
						_UpperCamelCase   :						Any												=  float(fa_score(y_true=UpperCAmelCase_    ,    y_pred=UpperCAmelCase_    ,    average=UpperCAmelCase_				)				)
						return {
						    "accuracy": acc,
						    "f1": fa,
						}






def A__       (	UpperCAmelCase_    ,    UpperCAmelCase_				):
						_UpperCamelCase   :						Dict												=  {}
						for id_pred, label in zip(UpperCAmelCase_    ,    UpperCAmelCase_				):
												_UpperCamelCase   :						str												=  f'{id_pred["idx"]["paragraph"]}-{id_pred["idx"]["question"]}'
												_UpperCamelCase   :						List[Any]												=  id_pred['prediction']
												if question_id in question_map:
																		question_map[question_id].append((pred, label)				)
												else:
																		_UpperCamelCase   :						Union[str, Any]												=  [(pred, label)]
						_UpperCamelCase							,     _UpperCamelCase   :						List[str]												=  [], []
						for question, preds_labels in question_map.items():
												_UpperCamelCase							,     _UpperCamelCase   :						Optional[Any]												=  zip(*UpperCAmelCase_				)
												_UpperCamelCase   :						List[str]												=  fa_score(y_true=UpperCAmelCase_    ,    y_pred=UpperCAmelCase_    ,    average='macro'				)
												fas.append(UpperCAmelCase_				)
												_UpperCamelCase   :						Dict												=  int(sum(pred == label for pred, label in preds_labels				) == len(UpperCAmelCase_				)				)
												ems.append(UpperCAmelCase_				)
						_UpperCamelCase   :						int												=  float(sum(UpperCAmelCase_				) / len(UpperCAmelCase_				)				)
						_UpperCamelCase   :						Optional[int]												=  sum(UpperCAmelCase_				) / len(UpperCAmelCase_				)
						_UpperCamelCase   :						Tuple												=  float(fa_score(y_true=UpperCAmelCase_    ,    y_pred=[id_pred['prediction'] for id_pred in ids_preds]				)				)
						return {"exact_match": em, "f1_m": fa_m, "f1_a": fa_a}






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





	def       UpperCamelCase_    (					self   :							Tuple					):







							'''simple docstring'''
							if self.config_name not in [
							    "boolq",
							    "cb",
							    "copa",
							    "multirc",
							    "record",
							    "rte",
							    "wic",
							    "wsc",
							    "wsc.fixed",
							    "axb",
							    "axg",
							]:
													raise KeyError(
													    'You should supply a configuration name selected in '
													    '["boolq", "cb", "copa", "multirc", "record", "rte", "wic", "wsc", "wsc.fixed", "axb", "axg",]'					)
							return datasets.MetricInfo(
							    description=_DESCRIPTION					,citation=_CITATION					,inputs_description=_KWARGS_DESCRIPTION					,features=datasets.Features(self._get_feature_types()					)					,codebase_urls=[]					,reference_urls=[]					,format='numpy' if not self.config_name == 'record' and not self.config_name == 'multirc' else None					,)





	def       UpperCamelCase_    (					self   :							Dict					):







							'''simple docstring'''
							if self.config_name == "record":
													return {
													    "predictions": {
													        "idx": {
													            "passage": datasets.Value('int64'					),
													            "query": datasets.Value('int64'					),
													        },
													        "prediction_text": datasets.Value('string'					),
													    },
													    "references": {
													        "idx": {
													            "passage": datasets.Value('int64'					),
													            "query": datasets.Value('int64'					),
													        },
													        "answers": datasets.Sequence(datasets.Value('string'					)					),
													    },
													}
							elif self.config_name == "multirc":
													return {
													    "predictions": {
													        "idx": {
													            "answer": datasets.Value('int64'					),
													            "paragraph": datasets.Value('int64'					),
													            "question": datasets.Value('int64'					),
													        },
													        "prediction": datasets.Value('int64'					),
													    },
													    "references": datasets.Value('int64'					),
													}
							else:
													return {
													    "predictions": datasets.Value('int64'					),
													    "references": datasets.Value('int64'					),
													}





	def       UpperCamelCase_    (					self   :							List[Any]					,lowerCamelCase__   :							Dict					,lowerCamelCase__   :							Optional[Any]					):







							'''simple docstring'''
							if self.config_name == "axb":
													return {"matthews_correlation": matthews_corrcoef(lowerCamelCase__					,lowerCamelCase__					)}
							elif self.config_name == "cb":
													return acc_and_fa(lowerCamelCase__					,lowerCamelCase__					,fa_avg='macro'					)
							elif self.config_name == "record":
													_UpperCamelCase   :						List[Any]												=  [
													    {
													        'qas': [
													            {'id': ref['idx']['query'], 'answers': [{'text': ans} for ans in ref['answers']]}
													            for ref in references
													        ]
													    }
													]
													_UpperCamelCase   :						Tuple												=  {pred['idx']['query']: pred['prediction_text'] for pred in predictions}
													return evaluate_record(lowerCamelCase__					,lowerCamelCase__					)[0]
							elif self.config_name == "multirc":
													return evaluate_multirc(lowerCamelCase__					,lowerCamelCase__					)
							elif self.config_name in ["copa", "rte", "wic", "wsc", "wsc.fixed", "boolq", "axg"]:
													return {"accuracy": simple_accuracy(lowerCamelCase__					,lowerCamelCase__					)}
							else:
													raise KeyError(
													    'You should supply a configuration name selected in '
													    '["boolq", "cb", "copa", "multirc", "record", "rte", "wic", "wsc", "wsc.fixed", "axb", "axg",]'					)







'''simple docstring'''
import os
from pathlib import Path






def A__       (	):
						from torch.utils.cpp_extension import load

						_UpperCamelCase   :						Optional[Any]												=  Path(UpperCAmelCase_				).resolve().parent.parent.parent / 'kernels' / 'deformable_detr'
						_UpperCamelCase   :						Tuple												=  [
						    root / filename
						    for filename in [
						        'vision.cpp',
						        os.path.join('cpu'    ,    'ms_deform_attn_cpu.cpp'				),
						        os.path.join('cuda'    ,    'ms_deform_attn_cuda.cu'				),
						    ]
						]

						load(
						    'MultiScaleDeformableAttention'    ,    UpperCAmelCase_    ,    with_cuda=UpperCAmelCase_    ,    extra_include_paths=[str(UpperCAmelCase_				)]    ,    extra_cflags=['-DWITH_CUDA=1']    ,    extra_cuda_cflags=[
						        '-DCUDA_HAS_FP16=1',
						        '-D__CUDA_NO_HALF_OPERATORS__',
						        '-D__CUDA_NO_HALF_CONVERSIONS__',
						        '-D__CUDA_NO_HALF2_OPERATORS__',
						    ]    ,    )

						import MultiScaleDeformableAttention as MSDA

						return MSDA


