



def 							_A			(  _UpperCAmelCase       :     int = 4_000_000					)       ->				int:







			'''simple docstring'''
			_UpperCAmelCase	 =     []
			_UpperCAmelCase ,  _UpperCAmelCase	 =     0, 1
			while b <= n:
						if b % 2 == 0:
									even_fibs.append(_UpperCAmelCase					)
						_UpperCAmelCase ,  _UpperCAmelCase	 =     b, a + b
			return sum(_UpperCAmelCase					)


if __name__ == "__main__":
							print(f"""{solution() = }""")





import argparse
import json
import os
from pathlib import Path

import requests
import torch

from transformers import JukeboxConfig, JukeboxModel
from transformers.utils import logging


logging.set_verbosity_info()
UpperCAmelCase__     = logging.get_logger(__name__)


UpperCAmelCase__     = "https://openaipublic.azureedge.net/jukebox/models/"
UpperCAmelCase__     = {
    "jukebox-1b-lyrics": [
        "5b/vqvae.pth.tar",
        "5b/prior_level_0.pth.tar",
        "5b/prior_level_1.pth.tar",
        "1b_lyrics/prior_level_2.pth.tar",
    ],
    "jukebox-5b-lyrics": [
        "5b/vqvae.pth.tar",
        "5b/prior_level_0.pth.tar",
        "5b/prior_level_1.pth.tar",
        "5b_lyrics/prior_level_2.pth.tar",
    ],
}





def 							A			(  _UpperCAmelCase       :     List[str]					)       ->				Tuple:







			'''simple docstring'''
			if key.endswith('.model.1.bias'					) and len(key.split('.'					)					) > 10:
						_UpperCAmelCase	 =     key.replace('.model.1.bias'							,     '.conv1d_1.bias'					)
			elif key.endswith('.model.1.weight'					) and len(key.split('.'					)					) > 10:
						_UpperCAmelCase	 =     key.replace('.model.1.weight'							,     '.conv1d_1.weight'					)
			elif key.endswith('.model.3.bias'					) and len(key.split('.'					)					) > 10:
						_UpperCAmelCase	 =     key.replace('.model.3.bias'							,     '.conv1d_2.bias'					)
			elif key.endswith('.model.3.weight'					) and len(key.split('.'					)					) > 10:
						_UpperCAmelCase	 =     key.replace('.model.3.weight'							,     '.conv1d_2.weight'					)

			if "conditioner_blocks.0." in key:
						_UpperCAmelCase	 =     key.replace('conditioner_blocks.0'							,     'conditioner_blocks'					)

			if "prime_prior" in key:
						_UpperCAmelCase	 =     key.replace('prime_prior'							,     'encoder'					)

			if ".emb." in key and "total" not in key and "absolute" not in key and "relative" not in key:
						_UpperCAmelCase	 =     key.replace('.emb.'							,     '.'					)

			if key.endswith('k'					):  # replace vqvae.X.k with vqvae.X.codebook
						return key.replace('.k'							,     '.codebook'					)
			if "y_emb." in key:
						return key.replace('y_emb.'							,     'metadata_embedding.'					)

			if "x_emb.emb." in key:
						_UpperCAmelCase	 =     key.replace('0.x_emb.emb'							,     'embed_tokens'					)

			if "prime_state_ln" in key:
						return key.replace('prime_state_ln'							,     'encoder.final_layer_norm'					)
			if ".ln" in key:
						return key.replace('.ln'							,     '.layer_norm'					)
			if "_ln" in key:
						return key.replace('_ln'							,     '_layer_norm'					)

			if "prime_state_proj" in key:
						return key.replace('prime_state_proj'							,     'encoder.proj_in'					)
			if "prime_x_out" in key:
						return key.replace('prime_x_out'							,     'encoder.lm_head'					)
			if "prior.x_out" in key:
						return key.replace('x_out'							,     'fc_proj_out'					)
			if "x_emb" in key:
						return key.replace('x_emb'							,     'embed_tokens'					)

			return key





