






import argparse
import datetime






def     a     (		lowerCamelCase_							):






				'''simple docstring'''
				lowercase__  					=     {
				    '''0''': '''Sunday''',
				    '''1''': '''Monday''',
				    '''2''': '''Tuesday''',
				    '''3''': '''Wednesday''',
				    '''4''': '''Thursday''',
				    '''5''': '''Friday''',
				    '''6''': '''Saturday''',
				}

				lowercase__  					=     {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 0}

				# Validate
				if not 0 < len(lowerCamelCase_							) < 11:
								raise ValueError('''Must be 10 characters long'''							)

				# Get month
				lowercase__  					=     int(date_input[0] + date_input[1]							)
				# Validate
				if not 0 < m < 13:
								raise ValueError('''Month must be between 1 - 12'''							)

				lowercase__  					=     date_input[2]
				# Validate
				if sep_a not in ["-", "/"]:
								raise ValueError('''Date separator must be \'-\' or \'/\''''							)

				# Get day
				lowercase__  					=     int(date_input[3] + date_input[4]							)
				# Validate
				if not 0 < d < 32:
								raise ValueError('''Date must be between 1 - 31'''							)

				# Get second separator
				lowercase__  					=     date_input[5]
				# Validate
				if sep_a not in ["-", "/"]:
								raise ValueError('''Date separator must be \'-\' or \'/\''''							)

				# Get year
				lowercase__  					=     int(date_input[6] + date_input[7] + date_input[8] + date_input[9]							)
				# Arbitrary year range
				if not 45 < y < 8500:
								raise ValueError(
								    '''Year out of range. There has to be some sort of limit...right?'''							)

				# Get datetime obj for validation
				lowercase__  					=     datetime.date(int(lowerCamelCase_							)						,  int(lowerCamelCase_							)						,  int(lowerCamelCase_							)							)

				# Start math
				if m <= 2:
								lowercase__  					=     y - 1
								lowercase__  					=     m + 12
				# maths var
				lowercase__  					=     int(str(lowerCamelCase_							)[:2]							)
				lowercase__  					=     int(str(lowerCamelCase_							)[2:]							)
				lowercase__  					=     int(2.6 * m - 5.39							)
				lowercase__  					=     int(c / 4							)
				lowercase__  					=     int(k / 4							)
				lowercase__  					=     int(d + k							)
				lowercase__  					=     int(t + u + v + x							)
				lowercase__  					=     int(z - (2 * c)							)
				lowercase__  					=     round(w % 7							)
				# End math

				# Validate math
				if f != convert_datetime_days[dt_ck.weekday()]:
								raise AssertionError('''The date was evaluated incorrectly. Contact developer.'''							)

				# Response
				lowercase__  					=     F"""Your date {date_input}, is a {days[str(lowerCamelCase_							)]}!"""
				return response


if __name__ == "__main__":
							import doctest

							doctest.testmod()
							A__      :     List[Any]       =					argparse.ArgumentParser(
							    description=(
							        'Find out what day of the week nearly any date is or was. Enter '
							        'date as a string in the mm-dd-yyyy or mm/dd/yyyy format'
							    )
							)
							parser.add_argument(
							    'date_input', type=str, help='Date as a string (mm-dd-yyyy or mm/dd/yyyy)'
							)
							A__      :     Union[str, Any]       =					parser.parse_args()
							zeller(args.date_input)












import numpy as np

import datasets


A__      :     int       =					'\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'

A__      :     Optional[int]       =					'\\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'

A__      :     Optional[int]       =					'\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  _UpperCAmelCase   (			datasets.Metric      ):

				"""simple docstring"""




				def 							lowercase__  (	self		:       str    ):

								'''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 							lowercase__  (	self		:       Dict,    lowerCamelCase		:       int,    lowerCamelCase		:       Optional[int]    ):

								'''simple docstring'''
								# convert to numpy arrays
								lowercase__  					=     np.array(lowerCamelCase    )
								lowercase__  					=     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
								lowercase__  					=     X - np.mean(lowerCamelCase    )
								lowercase__  					=     np.cov(reference_distribution.T    )
								try:
												lowercase__  					=     np.linalg.inv(lowerCamelCase    )
								except np.linalg.LinAlgError:
												lowercase__  					=     np.linalg.pinv(lowerCamelCase    )
								lowercase__  					=     np.dot(lowerCamelCase,    lowerCamelCase    )
								lowercase__  					=     np.dot(lowerCamelCase,    X_minus_mu.T    ).diagonal()

								return {"mahalanobis": mahal_dist}




