






import unittest

from transformers import JukeboxTokenizer
from transformers.testing_utils import require_torch


class 					_snake_case						(			unittest.TestCase ):
	_A          =   JukeboxTokenizer
	_A          =   {
	    'artist': 'Zac Brown Band',
	    'genres': 'Country',
	    'lyrics': 'I met a traveller from an antique land,\n        Who said "Two vast and trunkless legs of stone\n        Stand in the desert. . . . Near them, on the sand,\n        Half sunk a shattered visage lies, whose frown,\n        And wrinkled lip, and sneer of cold command,\n        Tell that its sculptor well those passions read\n        Which yet survive, stamped on these lifeless things,\n        The hand that mocked them, and the heart that fed;\n        And on the pedestal, these words appear:\n        My name is Ozymandias, King of Kings;\n        Look on my Works, ye Mighty, and despair!\n        Nothing beside remains. Round the decay\n        Of that colossal Wreck, boundless and bare\n        The lone and level sands stretch far away\n        ',
	}






	@require_torch
	def    lowerCAmelCase_							(		self       )						->    str:
					import torch

					snake_case__      :Dict         =   JukeboxTokenizer.from_pretrained("openai/jukebox-1b-lyrics"       )
					snake_case__      :int         =   tokenizer(**self.metas       )["input_ids"]
					# fmt: off
					snake_case__      :List[str]         =   [
					    torch.tensor([[
					        0, 0, 0, 7_169, 507, 9, 76, 39, 31, 46, 76, 27,
					        76, 46, 44, 27, 48, 31, 38, 38, 31, 44, 76, 32,
					        44, 41, 39, 76, 27, 40, 76, 27, 40, 46, 35, 43,
					        47, 31, 76, 38, 27, 40, 30, 64, 78, 76, 76, 76,
					        76, 76, 76, 76, 76, 23, 34, 41, 76, 45, 27, 35,
					        30, 76, 71, 20, 49, 41, 76, 48, 27, 45, 46, 76,
					        27, 40, 30, 76, 46, 44, 47, 40, 37, 38, 31, 45,
					        45, 76, 38, 31, 33, 45, 76, 41, 32, 76, 45, 46,
					        41, 40, 31, 78, 76, 76, 76, 76, 76, 76, 76, 76,
					        19, 46, 27, 40, 30, 76, 35, 40, 76, 46, 34, 31,
					        76, 30, 31, 45, 31, 44, 46, 63, 76, 63, 76, 63,
					        76, 63, 76, 14, 31, 27, 44, 76, 46, 34, 31, 39,
					        64, 76, 41, 40, 76, 46, 34, 31, 76, 45, 27, 40,
					        30, 64, 78, 76, 76, 76, 76, 76, 76, 76, 76, 8,
					        27, 38, 32, 76, 45, 47, 40, 37, 76, 27, 76, 45,
					        34, 27, 46, 46, 31, 44, 31, 30, 76, 48, 35, 45,
					        27, 33, 31, 76, 38, 35, 31, 45, 64, 76, 49, 34,
					        41, 45, 31, 76, 32, 44, 41, 49, 40, 64, 78, 76,
					        76, 76, 76, 76, 76, 76, 76, 1, 40, 30, 76, 49,
					        44, 35, 40, 37, 38, 31, 30, 76, 38, 35, 42, 64,
					        76, 27, 40, 30, 76, 45, 40, 31, 31, 44, 76, 41,
					        32, 76, 29, 41, 38, 30, 76, 29, 41, 39, 39, 27,
					        40, 30, 64, 78, 76, 76, 76, 76, 76, 76, 76, 76,
					        20, 31, 38, 38, 76, 46, 34, 27, 46, 76, 35, 46,
					        45, 76, 45, 29, 47, 38, 42, 46, 41, 44, 76, 49,
					        31, 38, 38, 76, 46, 34, 41, 45, 31, 76, 42, 27,
					        45, 45, 35, 41, 40, 45, 76, 44, 31, 27, 30, 78,
					        76, 76, 76, 76, 76, 76, 76, 76, 23, 34, 35, 29,
					        34, 76, 51, 31, 46, 76, 45, 47, 44, 48, 35, 48,
					        31, 64, 76, 45, 46, 27, 39, 42, 31, 30, 76, 41,
					        40, 76, 46, 34, 31, 45, 31, 76, 38, 35, 32, 31,
					        38, 31, 45, 45, 76, 46, 34, 35, 40, 33, 45, 64,
					        78, 76, 76, 76, 76, 76, 76, 76, 76, 20, 34, 31,
					        76, 34, 27, 40, 30, 76, 46, 34, 27, 46, 76, 39,
					        41, 29, 37, 31, 30, 76, 46, 34, 31, 39, 64, 76,
					        27, 40, 30, 76, 46, 34, 31, 76, 34, 31, 27, 44,
					        46, 76, 46, 34, 27, 46, 76, 32, 31, 30, 66, 78,
					        76, 76, 76, 76, 76, 76, 76, 76, 1, 40, 30, 76,
					        41, 40, 76, 46, 34, 31, 76, 42, 31, 30, 31, 45,
					        46, 27, 38, 64, 76, 46, 34, 31, 45, 31, 76, 49,
					        41, 44, 30, 45, 76, 27, 42, 42, 31, 27, 44, 65,
					        78, 76, 76, 76, 76, 76, 76, 76, 76, 13, 51, 76,
					        40, 27, 39, 31, 76, 35, 45, 76, 15, 52, 51, 39,
					        27, 40, 30, 35, 27, 45, 64, 76, 11, 35, 40, 33,
					        76, 41, 32, 76, 11, 35, 40, 33, 45, 66, 78, 76,
					        76, 76, 76, 76, 76, 76, 76, 12, 41, 41, 37, 76,
					        41, 40, 76, 39, 51, 76, 23, 41, 44, 37, 45, 64,
					        76, 51, 31, 76, 13, 35, 33, 34, 46, 51, 64, 76,
					        27, 40, 30, 76, 30, 31, 45, 42, 27, 35, 44, 67,
					        78, 76, 76, 76, 76, 76, 76, 76, 76, 14, 41, 46,
					        34, 35, 40, 33, 76, 28, 31, 45, 35, 30, 31, 76,
					        44, 31, 39, 27, 35, 40, 45, 63, 76, 18, 41, 47,
					        40, 30, 76, 46, 34, 31, 76, 30, 31, 29, 27, 51,
					        78, 76, 76, 76, 76, 76, 76, 76, 76, 15, 32, 76,
					        46, 34, 27, 46, 76, 29, 41, 38, 41, 45, 45, 27,
					        38, 76, 23, 44, 31, 29, 37, 64, 76, 28, 41, 47,
					        40, 30, 38, 31, 45, 45, 76, 27, 40, 30, 76, 28,
					        27, 44, 31, 78, 76, 76, 76, 76, 76, 76, 76, 76,
					        20, 34, 31, 76, 38, 41, 40, 31, 76, 27, 40, 30,
					        76, 38, 31, 48, 31, 38, 76, 45, 27, 40, 30, 45,
					        76, 45, 46, 44, 31, 46, 29, 34, 76, 32, 27, 44,
					        76, 27, 49, 27, 51, 78, 76, 76, 76, 76, 76, 76,
					        76, 76]]       ),
					    torch.tensor([[0, 0, 0, 1_069, 11]]       ),
					    torch.tensor([[0, 0, 0, 1_069, 11]]       ),
					]
					# fmt: on
					self.assertTrue(torch.allclose(tokens[0]					,EXPECTED_OUTPUT[0]       )       )
					self.assertTrue(torch.allclose(tokens[1]					,EXPECTED_OUTPUT[1]       )       )
					self.assertTrue(torch.allclose(tokens[2]					,EXPECTED_OUTPUT[2]       )       )






	@require_torch
	def    lowerCAmelCase_							(		self       )						->    Dict:
					import torch

					snake_case__      :Tuple         =   JukeboxTokenizer.from_pretrained("openai/jukebox-5b-lyrics"       )
					snake_case__      :Tuple         =   tokenizer(**self.metas       )["input_ids"]
					# fmt: off
					snake_case__      :Optional[int]         =   [
					    torch.tensor([[
					        0, 0, 0, 1_069, 11, -1, -1, -1, -1, 9, 77, 39,
					        31, 46, 77, 27, 77, 46, 44, 27, 48, 31, 38, 38,
					        31, 44, 77, 32, 44, 41, 39, 77, 27, 40, 77, 27,
					        40, 46, 35, 43, 47, 31, 77, 38, 27, 40, 30, 64,
					        79, 77, 77, 77, 77, 77, 77, 77, 77, 23, 34, 41,
					        77, 45, 27, 35, 30, 77, 72, 20, 49, 41, 77, 48,
					        27, 45, 46, 77, 27, 40, 30, 77, 46, 44, 47, 40,
					        37, 38, 31, 45, 45, 77, 38, 31, 33, 45, 77, 41,
					        32, 77, 45, 46, 41, 40, 31, 79, 77, 77, 77, 77,
					        77, 77, 77, 77, 19, 46, 27, 40, 30, 77, 35, 40,
					        77, 46, 34, 31, 77, 30, 31, 45, 31, 44, 46, 63,
					        77, 63, 77, 63, 77, 63, 77, 14, 31, 27, 44, 77,
					        46, 34, 31, 39, 64, 77, 41, 40, 77, 46, 34, 31,
					        77, 45, 27, 40, 30, 64, 79, 77, 77, 77, 77, 77,
					        77, 77, 77, 8, 27, 38, 32, 77, 45, 47, 40, 37,
					        77, 27, 77, 45, 34, 27, 46, 46, 31, 44, 31, 30,
					        77, 48, 35, 45, 27, 33, 31, 77, 38, 35, 31, 45,
					        64, 77, 49, 34, 41, 45, 31, 77, 32, 44, 41, 49,
					        40, 64, 79, 77, 77, 77, 77, 77, 77, 77, 77, 1,
					        40, 30, 77, 49, 44, 35, 40, 37, 38, 31, 30, 77,
					        38, 35, 42, 64, 77, 27, 40, 30, 77, 45, 40, 31,
					        31, 44, 77, 41, 32, 77, 29, 41, 38, 30, 77, 29,
					        41, 39, 39, 27, 40, 30, 64, 79, 77, 77, 77, 77,
					        77, 77, 77, 77, 20, 31, 38, 38, 77, 46, 34, 27,
					        46, 77, 35, 46, 45, 77, 45, 29, 47, 38, 42, 46,
					        41, 44, 77, 49, 31, 38, 38, 77, 46, 34, 41, 45,
					        31, 77, 42, 27, 45, 45, 35, 41, 40, 45, 77, 44,
					        31, 27, 30, 79, 77, 77, 77, 77, 77, 77, 77, 77,
					        23, 34, 35, 29, 34, 77, 51, 31, 46, 77, 45, 47,
					        44, 48, 35, 48, 31, 64, 77, 45, 46, 27, 39, 42,
					        31, 30, 77, 41, 40, 77, 46, 34, 31, 45, 31, 77,
					        38, 35, 32, 31, 38, 31, 45, 45, 77, 46, 34, 35,
					        40, 33, 45, 64, 79, 77, 77, 77, 77, 77, 77, 77,
					        77, 20, 34, 31, 77, 34, 27, 40, 30, 77, 46, 34,
					        27, 46, 77, 39, 41, 29, 37, 31, 30, 77, 46, 34,
					        31, 39, 64, 77, 27, 40, 30, 77, 46, 34, 31, 77,
					        34, 31, 27, 44, 46, 77, 46, 34, 27, 46, 77, 32,
					        31, 30, 66, 79, 77, 77, 77, 77, 77, 77, 77, 77,
					        1, 40, 30, 77, 41, 40, 77, 46, 34, 31, 77, 42,
					        31, 30, 31, 45, 46, 27, 38, 64, 77, 46, 34, 31,
					        45, 31, 77, 49, 41, 44, 30, 45, 77, 27, 42, 42,
					        31, 27, 44, 65, 79, 77, 77, 77, 77, 77, 77, 77,
					        77, 13, 51, 77, 40, 27, 39, 31, 77, 35, 45, 77,
					        15, 52, 51, 39, 27, 40, 30, 35, 27, 45, 64, 77,
					        11, 35, 40, 33, 77, 41, 32, 77, 11, 35, 40, 33,
					        45, 66, 79, 77, 77, 77, 77, 77, 77, 77, 77, 12,
					        41, 41, 37, 77, 41, 40, 77, 39, 51, 77, 23, 41,
					        44, 37, 45, 64, 77, 51, 31, 77, 13, 35, 33, 34,
					        46, 51, 64, 77, 27, 40, 30, 77, 30, 31, 45, 42,
					        27, 35, 44, 67, 79, 77, 77, 77, 77, 77, 77, 77,
					        77, 14, 41, 46, 34, 35, 40, 33, 77, 28, 31, 45,
					        35, 30, 31, 77, 44, 31, 39, 27, 35, 40, 45, 63,
					        77, 18, 41, 47, 40, 30, 77, 46, 34, 31, 77, 30,
					        31, 29, 27, 51, 79, 77, 77, 77, 77, 77, 77, 77,
					        77, 15, 32, 77, 46, 34, 27, 46, 77, 29, 41, 38,
					        41, 45, 45, 27, 38, 77, 23, 44, 31, 29, 37, 64,
					        77, 28, 41, 47, 40, 30, 38, 31, 45, 45, 77, 27,
					        40, 30, 77, 28, 27, 44, 31, 79, 77, 77, 77, 77,
					        77, 77, 77, 77, 20, 34, 31, 77, 38, 41, 40, 31,
					        77, 27, 40, 30, 77, 38, 31, 48, 31, 38, 77, 45,
					        27, 40, 30, 45, 77, 45, 46, 44, 31, 46, 29, 34,
					        77, 32, 27, 44, 77, 27, 49, 27, 51, 79, 77, 77,
					        77, 77, 77, 77, 77, 77]]       ),
					    torch.tensor([[0, 0, 0, 1_069, 11, -1, -1, -1, -1]]       ),
					    torch.tensor([[0, 0, 0, 1_069, 11, -1, -1, -1, -1]]       ),
					]
					# fmt: on
					self.assertTrue(torch.allclose(tokens[0]					,EXPECTED_OUTPUT[0]       )       )
					self.assertTrue(torch.allclose(tokens[1]					,EXPECTED_OUTPUT[1]       )       )
					self.assertTrue(torch.allclose(tokens[2]					,EXPECTED_OUTPUT[2]       )       )







