

from __future__ import annotations

import typing
from collections.abc import Iterable

import numpy as np

_lowerCamelCase    :       Optional[Any]        =							typing.Union[Iterable[float], Iterable[int], np.ndarray]  # noqa: UP007
_lowerCamelCase    :       Optional[int]        =							typing.Union[np.floataa, int, float]  # noqa: UP007

def       a__					(		UpperCAmelCase							:      Vector    ,			UpperCAmelCase							:      Vector      )  ->						Optional[Any]:
		return np.sqrt(np.sum((np.asarray(__lowerCamelCase      ) - np.asarray(__lowerCamelCase      )) ** 2      )      )

def       a__					(		UpperCAmelCase							:      Vector    ,			UpperCAmelCase							:      Vector      )  ->						List[Any]:
		return sum((va - va) ** 2 for va, va in zip(__lowerCamelCase    ,			__lowerCamelCase      )      ) ** (1 / 2)


if __name__ == "__main__":

					def       a__					(		)  ->						Optional[int]:
							from timeit import timeit

							print('''Without Numpy'''      )
							print(
							    timeit(
							        '''euclidean_distance_no_np([1, 2, 3], [4, 5, 6])'''    ,			number=10_000    ,			globals=globals()    ,			)      )
							print('''With Numpy'''      )
							print(
							    timeit(
							        '''euclidean_distance([1, 2, 3], [4, 5, 6])'''    ,			number=10_000    ,			globals=globals()    ,			)      )






					benchmark()








def       a__					(		UpperCAmelCase							:      int      )  ->						bool:
  if not isinstance(UpperCAmelCase    ,			UpperCAmelCase      ):
    UpperCAmelCase	:							List[str]						=			f'''Input value of [number={number}] must be an integer'''
    raise TypeError(UpperCAmelCase      )
  if number < 0:
    return False
  UpperCAmelCase	:							List[str]						=			number * number
  while number > 0:
    if number % 10 != number_square % 10:
      return False
    number //= 10
    number_square //= 10
  return True


if __name__ == "__main__":
     import doctest

     doctest.testmod()