def 							A			(  _UpperCAmelCase       :     str							,     _UpperCAmelCase       :     str							,     _UpperCAmelCase       :     Tuple							,     _UpperCAmelCase       :     List[Any]					)       ->				Tuple:







			'''simple docstring'''
			_UpperCAmelCase	 =     {}
			import re

			_UpperCAmelCase	 =     re.compile(R'encoders.(\d*).level_blocks.(\d*).model.(\d*).(\d).(bias|weight)'					)
			_UpperCAmelCase	 =     re.compile(
			    R'encoders.(\d*).level_blocks.(\d*).model.(\d*).(\d).model.(\d*).model.(\d*).(bias|weight)'					)
			_UpperCAmelCase	 =     re.compile(R'encoders.(\d*).level_blocks.(\d*).model.(\d*).(bias|weight)'					)

			_UpperCAmelCase	 =     re.compile(R'decoders.(\d*).level_blocks.(\d*).model.(\d*).(\d).(bias|weight)'					)
			_UpperCAmelCase	 =     re.compile(
			    R'decoders.(\d*).level_blocks.(\d*).model.(\d*).(\d).model.(\d*).model.(\d*).(bias|weight)'					)
			_UpperCAmelCase	 =     re.compile(R'decoders.(\d*).level_blocks.(\d*).model.(\d*).(bias|weight)'					)

			_UpperCAmelCase	 =     re.compile(R'conditioner_blocks.(\d*).cond.model.(\d*).(\d).(bias|weight)'					)
			_UpperCAmelCase	 =     re.compile(
			    R'conditioner_blocks.(\d*).cond.model.(\d*).(\d).model.(\d*).model.(\d*).(bias|weight)'					)
			_UpperCAmelCase	 =     re.compile(R'conditioner_blocks.(\d*).cond.model.(\d*).(bias|weight)'					)

			for original_key, value in state_dict.items():
						# rename vqvae.encoder keys
						if re_encoder_block_conv_in.fullmatch(_UpperCAmelCase					):
									_UpperCAmelCase	 =     re_encoder_block_conv_in.match(_UpperCAmelCase					)
									_UpperCAmelCase	 =     regex_match.groups()
									_UpperCAmelCase	 =     int(groups[2]					) * 2 + int(groups[3]					)
									_UpperCAmelCase	 =     F"encoders.{groups[0]}.level_blocks.{groups[1]}.downsample_block.{block_index}.{groups[-1]}"
									_UpperCAmelCase	 =     re_encoder_block_conv_in.sub(_UpperCAmelCase							,     _UpperCAmelCase					)

						elif re_encoder_block_resnet.fullmatch(_UpperCAmelCase					):
									_UpperCAmelCase	 =     re_encoder_block_resnet.match(_UpperCAmelCase					)
									_UpperCAmelCase	 =     regex_match.groups()
									_UpperCAmelCase	 =     int(groups[2]					) * 2 + int(groups[3]					)
									_UpperCAmelCase	 =     {'1': 1, '3': 2}[groups[-2]]
									_UpperCAmelCase	 =     F"encoders.{groups[0]}.level_blocks.{groups[1]}.downsample_block.{block_index}."
									_UpperCAmelCase	 =     F"resnet_block.{groups[-3]}.conv1d_{conv_index}.{groups[-1]}"
									_UpperCAmelCase	 =     prefix + resnet_block
									_UpperCAmelCase	 =     re_encoder_block_resnet.sub(_UpperCAmelCase							,     _UpperCAmelCase					)

						elif re_encoder_block_proj_out.fullmatch(_UpperCAmelCase					):
									_UpperCAmelCase	 =     re_encoder_block_proj_out.match(_UpperCAmelCase					)
									_UpperCAmelCase	 =     regex_match.groups()
									_UpperCAmelCase	 =     F"encoders.{groups[0]}.level_blocks.{groups[1]}.proj_out.{groups[-1]}"
									_UpperCAmelCase	 =     re_encoder_block_proj_out.sub(_UpperCAmelCase							,     _UpperCAmelCase					)

						# rename vqvae.decoder keys
						elif re_decoder_block_conv_out.fullmatch(_UpperCAmelCase					):
									_UpperCAmelCase	 =     re_decoder_block_conv_out.match(_UpperCAmelCase					)
									_UpperCAmelCase	 =     regex_match.groups()
									_UpperCAmelCase	 =     int(groups[2]					) * 2 + int(groups[3]					) - 2
									_UpperCAmelCase	 =     F"decoders.{groups[0]}.level_blocks.{groups[1]}.upsample_block.{block_index}.{groups[-1]}"
									_UpperCAmelCase	 =     re_decoder_block_conv_out.sub(_UpperCAmelCase							,     _UpperCAmelCase					)

						elif re_decoder_block_resnet.fullmatch(_UpperCAmelCase					):
									_UpperCAmelCase	 =     re_decoder_block_resnet.match(_UpperCAmelCase					)
									_UpperCAmelCase	 =     regex_match.groups()
									_UpperCAmelCase	 =     int(groups[2]					) * 2 + int(groups[3]					) - 2
									_UpperCAmelCase	 =     {'1': 1, '3': 2}[groups[-2]]
									_UpperCAmelCase	 =     F"decoders.{groups[0]}.level_blocks.{groups[1]}.upsample_block.{block_index}."
									_UpperCAmelCase	 =     F"resnet_block.{groups[-3]}.conv1d_{conv_index}.{groups[-1]}"
									_UpperCAmelCase	 =     prefix + resnet_block
									_UpperCAmelCase	 =     re_decoder_block_resnet.sub(_UpperCAmelCase							,     _UpperCAmelCase					)

						elif re_decoder_block_proj_in.fullmatch(_UpperCAmelCase					):
									_UpperCAmelCase	 =     re_decoder_block_proj_in.match(_UpperCAmelCase					)
									_UpperCAmelCase	 =     regex_match.groups()
									_UpperCAmelCase	 =     F"decoders.{groups[0]}.level_blocks.{groups[1]}.proj_in.{groups[-1]}"
									_UpperCAmelCase	 =     re_decoder_block_proj_in.sub(_UpperCAmelCase							,     _UpperCAmelCase					)

						# rename prior cond.model to upsampler.upsample_block and resnet
						elif re_prior_cond_conv_out.fullmatch(_UpperCAmelCase					):
									_UpperCAmelCase	 =     re_prior_cond_conv_out.match(_UpperCAmelCase					)
									_UpperCAmelCase	 =     regex_match.groups()
									_UpperCAmelCase	 =     int(groups[1]					) * 2 + int(groups[2]					) - 2
									_UpperCAmelCase	 =     F"conditioner_blocks.upsampler.upsample_block.{block_index}.{groups[-1]}"
									_UpperCAmelCase	 =     re_prior_cond_conv_out.sub(_UpperCAmelCase							,     _UpperCAmelCase					)

						elif re_prior_cond_resnet.fullmatch(_UpperCAmelCase					):
									_UpperCAmelCase	 =     re_prior_cond_resnet.match(_UpperCAmelCase					)
									_UpperCAmelCase	 =     regex_match.groups()
									_UpperCAmelCase	 =     int(groups[1]					) * 2 + int(groups[2]					) - 2
									_UpperCAmelCase	 =     {'1': 1, '3': 2}[groups[-2]]
									_UpperCAmelCase	 =     F"conditioner_blocks.upsampler.upsample_block.{block_index}."
									_UpperCAmelCase	 =     F"resnet_block.{groups[-3]}.conv1d_{conv_index}.{groups[-1]}"
									_UpperCAmelCase	 =     prefix + resnet_block
									_UpperCAmelCase	 =     re_prior_cond_resnet.sub(_UpperCAmelCase							,     _UpperCAmelCase					)

						elif re_prior_cond_proj_in.fullmatch(_UpperCAmelCase					):
									_UpperCAmelCase	 =     re_prior_cond_proj_in.match(_UpperCAmelCase					)
									_UpperCAmelCase	 =     regex_match.groups()
									_UpperCAmelCase	 =     F"conditioner_blocks.upsampler.proj_in.{groups[-1]}"
									_UpperCAmelCase	 =     re_prior_cond_proj_in.sub(_UpperCAmelCase							,     _UpperCAmelCase					)

						# keep original key
						else:
									_UpperCAmelCase	 =     original_key

						_UpperCAmelCase	 =     replace_key(_UpperCAmelCase					)

						if F"{key_prefix}.{key}" not in model_state_dict or key is None:
									print(F"failed converting {original_key} to {key}, does not match"					)

						# handle missmatched shape
						elif value.shape != model_state_dict[F"{key_prefix}.{key}"].shape:
									_UpperCAmelCase	 =     model_state_dict[F"{key_prefix}.{key}"]
									print(F"{original_key}-> {key} : \nshape {val.shape} and { value.shape}, do not match"					)
									_UpperCAmelCase	 =     original_key

						_UpperCAmelCase	 =     original_key
						_UpperCAmelCase	 =     value

			return new_dict





