
import importlib
from typing import List, Optional, Union

from seqeval.metrics import accuracy_score, classification_report

import datasets


__SCREAMING_SNAKE_CASE     :				Tuple             =       '\\n@inproceedings{ramshaw-marcus-1995-text,\n    title = "Text Chunking using Transformation-Based Learning",\n    author = "Ramshaw, Lance  and\n      Marcus, Mitch",\n    booktitle = "Third Workshop on Very Large Corpora",\n    year = "1995",\n    url = "https://www.aclweb.org/anthology/W95-0107",\n}\n@misc{seqeval,\n  title={{seqeval}: A Python framework for sequence labeling evaluation},\n  url={https://github.com/chakki-works/seqeval},\n  note={Software available from https://github.com/chakki-works/seqeval},\n  author={Hiroki Nakayama},\n  year={2018},\n}\n'

__SCREAMING_SNAKE_CASE     :				Any             =       '\\nseqeval is a Python framework for sequence labeling evaluation.\nseqeval can evaluate the performance of chunking tasks such as named-entity recognition, part-of-speech tagging, semantic role labeling and so on.\n\nThis is well-tested by using the Perl script conlleval, which can be used for\nmeasuring the performance of a system that has processed the CoNLL-2000 shared task data.\n\nseqeval supports following formats:\nIOB1\nIOB2\nIOE1\nIOE2\nIOBES\n\nSee the [README.md] file at https://github.com/chakki-works/seqeval for more information.\n'

__SCREAMING_SNAKE_CASE     :				List[str]             =       '\nProduces labelling scores along with its sufficient statistics\nfrom a source against one or more references.\n\nArgs:\n    predictions: List of List of predicted labels (Estimated targets as returned by a tagger)\n    references: List of List of reference labels (Ground truth (correct) target values)\n    suffix: True if the IOB prefix is after type, False otherwise. default: False\n    scheme: Specify target tagging scheme. Should be one of ["IOB1", "IOB2", "IOE1", "IOE2", "IOBES", "BILOU"].\n        default: None\n    mode: Whether to count correct entity labels with incorrect I/B tags as true positives or not.\n        If you want to only count exact matches, pass mode="strict". default: None.\n    sample_weight: Array-like of shape (n_samples,), weights for individual samples. default: None\n    zero_division: Which value to substitute as a metric value when encountering zero division. Should be on of 0, 1,\n        "warn". "warn" acts as 0, but the warning is raised.\n\nReturns:\n    \'scores\': dict. Summary of the scores for overall and per type\n        Overall:\n            \'accuracy\': accuracy,\n            \'precision\': precision,\n            \'recall\': recall,\n            \'f1\': F1 score, also known as balanced F-score or F-measure,\n        Per type:\n            \'precision\': precision,\n            \'recall\': recall,\n            \'f1\': F1 score, also known as balanced F-score or F-measure\nExamples:\n\n    >>> predictions = [[\'O\', \'O\', \'B-MISC\', \'I-MISC\', \'I-MISC\', \'I-MISC\', \'O\'], [\'B-PER\', \'I-PER\', \'O\']]\n    >>> references = [[\'O\', \'O\', \'O\', \'B-MISC\', \'I-MISC\', \'I-MISC\', \'O\'], [\'B-PER\', \'I-PER\', \'O\']]\n    >>> seqeval = datasets.load_metric("seqeval")\n    >>> results = seqeval.compute(predictions=predictions, references=references)\n    >>> print(list(results.keys()))\n    [\'MISC\', \'PER\', \'overall_precision\', \'overall_recall\', \'overall_f1\', \'overall_accuracy\']\n    >>> print(results["overall_f1"])\n    0.5\n    >>> print(results["PER"]["f1"])\n    1.0\n'