def 					lowercase_ (    __snake_case     :							Tuple	,	__snake_case     :							Optional[int]      )     -> List[Any]:





				'''simple docstring'''


				snake_case__      :Dict         =   ""
				for i in table:
								res += inp[i - 1]
				return res





def 					lowercase_ (    __snake_case     :							List[str]      )     -> int:





				'''simple docstring'''


				return data[1:] + data[0]





def 					lowercase_ (    __snake_case     :							int	,	__snake_case     :							Union[str, Any]      )     -> Union[str, Any]:





				'''simple docstring'''


				snake_case__      :Union[str, Any]         =   ""
				for i in range(len(__snake_case      )      ):
								if a[i] == b[i]:
												res += "0"
								else:
												res += "1"
				return res





def 					lowercase_ (    __snake_case     :							Optional[int]	,	__snake_case     :							Dict      )     -> Union[str, Any]:





				'''simple docstring'''


				snake_case__      :int         =   int("0b" + data[0] + data[-1]	,	2      )
				snake_case__      :Union[str, Any]         =   int("0b" + data[1:3]	,	2      )
				return bin(s[row][col]      )[2:]





def 					lowercase_ (    __snake_case     :							Dict	,	__snake_case     :							Optional[Any]	,	__snake_case     :							Dict	,	__snake_case     :							List[Any]	,	__snake_case     :							Optional[int]      )     -> List[str]:





				'''simple docstring'''


				snake_case__      :Tuple         =   message[:4]
				snake_case__      :int         =   message[4:]
				snake_case__      :int         =   apply_table(__snake_case	,	__snake_case      )
				snake_case__      :Union[str, Any]         =   xor(__snake_case	,	__snake_case      )
				snake_case__      :Tuple         =   apply_sbox(__snake_case	,	temp[:4]      )  # noqa: E741
				snake_case__      :List[str]         =   apply_sbox(__snake_case	,	temp[4:]      )
				snake_case__      :int         =   "0" * (2 - len(__snake_case      )) + l  # noqa: E741
				snake_case__      :int         =   "0" * (2 - len(__snake_case      )) + r
				snake_case__      :Optional[Any]         =   apply_table(l + r	,	__snake_case      )
				snake_case__      :Tuple         =   xor(__snake_case	,	__snake_case      )
				return temp + right


