



import importlib.metadata
from typing import Union

from packaging.version import Version, parse

from .constants import STR_OPERATION_TO_FUNC


snake_case__					:     Tuple    		=   parse(importlib.metadata.version("""torch"""))



def    snake_case_				(    _SCREAMING_SNAKE_CASE  ,	_SCREAMING_SNAKE_CASE  ,	_SCREAMING_SNAKE_CASE   ):
	if operation not in STR_OPERATION_TO_FUNC.keys():
		raise ValueError(F"""`operation` must be one of {list(STR_OPERATION_TO_FUNC.keys()   )}, received {operation}"""   )
	__lowercase		       =			STR_OPERATION_TO_FUNC[operation]
	if isinstance(_SCREAMING_SNAKE_CASE  ,	_SCREAMING_SNAKE_CASE   ):
		__lowercase		       =			parse(importlib.metadata.version(_SCREAMING_SNAKE_CASE   )   )
	return operation(_SCREAMING_SNAKE_CASE  ,	parse(_SCREAMING_SNAKE_CASE   )   )



def    snake_case_				(    _SCREAMING_SNAKE_CASE  ,	_SCREAMING_SNAKE_CASE   ):
	return compare_versions(_SCREAMING_SNAKE_CASE  ,	_SCREAMING_SNAKE_CASE  ,	_SCREAMING_SNAKE_CASE   )








import numpy as np

snake_case__					:     Tuple    		=   [
    ["""a""", """b""", """c""", """d""", """e"""],
    ["""f""", """g""", """h""", """i""", """k"""],
    ["""l""", """m""", """n""", """o""", """p"""],
    ["""q""", """r""", """s""", """t""", """u"""],
    ["""v""", """w""", """x""", """y""", """z"""],
]

class   _A   :


						'''simple docstring'''





						def __init__(	self	:							Dict	):






							'''simple docstring'''



							__lowercase		       =			np.array(lowerCamelCase	)



						def     _snake_case	(	self	:							Union[str, Any]							,      lowerCamelCase	:							str	):






							'''simple docstring'''



							__lowercase       ,    __lowercase		       =			np.where(letter == self.SQUARE	)
							__lowercase		       =			np.concatenate([indexa + 1, indexa + 1]	)
							return indexes



						def     _snake_case	(	self	:							List[Any]							,      lowerCamelCase	:							int							,      lowerCamelCase	:							int	):






							'''simple docstring'''



							__lowercase		       =			self.SQUARE[indexa - 1, indexa - 1]
							return letter



						def     _snake_case	(	self	:							int							,      lowerCamelCase	:							str	):






							'''simple docstring'''



							__lowercase		       =			message.lower()
							__lowercase		       =			message.replace(" "							,      ""	)
							__lowercase		       =			message.replace("j"							,      "i"	)

							__lowercase		       =			np.empty((2, len(lowerCamelCase	))	)
							for letter_index in range(len(lowerCamelCase	)	):
								__lowercase		       =			self.letter_to_numbers(message[letter_index]	)

								__lowercase		       =			numbers[0]
								__lowercase		       =			numbers[1]

							__lowercase		       =			first_step.reshape(2 * len(lowerCamelCase	)	)
							__lowercase		       =			""
							for numbers_index in range(len(lowerCamelCase	)	):
								__lowercase		       =			int(second_step[numbers_index * 2]	)
								__lowercase		       =			int(second_step[(numbers_index * 2) + 1]	)
								__lowercase		       =			self.numbers_to_letter(lowerCamelCase							,      lowerCamelCase	)
								__lowercase		       =			encoded_message + letter

							return encoded_message



						def     _snake_case	(	self	:							Optional[Any]							,      lowerCamelCase	:							str	):






							'''simple docstring'''



							__lowercase		       =			message.lower()
							message.replace(" "							,      ""	)
							__lowercase		       =			np.empty(2 * len(lowerCamelCase	)	)
							for letter_index in range(len(lowerCamelCase	)	):
								__lowercase		       =			self.letter_to_numbers(message[letter_index]	)
								__lowercase		       =			numbers[0]
								__lowercase		       =			numbers[1]

							__lowercase		       =			first_step.reshape((2, len(lowerCamelCase	))	)
							__lowercase		       =			""
							for numbers_index in range(len(lowerCamelCase	)	):
								__lowercase		       =			int(second_step[0, numbers_index]	)
								__lowercase		       =			int(second_step[1, numbers_index]	)
								__lowercase		       =			self.numbers_to_letter(lowerCamelCase							,      lowerCamelCase	)
								__lowercase		       =			decoded_message + letter

							return decoded_message



