




import numpy as np

import datasets


lowercase__				:      Union[str, Any]	   = "\nCompute the Mahalanobis Distance\n\nMahalonobis distance is the distance between a point and a distribution.\nAnd not between two distinct points. It is effectively a multivariate equivalent of the Euclidean distance.\nIt was introduced by Prof. P. C. Mahalanobis in 1936\nand has been used in various statistical applications ever since\n[source: https://www.machinelearningplus.com/statistics/mahalanobis-distance/]\n"

lowercase__				:      Optional[Any]	   = "\\n@article{de2000mahalanobis,\n  title={The mahalanobis distance},\n  author={De Maesschalck, Roy and Jouan-Rimbaud, Delphine and Massart, D{\'e}sir{\'e} L},\n  journal={Chemometrics and intelligent laboratory systems},\n  volume={50},\n  number={1},\n  pages={1--18},\n  year={2000},\n  publisher={Elsevier}\n}\n"

lowercase__				:      List[str]	   = "\nArgs:\n    X: List of datapoints to be compared with the `reference_distribution`.\n    reference_distribution: List of datapoints from the reference distribution we want to compare to.\nReturns:\n    mahalanobis: The Mahalonobis distance for each datapoint in `X`.\nExamples:\n\n    >>> mahalanobis_metric = datasets.load_metric(\"mahalanobis\")\n    >>> results = mahalanobis_metric.compute(reference_distribution=[[0, 1], [1, 0]], X=[[0, 1]])\n    >>> print(results)\n    {'mahalanobis': array([0.5])}\n"




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







					def       lowerCAmelCase_    (     self			)  ->   int:



										'''simple docstring'''



										return datasets.MetricInfo(
										    description=_DESCRIPTION  ,		citation=_CITATION  ,		inputs_description=_KWARGS_DESCRIPTION  ,		features=datasets.Features(
										        {
										            "X": datasets.Sequence(datasets.Value("float"  ,		id="sequence"			)  ,		id="X"			),
										        }			)  ,		)







					def       lowerCAmelCase_    (     self  ,		A  ,		A			)  ->   int:



										'''simple docstring'''



										a     =				np.array(A			)
										a     =				np.array(A			)

										# Assert that arrays are 2D
										if len(X.shape			) != 2:
															raise ValueError("Expected `X` to be a 2D vector"			)
										if len(reference_distribution.shape			) != 2:
															raise ValueError("Expected `reference_distribution` to be a 2D vector"			)
										if reference_distribution.shape[0] < 2:
															raise ValueError(
															    "Expected `reference_distribution` to be a 2D vector with more than one element in the first dimension"			)

										# Get mahalanobis distance for each prediction
										a     =				X - np.mean(A			)
										a     =				np.cov(reference_distribution.T			)
										try:
															a     =				np.linalg.inv(A			)
										except np.linalg.LinAlgError:
															a     =				np.linalg.pinv(A			)
										a     =				np.dot(A  ,		A			)
										a     =				np.dot(A  ,		X_minus_mu.T			).diagonal()

										return {"mahalanobis": mahal_dist}







lowercase__				:      str	   = "\n# Installazione di Transformers\n! pip install transformers datasets\n# Per installare dalla fonte invece dell'ultima versione rilasciata, commenta il comando sopra e\n# rimuovi la modalità commento al comando seguente.\n# ! pip install git+https://github.com/huggingface/transformers.git\n"

lowercase__				:      Any	   = [{"type": "code", "content": INSTALL_CONTENT}]
lowercase__				:      Any	   = {
    "{processor_class}": "FakeProcessorClass",
    "{model_class}": "FakeModelClass",
    "{object_class}": "FakeObjectClass",
}

