




'''simple docstring'''


import numpy as np

import datasets


_snake_case   :   Optional[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'

_snake_case   :   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'

_snake_case   :   Dict     							=	'\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 :						List[str]      )    ->							Dict:


														"""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 :						Optional[Any]							,    lowerCAmelCase_ :						Tuple							,    lowerCAmelCase_ :						Optional[int]      )    ->							Optional[Any]:


														"""simple docstring"""


														_a			  =       np.array(lowerCAmelCase_      )
														_a			  =       np.array(lowerCAmelCase_      )

														# 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(lowerCAmelCase_      )
														_a			  =       np.cov(reference_distribution.T      )
														try:
																					_a			  =       np.linalg.inv(lowerCAmelCase_      )
														except np.linalg.LinAlgError:
																					_a			  =       np.linalg.pinv(lowerCAmelCase_      )
														_a			  =       np.dot(lowerCAmelCase_							,    lowerCAmelCase_      )
														_a			  =       np.dot(lowerCAmelCase_							,    X_minus_mu.T      ).diagonal()

														return {"mahalanobis": mahal_dist}







'''simple docstring'''


import os

import pytest

from transformers.dynamic_module_utils import get_imports


_snake_case   :   List[str]     							=	'\nimport os\n'

_snake_case   :   Dict     							=	'\ndef foo():\n    import os\n    return False\n'

_snake_case   :   List[Any]     							=	'\ndef foo():\n    def bar():\n        if True:\n            import os\n        return False\n    return bar()\n'

_snake_case   :   Dict     							=	'\nimport os\n\ntry:\n    import bar\nexcept ImportError:\n    raise ValueError()\n'

_snake_case   :   Optional[Any]     							=	'\nimport os\n\ndef foo():\n    try:\n        import bar\n    except ImportError:\n        raise ValueError()\n'

_snake_case   :   Optional[Any]     							=	'\nimport os\n\ntry:\n    import bar\nexcept (ImportError, AttributeError):\n    raise ValueError()\n'

_snake_case   :   Any     							=	'\nimport os\n\ntry:\n    import bar\nexcept ImportError as e:\n    raise ValueError()\n'

_snake_case   :   List[str]     							=	'\nimport os\n\ntry:\n    import bar\nexcept:\n    raise ValueError()\n'

_snake_case   :   Dict     							=	'\nimport os\n\ntry:\n    import bar\n    import baz\nexcept ImportError:\n    raise ValueError()\n'

_snake_case   :   Any     							=	'\nimport os\n\ntry:\n    import bar\n    import baz\nexcept ImportError:\n    x = 1\n    raise ValueError()\n'

_snake_case   :   Union[str, Any]     							=	[
    TOP_LEVEL_IMPORT,
    IMPORT_IN_FUNCTION,
    DEEPLY_NESTED_IMPORT,
    TOP_LEVEL_TRY_IMPORT,
    GENERIC_EXCEPT_IMPORT,
    MULTILINE_TRY_IMPORT,
    MULTILINE_BOTH_IMPORT,
    MULTIPLE_EXCEPTS_IMPORT,
    EXCEPT_AS_IMPORT,
    TRY_IMPORT_IN_FUNCTION,
]
@pytest.mark.parametrize('''case'''				,		UpperCamelCase   )
def 	snake_case_					(UpperCamelCase :						str				,		UpperCamelCase :						List[Any]   ):





							'''simple docstring'''


							_a			  =       os.path.join(UpperCamelCase				,		'''test_file.py'''   )
							with open(UpperCamelCase				,		'''w'''   ) as _tmp_file:
														_tmp_file.write(UpperCamelCase   )

							_a			  =       get_imports(UpperCamelCase   )
							assert parsed_imports == ["os"]

