


'''simple docstring'''






__UpperCAmelCase       							=				{
    '''meter''': '''m''',
    '''kilometer''': '''km''',
    '''megametre''': '''Mm''',
    '''gigametre''': '''Gm''',
    '''terametre''': '''Tm''',
    '''petametre''': '''Pm''',
    '''exametre''': '''Em''',
    '''zettametre''': '''Zm''',
    '''yottametre''': '''Ym''',
}
# Exponent of the factor(meter)
__UpperCAmelCase       							=				{
    '''m''': 0,
    '''km''': 3,
    '''Mm''': 6,
    '''Gm''': 9,
    '''Tm''': 12,
    '''Pm''': 15,
    '''Em''': 18,
    '''Zm''': 21,
    '''Ym''': 24,
}


def    _snake_case  (	A					,       A					,       A			)		->       float:
							lowerCAmelCase__			  =      from_type.lower().strip('''s'''			)
							lowerCAmelCase__			  =      to_type.lower().strip('''s'''			)

							lowerCAmelCase__			  =      UNIT_SYMBOL.get(A					,       A			)
							lowerCAmelCase__			  =      UNIT_SYMBOL.get(A					,       A			)

							if from_sanitized not in METRIC_CONVERSION:
														lowerCAmelCase__			  =      (
														    F"""Invalid 'from_type' value: {from_type!r}.\n"""
														    F"""Conversion abbreviations are: {", ".join(A			)}"""
														)
														raise ValueError(A			)
							if to_sanitized not in METRIC_CONVERSION:
														lowerCAmelCase__			  =      (
														    F"""Invalid 'to_type' value: {to_type!r}.\n"""
														    F"""Conversion abbreviations are: {", ".join(A			)}"""
														)
														raise ValueError(A			)
							lowerCAmelCase__			  =      METRIC_CONVERSION[from_sanitized]
							lowerCAmelCase__			  =      METRIC_CONVERSION[to_sanitized]
							lowerCAmelCase__			  =      1

							if from_exponent > to_exponent:
														lowerCAmelCase__			  =      from_exponent - to_exponent
							else:
														lowerCAmelCase__			  =      -(to_exponent - from_exponent)

							return value * pow(10					,       A			)


if __name__ == "__main__":
		from doctest import testmod

		testmod()



'''simple docstring'''






import sys

from .dependency_versions_table import deps
from .utils.versions import require_version, require_version_core


# define which module versions we always want to check at run time
# (usually the ones defined in `install_requires` in setup.py)
#
# order specific notes:
# - tqdm must be checked before tokenizers

__UpperCAmelCase       							=				'''python tqdm regex requests packaging filelock numpy tokenizers'''.split()
if sys.version_info < (3, 7):
		pkgs_to_check_at_runtime.append('''dataclasses''')
if sys.version_info < (3, 8):
		pkgs_to_check_at_runtime.append('''importlib_metadata''')

for pkg in pkgs_to_check_at_runtime:
		if pkg in deps:
				if pkg == "tokenizers":
						# must be loaded here, or else tqdm check may fail
						from .utils import is_tokenizers_available

						if not is_tokenizers_available():
								continue  # not required, check version only if installed

				require_version_core(deps[pkg])
		else:
				raise ValueError(f"""can't find {pkg} in {deps.keys()}, check dependency_versions_table.py""")


def    _snake_case  (	A					,       A=None			)		->       Optional[Any]:
							require_version(deps[pkg]					,       A			)