@torch.no_grad()
def 							A			(  _UpperCAmelCase       :     List[str]=None							,     _UpperCAmelCase       :     Dict=None					)       ->				Dict:







			'''simple docstring'''
			for file in MODEL_MAPPING[model_name]:
						if not os.path.isfile(F"{pytorch_dump_folder_path}/{file.split('/'					)[-1]}"					):
									_UpperCAmelCase	 =     requests.get(F"{PREFIX}{file}"							,     allow_redirects=_UpperCAmelCase					)
									os.makedirs(F"{pytorch_dump_folder_path}/"							,     exist_ok=_UpperCAmelCase					)
									open(F"{pytorch_dump_folder_path}/{file.split('/'					)[-1]}"							,     'wb'					).write(r.content					)

			_UpperCAmelCase	 =     MODEL_MAPPING[model_name.split('/'					)[-1]]

			_UpperCAmelCase	 =     JukeboxConfig.from_pretrained(_UpperCAmelCase					)
			_UpperCAmelCase	 =     JukeboxModel(_UpperCAmelCase					)

			_UpperCAmelCase	 =     []
			_UpperCAmelCase	 =     {}
			for i, dict_name in enumerate(_UpperCAmelCase					):
						_UpperCAmelCase	 =     torch.load(F"{pytorch_dump_folder_path}/{dict_name.split('/'					)[-1]}"					)['model']

						_UpperCAmelCase	 =     {}
						for k in old_dic.keys():
									if k.endswith('.b'					):
												_UpperCAmelCase	 =     old_dic[k]
									elif k.endswith('.w'					):
												_UpperCAmelCase	 =     old_dic[k]
									elif "level_2" not in dict_name and "cond.model." in k:
												_UpperCAmelCase	 =     old_dic[k]
									else:
												_UpperCAmelCase	 =     old_dic[k]

						_UpperCAmelCase	 =     'vqvae' if i == 0 else F"priors.{3 - i}"
						_UpperCAmelCase	 =     fix_jukebox_keys(_UpperCAmelCase							,     model.state_dict()							,     _UpperCAmelCase							,     _UpperCAmelCase					)
						weight_dict.append(_UpperCAmelCase					)

			_UpperCAmelCase	 =     weight_dict.pop(0					)
			model.vqvae.load_state_dict(_UpperCAmelCase					)
			for i in range(len(_UpperCAmelCase					)					):
						model.priors[i].load_state_dict(weight_dict[2 - i]					)

			Path(_UpperCAmelCase					).mkdir(exist_ok=_UpperCAmelCase					)
			with open(F"{pytorch_dump_folder_path}/mapping.json"							,     'w'					) as txtfile:
						json.dump(_UpperCAmelCase							,     _UpperCAmelCase					)

			print(F"Saving model {model_name} to {pytorch_dump_folder_path}"					)
			model.save_pretrained(_UpperCAmelCase					)

			return weight_dict


if __name__ == "__main__":
							UpperCAmelCase__     = argparse.ArgumentParser()
							# Required parameters
							parser.add_argument(
							    "--model_name",
							    default="jukebox-5b-lyrics",
							    type=str,
							    help="Name of the model you'd like to convert.",
							)
							parser.add_argument(
							    "--pytorch_dump_folder_path",
							    default="jukebox-5b-lyrics-converted",
							    type=str,
							    help="Path to the output PyTorch model directory.",
							)
							UpperCAmelCase__     = parser.parse_args()
							convert_openai_checkpoint(args.model_name, args.pytorch_dump_folder_path)