@datasets.utils.file_utils.add_start_docstrings(_DESCRIPTION,			_KWARGS_DESCRIPTION      )
class 						__magic_name__				(  datasets.Metric      ):





		def  _A							(							self      :		Optional[int]			):
							return datasets.MetricInfo(
							    description=_DESCRIPTION  ,					citation=_CITATION  ,					homepage='''https://github.com/chakki-works/seqeval'''  ,					inputs_description=_KWARGS_DESCRIPTION  ,					features=datasets.Features(
							        {
							            '''predictions''': datasets.Sequence(datasets.Value('''string'''  ,					id='''label'''			)  ,					id='''sequence'''			),
							            '''references''': datasets.Sequence(datasets.Value('''string'''  ,					id='''label'''			)  ,					id='''sequence'''			),
							        }			)  ,					codebase_urls=['''https://github.com/chakki-works/seqeval''']  ,					reference_urls=['''https://github.com/chakki-works/seqeval''']  ,					)





		def  _A							(							self      :		List[Any]  ,					lowerCamelCase__      :		Union[str, Any]  ,					lowerCamelCase__      :		int  ,					lowerCamelCase__      :		bool = False  ,					lowerCamelCase__      :		Optional[str] = None  ,					lowerCamelCase__      :		Optional[str] = None  ,					lowerCamelCase__      :		Optional[List[int]] = None  ,					lowerCamelCase__      :		Union[str, int] = "warn"  ,					):
							if scheme is not None:
												try:
																	lowerCAmelCase						:   Tuple							=       importlib.import_module('''seqeval.scheme'''			)
																	lowerCAmelCase						:   Optional[Any]							=       getattr(lowerCamelCase__  ,					lowerCamelCase__			)
												except AttributeError:
																	raise ValueError(f'''Scheme should be one of [IOB1, IOB2, IOE1, IOE2, IOBES, BILOU], got {scheme}'''			)
							lowerCAmelCase						:   Dict							=       classification_report(
							    y_true=lowerCamelCase__  ,					y_pred=lowerCamelCase__  ,					suffix=lowerCamelCase__  ,					output_dict=lowerCamelCase__  ,					scheme=lowerCamelCase__  ,					mode=lowerCamelCase__  ,					sample_weight=lowerCamelCase__  ,					zero_division=lowerCamelCase__  ,					)
							report.pop('''macro avg'''			)
							report.pop('''weighted avg'''			)
							lowerCAmelCase						:   str							=       report.pop('''micro avg'''			)

							lowerCAmelCase						:   Dict							=       {
							    type_name: {
							        '''precision''': score['''precision'''],
							        '''recall''': score['''recall'''],
							        '''f1''': score['''f1-score'''],
							        '''number''': score['''support'''],
							    }
							    for type_name, score in report.items()
							}
							lowerCAmelCase						:   Optional[int]							=       overall_score['''precision''']
							lowerCAmelCase						:   Optional[Any]							=       overall_score['''recall''']
							lowerCAmelCase						:   Any							=       overall_score['''f1-score''']
							lowerCAmelCase						:   int							=       accuracy_score(y_true=lowerCamelCase__  ,					y_pred=lowerCamelCase__			)

							return scores


import unittest
from unittest import skip

from transformers import is_torch_available
from transformers.testing_utils import require_torch, slow
from transformers.trainer_utils import set_seed


if is_torch_available():
		import torch

		from transformers import JukeboxModel, JukeboxPrior, JukeboxTokenizer


