




import argparse
import json
from collections import OrderedDict

import torch
from huggingface_hub import cached_download, hf_hub_url

from transformers import AutoImageProcessor, CvtConfig, CvtForImageClassification




def 		lowerCAmelCase_ (						lowerCamelCase ):
				__magic_name__						:						Tuple										=[]
				embed.append(
				    (
				        F"cvt.encoder.stages.{idx}.embedding.convolution_embeddings.projection.weight",
				        F"stage{idx}.patch_embed.proj.weight",
				    ) )
				embed.append(
				    (
				        F"cvt.encoder.stages.{idx}.embedding.convolution_embeddings.projection.bias",
				        F"stage{idx}.patch_embed.proj.bias",
				    ) )
				embed.append(
				    (
				        F"cvt.encoder.stages.{idx}.embedding.convolution_embeddings.normalization.weight",
				        F"stage{idx}.patch_embed.norm.weight",
				    ) )
				embed.append(
				    (
				        F"cvt.encoder.stages.{idx}.embedding.convolution_embeddings.normalization.bias",
				        F"stage{idx}.patch_embed.norm.bias",
				    ) )
				return embed




def 		lowerCAmelCase_ (						lowerCamelCase						,  lowerCamelCase ):
				__magic_name__						:						List[Any]										=[]
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_query.convolution_projection.convolution.weight",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_q.conv.weight",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_query.convolution_projection.normalization.weight",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_q.bn.weight",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_query.convolution_projection.normalization.bias",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_q.bn.bias",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_query.convolution_projection.normalization.running_mean",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_q.bn.running_mean",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_query.convolution_projection.normalization.running_var",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_q.bn.running_var",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_query.convolution_projection.normalization.num_batches_tracked",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_q.bn.num_batches_tracked",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_key.convolution_projection.convolution.weight",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_k.conv.weight",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_key.convolution_projection.normalization.weight",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_k.bn.weight",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_key.convolution_projection.normalization.bias",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_k.bn.bias",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_key.convolution_projection.normalization.running_mean",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_k.bn.running_mean",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_key.convolution_projection.normalization.running_var",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_k.bn.running_var",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_key.convolution_projection.normalization.num_batches_tracked",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_k.bn.num_batches_tracked",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_value.convolution_projection.convolution.weight",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_v.conv.weight",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_value.convolution_projection.normalization.weight",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_v.bn.weight",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_value.convolution_projection.normalization.bias",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_v.bn.bias",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_value.convolution_projection.normalization.running_mean",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_v.bn.running_mean",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_value.convolution_projection.normalization.running_var",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_v.bn.running_var",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.convolution_projection_value.convolution_projection.normalization.num_batches_tracked",
				        F"stage{idx}.blocks.{cnt}.attn.conv_proj_v.bn.num_batches_tracked",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.projection_query.weight",
				        F"stage{idx}.blocks.{cnt}.attn.proj_q.weight",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.projection_query.bias",
				        F"stage{idx}.blocks.{cnt}.attn.proj_q.bias",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.projection_key.weight",
				        F"stage{idx}.blocks.{cnt}.attn.proj_k.weight",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.projection_key.bias",
				        F"stage{idx}.blocks.{cnt}.attn.proj_k.bias",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.projection_value.weight",
				        F"stage{idx}.blocks.{cnt}.attn.proj_v.weight",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.attention.projection_value.bias",
				        F"stage{idx}.blocks.{cnt}.attn.proj_v.bias",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.output.dense.weight",
				        F"stage{idx}.blocks.{cnt}.attn.proj.weight",
				    ) )
				attention_weights.append(
				    (
				        F"cvt.encoder.stages.{idx}.layers.{cnt}.attention.output.dense.bias",
				        F"stage{idx}.blocks.{cnt}.attn.proj.bias",
				    ) )
				attention_weights.append(
				    (F"cvt.encoder.stages.{idx}.layers.{cnt}.intermediate.dense.weight", F"stage{idx}.blocks.{cnt}.mlp.fc1.weight") )
				attention_weights.append(
				    (F"cvt.encoder.stages.{idx}.layers.{cnt}.intermediate.dense.bias", F"stage{idx}.blocks.{cnt}.mlp.fc1.bias") )
				attention_weights.append(
				    (F"cvt.encoder.stages.{idx}.layers.{cnt}.output.dense.weight", F"stage{idx}.blocks.{cnt}.mlp.fc2.weight") )
				attention_weights.append(
				    (F"cvt.encoder.stages.{idx}.layers.{cnt}.output.dense.bias", F"stage{idx}.blocks.{cnt}.mlp.fc2.bias") )
				attention_weights.append(
				    (F"cvt.encoder.stages.{idx}.layers.{cnt}.layernorm_before.weight", F"stage{idx}.blocks.{cnt}.norm1.weight") )
				attention_weights.append(
				    (F"cvt.encoder.stages.{idx}.layers.{cnt}.layernorm_before.bias", F"stage{idx}.blocks.{cnt}.norm1.bias") )
				attention_weights.append(
				    (F"cvt.encoder.stages.{idx}.layers.{cnt}.layernorm_after.weight", F"stage{idx}.blocks.{cnt}.norm2.weight") )
				attention_weights.append(
				    (F"cvt.encoder.stages.{idx}.layers.{cnt}.layernorm_after.bias", F"stage{idx}.blocks.{cnt}.norm2.bias") )
				return attention_weights




def 		lowerCAmelCase_ (						lowerCamelCase ):
				__magic_name__						:						Optional[Any]										=[]
				token.append((F"cvt.encoder.stages.{idx}.cls_token", """stage2.cls_token""") )
				return token