if __name__ == "__main__":
	__UpperCAmelCase							:   Dict							=  input("Enter 10 bit key: ")
	__UpperCAmelCase							:   Tuple							=  input("Enter 8 bit message: ")

	__UpperCAmelCase							:   Any							=  [6, 3, 7, 4, 8, 5, 1_0, 9]
	__UpperCAmelCase							:   List[str]							=  [3, 5, 2, 7, 4, 1_0, 1, 9, 8, 6]
	__UpperCAmelCase							:   Tuple							=  [2, 4, 3, 1]
	__UpperCAmelCase							:   List[Any]							=  [2, 6, 3, 1, 4, 8, 5, 7]
	__UpperCAmelCase							:   Optional[Any]							=  [4, 1, 3, 5, 7, 2, 8, 6]
	__UpperCAmelCase							:   Optional[int]							=  [4, 1, 2, 3, 2, 3, 4, 1]
	__UpperCAmelCase							:   List[Any]							=  [[1, 0, 3, 2], [3, 2, 1, 0], [0, 2, 1, 3], [3, 1, 3, 2]]
	__UpperCAmelCase							:   Union[str, Any]							=  [[0, 1, 2, 3], [2, 0, 1, 3], [3, 0, 1, 0], [2, 1, 0, 3]]

	# key generation
	__UpperCAmelCase							:   int							=  apply_table(key, paa_table)
	__UpperCAmelCase							:   Dict							=  temp[:5]
	__UpperCAmelCase							:   Optional[int]							=  temp[5:]
	__UpperCAmelCase							:   Optional[int]							=  left_shift(left)
	__UpperCAmelCase							:   Union[str, Any]							=  left_shift(right)
	__UpperCAmelCase							:   int							=  apply_table(left + right, pa_table)
	__UpperCAmelCase							:   Tuple							=  left_shift(left)
	__UpperCAmelCase							:   Union[str, Any]							=  left_shift(right)
	__UpperCAmelCase							:   Dict							=  left_shift(left)
	__UpperCAmelCase							:   Optional[Any]							=  left_shift(right)
	__UpperCAmelCase							:   Optional[int]							=  apply_table(left + right, pa_table)

	# encryption
	__UpperCAmelCase							:   Tuple							=  apply_table(message, IP)
	__UpperCAmelCase							:   Tuple							=  function(expansion, sa, sa, keya, temp)
	__UpperCAmelCase							:   List[Any]							=  temp[4:] + temp[:4]
	__UpperCAmelCase							:   int							=  function(expansion, sa, sa, keya, temp)
	__UpperCAmelCase							:   Union[str, Any]							=  apply_table(temp, IP_inv)
	print("Cipher text is:", CT)

	# decryption
	__UpperCAmelCase							:   List[Any]							=  apply_table(CT, IP)
	__UpperCAmelCase							:   List[Any]							=  function(expansion, sa, sa, keya, temp)
	__UpperCAmelCase							:   int							=  temp[4:] + temp[:4]
	__UpperCAmelCase							:   Union[str, Any]							=  function(expansion, sa, sa, keya, temp)
	__UpperCAmelCase							:   Union[str, Any]							=  apply_table(temp, IP_inv)
	print("Plain text after decypting is:", PT)