@require_torch
class 						__magic_name__				(  unittest.TestCase      ):
		_lowerCAmelCase						=		(JukeboxModel,) if is_torch_available() else ()
		_lowerCAmelCase						=		"openai/jukebox-1b-lyrics"
		_lowerCAmelCase						=		{
		    "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    ",
		}
		# fmt: off
		_lowerCAmelCase						=		[
		    1_864, 1_536, 1_213, 1_870, 1_357, 1_536, 519, 880, 1_323, 789, 1_082, 534,
		    1_000, 1_445, 1_105, 1_130, 967, 515, 1_434, 1_620, 534, 1_495, 283, 1_445,
		    333, 1_307, 539, 1_631, 1_528, 375, 1_434, 673, 627, 710, 778, 1_883,
		    1_405, 1_276, 1_455, 1_228
		]

		_lowerCAmelCase						=		[
		    1_489, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653
		]

		_lowerCAmelCase						=		[
		    1_125, 1_751, 697, 1_776, 1_141, 1_476, 391, 697, 1_125, 684, 867, 416,
		    844, 1_372, 1_274, 717, 1_274, 844, 1_299, 1_419, 697, 1_370, 317, 1_125,
		    191, 1_440, 1_370, 1_440, 1_370, 282, 1_621, 1_370, 368, 349, 867, 1_872,
		    1_262, 869, 1_728, 747
		]
		_lowerCAmelCase						=		[
		    416, 416, 1_125, 1_125, 416, 416, 416, 416, 416, 416, 416, 416,
		    416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
		    416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
		    416, 416, 416, 416
		]

		_lowerCAmelCase						=		[
		    1_755, 842, 307, 1_843, 1_022, 1_395, 234, 1_554, 806, 739, 1_022, 442,
		    616, 556, 268, 1_499, 933, 457, 1_440, 1_837, 755, 985, 308, 902,
		    293, 1_443, 1_671, 1_141, 1_533, 555, 1_562, 1_061, 287, 417, 1_022, 2_008,
		    1_186, 1_015, 1_777, 268
		]
		_lowerCAmelCase						=		[
		    854, 842, 1_353, 114, 1_353, 842, 185, 842, 185, 114, 591, 842,
		    185, 417, 185, 842, 307, 842, 591, 842, 185, 842, 307, 842,
		    591, 842, 1_353, 842, 185, 842, 591, 842, 591, 114, 591, 842,
		    185, 842, 591, 89
		]

		_lowerCAmelCase						=		[1_058_304, 0, 786_432, 7_169, 507, 76, 27, 40, 30, 76]

		_lowerCAmelCase						=		[
		    390, 1_160, 1_002, 1_907, 1_788, 1_788, 1_788, 1_907, 1_002, 1_002, 1_854, 1_002,
		    1_002, 1_002, 1_002, 1_002, 1_002, 1_160, 1_160, 1_606, 596, 596, 1_160, 1_002,
		    1_516, 596, 1_002, 1_002, 1_002, 1_907, 1_788, 1_788, 1_788, 1_854, 1_788, 1_907,
		    1_907, 1_788, 596, 1_626
		]
		_lowerCAmelCase						=		[
		    1_236, 1_668, 1_484, 1_920, 1_848, 1_409, 139, 864, 1_828, 1_272, 1_599, 824,
		    1_672, 139, 555, 1_484, 824, 1_920, 555, 596, 1_579, 1_599, 1_231, 1_599,
		    1_637, 1_407, 212, 824, 1_599, 116, 1_433, 824, 258, 1_599, 1_433, 1_895,
		    1_063, 1_433, 1_433, 1_599
		]
		_lowerCAmelCase						=		[
		    1_684, 1_873, 1_119, 1_189, 395, 611, 1_901, 972, 890, 1_337, 1_392, 1_927,
		    96, 972, 672, 780, 1_119, 890, 158, 771, 1_073, 1_927, 353, 1_331,
		    1_269, 1_459, 1_333, 1_645, 812, 1_577, 1_337, 606, 353, 981, 1_466, 619,
		    197, 391, 302, 1_930
		]
		_lowerCAmelCase						=		[
		    390, 1_160, 1_002, 1_907, 1_788, 1_788, 1_788, 1_907, 1_002, 1_002, 1_854, 1_002,
		    1_002, 1_002, 1_002, 1_002, 1_002, 1_160, 1_160, 1_606, 596, 596, 1_160, 1_002,
		    1_516, 596, 1_002, 1_002, 1_002, 1_907, 1_788, 1_788, 1_788, 1_854, 1_788, 1_907,
		    1_907, 1_788, 596, 1_626
		]
		_lowerCAmelCase						=		[
		    -0.0492, -0.0524, -0.0565, -0.0640, -0.0686, -0.0684, -0.0677, -0.0664,
		    -0.0605, -0.0490, -0.0330, -0.0168, -0.0083, -0.0075, -0.0051, 0.0025,
		    0.0136, 0.0261, 0.0386, 0.0497, 0.0580, 0.0599, 0.0583, 0.0614,
		    0.0740, 0.0889, 0.1023, 0.1162, 0.1211, 0.1212, 0.1251, 0.1336,
		    0.1502, 0.1686, 0.1883, 0.2148, 0.2363, 0.2458, 0.2507, 0.2531
		]
		_lowerCAmelCase						=		[
		    0.0256, -0.0544, 0.1600, -0.0032, 0.1066, 0.0825, -0.0013, 0.3440,
		    0.0210, 0.0412, -0.1777, -0.0892, -0.0164, 0.0285, -0.0613, -0.0617,
		    -0.0137, -0.0201, -0.0175, 0.0215, -0.0627, 0.0520, -0.0730, 0.0970,
		    -0.0100, 0.0442, -0.0586, 0.0207, -0.0015, -0.0082
		]
		_lowerCAmelCase						=		[
		    0.0415, 0.0877, 0.0022, -0.0055, 0.0751, 0.0334, 0.0324, -0.0068,
		    0.0011, 0.0017, -0.0676, 0.0655, -0.0143, 0.0399, 0.0303, 0.0743,
		    -0.0168, -0.0394, -0.1113, 0.0124, 0.0442, 0.0267, -0.0003, -0.1536,
		    -0.0116, -0.1837, -0.0180, -0.1026, -0.0777, -0.0456
		]
		_lowerCAmelCase						=		[
		    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
		]





		def  _A							(							self      :		Dict			):
							lowerCAmelCase						:   int							=       JukeboxTokenizer.from_pretrained(self.model_id			)
							lowerCAmelCase						:   Union[str, Any]							=       tokenizer(**self.metas			)['''input_ids''']
							return tokens





		@slow
		def  _A							(							self      :		Optional[int]			):
							lowerCAmelCase						:   Any							=       JukeboxModel.from_pretrained(self.model_id  ,					min_duration=0			).eval()
							lowerCAmelCase						:   Union[str, Any]							=       self.prepare_inputs()

							set_seed(0			)
							lowerCAmelCase						:   Optional[int]							=       [torch.zeros(1  ,					0  ,					dtype=torch.long			).cpu() for _ in range(3			)]
							lowerCAmelCase						:   Optional[Any]							=       model._sample(lowerCamelCase__  ,					lowerCamelCase__  ,					[0]  ,					sample_length=4_0 * model.priors[0].raw_to_tokens  ,					save_results=lowerCamelCase__			)
							self.assertIn(zs[0][0].detach().cpu().tolist()  ,					[self.EXPECTED_OUTPUT_2, self.EXPECTED_OUTPUT_2_PT_2]			)

							set_seed(0			)
							lowerCAmelCase						:   Tuple							=       model._sample(lowerCamelCase__  ,					lowerCamelCase__  ,					[1]  ,					sample_length=4_0 * model.priors[1].raw_to_tokens  ,					save_results=lowerCamelCase__			)
							self.assertIn(zs[1][0].detach().cpu().tolist()  ,					[self.EXPECTED_OUTPUT_1, self.EXPECTED_OUTPUT_1_PT_2]			)

							set_seed(0			)
							lowerCAmelCase						:   Tuple							=       model._sample(lowerCamelCase__  ,					lowerCamelCase__  ,					[2]  ,					sample_length=4_0 * model.priors[2].raw_to_tokens  ,					save_results=lowerCamelCase__			)
							self.assertIn(zs[2][0].detach().cpu().tolist()  ,					[self.EXPECTED_OUTPUT_0, self.EXPECTED_OUTPUT_0_PT_2]			)





		@slow
		def  _A							(							self      :		str			):
							lowerCAmelCase						:   str							=       False
							lowerCAmelCase						:   Any							=       JukeboxModel.from_pretrained(self.model_id  ,					min_duration=0			).eval()

							lowerCAmelCase						:   int							=       self.prepare_inputs()
							set_seed(0			)
							lowerCAmelCase						:   str							=       [torch.zeros(1  ,					0  ,					dtype=torch.long			) for _ in range(3			)]

							lowerCAmelCase						:   Optional[Any]							=       model.priors[0]
							lowerCAmelCase						:   Tuple							=       0
							lowerCAmelCase						:   Tuple							=       top_prior.get_music_tokens_conds(lowerCamelCase__  ,					start=lowerCamelCase__  ,					end=start + top_prior.n_ctx			)
							lowerCAmelCase						:   List[str]							=       top_prior.get_metadata(labels[0].clone()  ,					lowerCamelCase__  ,					1_0_5_8_3_0_4  ,					0			)

							self.assertIsNone(lowerCamelCase__			)
							self.assertListEqual(metadata.numpy()[0][:1_0].tolist()  ,					self.EXPECTED_Y_COND			)

							lowerCAmelCase		,							lowerCAmelCase		,							lowerCAmelCase						:   Dict							=       top_prior.get_cond(lowerCamelCase__  ,					lowerCamelCase__			)
							torch.testing.assert_allclose(
							    audio_conditioning[0][0][:3_0].detach()  ,					torch.tensor(self.EXPECTED_AUDIO_COND			)  ,					atol=1E-4  ,					rtol=1E-4			)
							torch.testing.assert_allclose(
							    metadata_conditioning[0][0][:3_0].detach()  ,					torch.tensor(self.EXPECTED_META_COND			)  ,					atol=1E-4  ,					rtol=1E-4			)
							torch.testing.assert_allclose(
							    lyric_tokens[0, :3_0].detach()  ,					torch.tensor(self.EXPECTED_LYRIC_COND			)  ,					atol=1E-4  ,					rtol=1E-4			)





		@slow
		def  _A							(							self      :		List[str]			):
							lowerCAmelCase						:   Tuple							=       False

							lowerCAmelCase						:   Optional[int]							=       JukeboxModel.from_pretrained(self.model_id  ,					min_duration=0			).eval()
							set_seed(0			)
							lowerCAmelCase						:   Union[str, Any]							=       torch.rand((1, 5_1_2_0, 1)			)
							lowerCAmelCase						:   Optional[int]							=       list(self.prepare_inputs()			)

							lowerCAmelCase						:   List[str]							=       [model.vqvae.encode(lowerCamelCase__  ,					start_level=2  ,					bs_chunks=waveform.shape[0]			)[0], None, None]
							lowerCAmelCase						:   List[Any]							=       model._sample(
							    lowerCamelCase__  ,					lowerCamelCase__  ,					sample_levels=[0]  ,					save_results=lowerCamelCase__  ,					sample_length=4_0 * model.priors[0].raw_to_tokens			)
							torch.testing.assert_allclose(zs[0][0][:4_0]  ,					torch.tensor(self.EXPECTED_PRIMED_0			)			)

							lowerCAmelCase						:   List[Any]							=       torch.cat((zs[0], torch.zeros(1  ,					2_0_4_8 - zs[0].shape[-1]			))  ,					dim=-1			).long()
							lowerCAmelCase						:   List[str]							=       [upper_a, model.vqvae.encode(lowerCamelCase__  ,					start_level=1  ,					bs_chunks=waveform.shape[0]			)[0], None]
							lowerCAmelCase						:   List[Any]							=       model._sample(
							    lowerCamelCase__  ,					lowerCamelCase__  ,					sample_levels=[1]  ,					save_results=lowerCamelCase__  ,					sample_length=4_0 * model.priors[1].raw_to_tokens			)
							torch.testing.assert_allclose(zs[1][0][:4_0]  ,					torch.tensor(self.EXPECTED_PRIMED_1			)			)

							lowerCAmelCase						:   Any							=       torch.cat((zs[1], torch.zeros(1  ,					2_0_4_8 - zs[1].shape[-1]			))  ,					dim=-1			).long()
							lowerCAmelCase						:   str							=       [upper_a, upper_a, model.vqvae.encode(lowerCamelCase__  ,					start_level=0  ,					bs_chunks=waveform.shape[0]			)[0]]
							lowerCAmelCase						:   List[Any]							=       model._sample(
							    lowerCamelCase__  ,					lowerCamelCase__  ,					sample_levels=[2]  ,					save_results=lowerCamelCase__  ,					sample_length=4_0 * model.priors[2].raw_to_tokens			)
							torch.testing.assert_allclose(zs[2][0][:4_0].cpu()  ,					torch.tensor(self.EXPECTED_PRIMED_2			)			)





		@slow
		def  _A							(							self      :		Any			):
							lowerCAmelCase						:   Any							=       JukeboxModel.from_pretrained(self.model_id  ,					min_duration=0			).eval()
							set_seed(0			)
							lowerCAmelCase						:   Tuple							=       torch.rand((1, 5_1_2_0, 1)			)
							with torch.no_grad():
												lowerCAmelCase						:   Tuple							=       model.vqvae.encode(lowerCamelCase__  ,					start_level=2  ,					bs_chunks=x.shape[0]			)
							torch.testing.assert_allclose(zs[0][0]  ,					torch.tensor(self.EXPECTED_VQVAE_ENCODE			)			)

							with torch.no_grad():
												lowerCAmelCase						:   int							=       model.vqvae.decode(lowerCamelCase__  ,					start_level=2  ,					bs_chunks=x.shape[0]			)
							torch.testing.assert_allclose(x[0, :4_0, 0]  ,					torch.tensor(self.EXPECTED_VQVAE_DECODE			)  ,					atol=1E-4  ,					rtol=1E-4			)