def 		lowerCAmelCase_ (						):
				__magic_name__						:						Any										=[]
				head.append(("""layernorm.weight""", """norm.weight""") )
				head.append(("""layernorm.bias""", """norm.bias""") )
				head.append(("""classifier.weight""", """head.weight""") )
				head.append(("""classifier.bias""", """head.bias""") )
				return head




def 		lowerCAmelCase_ (						lowerCamelCase						,  lowerCamelCase						,  lowerCamelCase						,  lowerCamelCase ):
				__magic_name__						:						Dict										="""imagenet-1k-id2label.json"""
				__magic_name__						:						Union[str, Any]										=1000

				__magic_name__						:						int										="""huggingface/label-files"""
				__magic_name__						:						Optional[Any]										=num_labels
				__magic_name__						:						str										=json.load(open(cached_download(hf_hub_url(lowerCamelCase						,  lowerCamelCase						,  repo_type="""dataset""" ) )						,  """r""" ) )
				__magic_name__						:						Optional[Any]										={int(lowerCamelCase ): v for k, v in idalabel.items()}

				__magic_name__						:						List[str]										=idalabel
				__magic_name__						:						Optional[Any]										={v: k for k, v in idalabel.items()}

				__magic_name__						:						Dict										=CvtConfig(num_labels=lowerCamelCase						,  idalabel=lowerCamelCase						,  labelaid=lowerCamelCase )

				# For depth size 13 (13 = 1+2+10)
				if cvt_model.rsplit("""/"""						,  1 )[-1][4:6] == "13":
								__magic_name__						:						Tuple										=[1, 2, 10]

				# For depth size 21 (21 = 1+4+16)
				elif cvt_model.rsplit("""/"""						,  1 )[-1][4:6] == "21":
								__magic_name__						:						Optional[Any]										=[1, 4, 16]

				# For wide cvt (similar to wide-resnet) depth size 24 (w24 = 2 + 2 20)
				else:
								__magic_name__						:						int										=[2, 2, 20]
								__magic_name__						:						Tuple										=[3, 12, 16]
								__magic_name__						:						Optional[Any]										=[192, 768, 1024]

				__magic_name__						:						str										=CvtForImageClassification(lowerCamelCase )
				__magic_name__						:						Dict										=AutoImageProcessor.from_pretrained("""facebook/convnext-base-224-22k-1k""" )
				__magic_name__						:						str										=image_size
				__magic_name__						:						List[str]										=torch.load(lowerCamelCase						,  map_location=torch.device("""cpu""" ) )

				__magic_name__						:						int										=OrderedDict()
				__magic_name__						:						Optional[Any]										=[]

				for idx in range(len(config.depth ) ):
								if config.cls_token[idx]:
												__magic_name__						:						str										=list_of_state_dict + cls_token(lowerCamelCase )
								__magic_name__						:						List[str]										=list_of_state_dict + embeddings(lowerCamelCase )
								for cnt in range(config.depth[idx] ):
												__magic_name__						:						Optional[Any]										=list_of_state_dict + attention(lowerCamelCase						,  lowerCamelCase )

				__magic_name__						:						List[Any]										=list_of_state_dict + final()
				for gg in list_of_state_dict:
								print(lowerCamelCase )
				for i in range(len(lowerCamelCase ) ):
								__magic_name__						:						Optional[int]										=original_weights[list_of_state_dict[i][1]]

				model.load_state_dict(lowerCamelCase )
				model.save_pretrained(lowerCamelCase )
				image_processor.save_pretrained(lowerCamelCase )


# Download the weights from zoo: https://1drv.ms/u/s!AhIXJn_J-blW9RzF3rMW7SsLHa8h?e=blQ0Al

if __name__ == "__main__":
							UpperCAmelCase_		:					Union[str, Any]          =  argparse.ArgumentParser()
							parser.add_argument(
							    "--cvt_model",
							    default="cvt-w24",
							    type=str,
							    help="Name of the cvt model you'd like to convert.",
							)
							parser.add_argument(
							    "--image_size",
							    default=384,
							    type=int,
							    help="Input Image Size",
							)
							parser.add_argument(
							    "--cvt_file_name",
							    default=R"cvtmodels\CvT-w24-384x384-IN-22k.pth",
							    type=str,
							    help="Input Image Size",
							)
							parser.add_argument(
							    "--pytorch_dump_folder_path", default=None, type=str, help="Path to the output PyTorch model directory."
							)

							UpperCAmelCase_		:					Optional[int]          =  parser.parse_args()
							convert_cvt_checkpoint(args.cvt_model, args.image_size, args.cvt_file_name, args.pytorch_dump_folder_path)










import unittest

from transformers import JukeboxTokenizer
from transformers.testing_utils import require_torch


class 							UpperCamelCase_       (					unittest.TestCase	):

    '''simple docstring'''






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


    @require_torch
    def 			SCREAMING_SNAKE_CASE				(     self :      Dict)		->int:





           '''simple docstring'''

           import torch

           A__ 					=       JukeboxTokenizer.from_pretrained('''openai/jukebox-1b-lyrics''')
           A__ 					=       tokenizer(**self.metas)['''input_ids''']
           # fmt: off
           A__ 					=       [
               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 			SCREAMING_SNAKE_CASE				(     self :      List[str])		->Optional[int]:





           '''simple docstring'''

           import torch

           A__ 					=       JukeboxTokenizer.from_pretrained('''openai/jukebox-5b-lyrics''')
           A__ 					=       tokenizer(**self.metas)['''input_ids''']
           # fmt: off
           A__ 					=       [
               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]))