@require_torch
class 						__magic_name__				(  unittest.TestCase      ):
		_lowerCAmelCase						=		(JukeboxModel,) if is_torch_available() else ()
		_lowerCAmelCase						=		"openai/jukebox-5b-lyrics"
		_lowerCAmelCase						=		{
		    "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    ",
		}

		# fmt: off
		_lowerCAmelCase						=		[
		    1_489, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    1_489, 1_489, 1_489, 1_489, 1_150, 1_853, 1_509, 1_150, 1_357, 1_509, 6, 1_272
		]
		_lowerCAmelCase						=		[
		    1_489, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653
		]

		_lowerCAmelCase						=		[
		    1_125, 416, 1_125, 1_125, 1_125, 1_125, 1_125, 416, 416, 416, 416, 416,
		    416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
		    416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
		    416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
		    416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416
		]
		_lowerCAmelCase						=		[
		    416, 416, 1_125, 1_125, 416, 416, 416, 416, 416, 416, 416, 416, 416,
		    416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
		    416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
		    416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
		    416, 416, 416, 416, 416, 416, 416, 416
		]

		_lowerCAmelCase						=		[
		    1_755, 1_061, 234, 1_755, 1_061, 1_755, 185, 290, 307, 307, 616, 616,
		    616, 616, 616, 616, 307, 290, 417, 1_755, 234, 1_755, 185, 290,
		    290, 290, 307, 616, 616, 616, 616, 616, 290, 234, 234, 1_755,
		    234, 234, 1_755, 234, 185, 185, 307, 616, 616, 616, 616, 290,
		    1_755, 1_755, 1_755, 234, 234, 1_755, 1_572, 290, 307, 616, 34, 616
		]
		_lowerCAmelCase						=		[
		    854, 842, 1_353, 114, 1_353, 842, 185, 842, 185, 114, 591, 842, 185,
		    417, 185, 842, 307, 842, 591, 842, 185, 842, 185, 842, 591, 842,
		    1_353, 842, 185, 842, 591, 842, 591, 114, 591, 842, 185, 842, 591,
		    89, 591, 842, 591, 842, 591, 417, 1_372, 842, 1_372, 842, 34, 842,
		    185, 89, 591, 842, 185, 842, 591, 632
		]

		_lowerCAmelCase						=		[
		    1_489, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653
		]
		_lowerCAmelCase						=		[
		    1_489, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653,
		    653, 653, 653, 653, 653, 653, 653, 1_853, 1_177, 1_536, 1_228,
		    710, 475, 1_489, 1_229, 1_224, 231, 1_224, 252, 1_434, 653, 475,
		    1_106, 1_877, 1_599, 1_228, 1_600, 1_683, 1_182, 1_853, 475, 1_864,
		    252, 1_229, 1_434, 2_001
		]

		_lowerCAmelCase						=		[
		    1_125, 1_125, 416, 1_125, 1_125, 416, 1_125, 1_125, 416, 416, 1_125, 416,
		    416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
		    416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
		    416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
		    416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416
		]
		_lowerCAmelCase						=		[
		    491, 1_755, 34, 1_613, 1_755, 417, 992, 1_613, 222, 842, 1_353, 1_613,
		    844, 632, 185, 1_613, 844, 632, 185, 1_613, 185, 842, 677, 1_613,
		    185, 114, 1_353, 1_613, 307, 89, 844, 1_613, 307, 1_332, 234, 1_979,
		    307, 89, 1_353, 616, 34, 842, 185, 842, 34, 842, 185, 842,
		    307, 114, 185, 89, 34, 1_268, 185, 89, 34, 842, 185, 89
		]





		def  _A							(							self      :		List[Any]  ,					lowerCamelCase__      :		int			):
							lowerCAmelCase						:   Any							=       JukeboxTokenizer.from_pretrained(lowerCamelCase__			)
							lowerCAmelCase						:   List[Any]							=       tokenizer(**self.metas			)['''input_ids''']
							return tokens





		@slow
		def  _A							(							self      :		int			):
							lowerCAmelCase						:   Any							=       JukeboxModel.from_pretrained(self.model_id  ,					min_duration=0			).eval()
							lowerCAmelCase						:   Dict							=       self.prepare_inputs(self.model_id			)

							set_seed(0			)
							lowerCAmelCase						:   List[str]							=       [torch.zeros(1  ,					0  ,					dtype=torch.long			).cpu() for _ in range(3			)]
							lowerCAmelCase						:   Tuple							=       model._sample(lowerCamelCase__  ,					lowerCamelCase__  ,					[0]  ,					sample_length=6_0 * model.priors[0].raw_to_tokens  ,					save_results=lowerCamelCase__			)
							self.assertIn(zs[0][0].detach().cpu().tolist()  ,					[self.EXPECTED_OUTPUT_2, self.EXPECTED_OUTPUT_2_PT_2]			)

							set_seed(0			)
							lowerCAmelCase						:   int							=       model._sample(lowerCamelCase__  ,					lowerCamelCase__  ,					[1]  ,					sample_length=6_0 * model.priors[1].raw_to_tokens  ,					save_results=lowerCamelCase__			)
							self.assertIn(zs[1][0].detach().cpu().tolist()  ,					[self.EXPECTED_OUTPUT_1, self.EXPECTED_OUTPUT_1_PT_2]			)

							set_seed(0			)
							lowerCAmelCase						:   Dict							=       model._sample(lowerCamelCase__  ,					lowerCamelCase__  ,					[2]  ,					sample_length=6_0 * model.priors[2].raw_to_tokens  ,					save_results=lowerCamelCase__			)
							self.assertIn(zs[2][0].detach().cpu().tolist()  ,					[self.EXPECTED_OUTPUT_0, self.EXPECTED_OUTPUT_0_PT_2]			)





		@slow
		@skip('''Not enough GPU memory on CI runners'''			)
		def  _A							(							self      :		str			):
							lowerCAmelCase						:   int							=       JukeboxModel.from_pretrained(self.model_id  ,					min_duration=0			).eval()
							lowerCAmelCase						:   Optional[int]							=       [i.cuda() for i in self.prepare_inputs(self.model_id			)]

							set_seed(0			)
							model.priors[0].cuda()
							lowerCAmelCase						:   List[str]							=       [torch.zeros(1  ,					0  ,					dtype=torch.long			).cuda() for _ in range(3			)]
							lowerCAmelCase						:   int							=       model._sample(lowerCamelCase__  ,					lowerCamelCase__  ,					[0]  ,					sample_length=6_0 * model.priors[0].raw_to_tokens  ,					save_results=lowerCamelCase__			)
							torch.testing.assert_allclose(zs[0][0].cpu()  ,					torch.tensor(self.EXPECTED_GPU_OUTPUTS_2			)			)
							model.priors[0].cpu()

							set_seed(0			)
							model.priors[1].cuda()
							lowerCAmelCase						:   int							=       model._sample(lowerCamelCase__  ,					lowerCamelCase__  ,					[1]  ,					sample_length=6_0 * model.priors[1].raw_to_tokens  ,					save_results=lowerCamelCase__			)
							torch.testing.assert_allclose(zs[1][0].cpu()  ,					torch.tensor(self.EXPECTED_GPU_OUTPUTS_1			)			)
							model.priors[1].cpu()

							set_seed(0			)
							model.priors[2].cuda()
							lowerCAmelCase						:   int							=       model._sample(lowerCamelCase__  ,					lowerCamelCase__  ,					[2]  ,					sample_length=6_0 * model.priors[2].raw_to_tokens  ,					save_results=lowerCamelCase__			)
							torch.testing.assert_allclose(zs[2][0].cpu()  ,					torch.tensor(self.EXPECTED_GPU_OUTPUTS_0			)			)





		@slow
		def  _A							(							self      :		Tuple			):
							lowerCAmelCase						:   Dict							=       '''ArthurZ/jukebox_prior_0'''
							lowerCAmelCase						:   Tuple							=       JukeboxPrior.from_pretrained(lowerCamelCase__  ,					min_duration=0			).eval().half().to('''cuda'''			)

							lowerCAmelCase						:   List[str]							=       self.prepare_inputs(lowerCamelCase__			)[0].cuda()
							lowerCAmelCase						:   int							=       model.get_metadata(lowerCamelCase__  ,					0  ,					7_6_8_0  ,					0			)
							set_seed(0			)
							lowerCAmelCase						:   str							=       model.sample(1  ,					metadata=lowerCamelCase__  ,					sample_tokens=6_0			)
							self.assertIn(outputs[0].cpu().tolist()  ,					[self.EXPECTED_GPU_OUTPUTS_2, self.EXPECTED_GPU_OUTPUTS_2_PT_2]			)
