




"""simple docstring"""







import argparse
import json
import os

import requests
import torch
from huggingface_hub import hf_hub_download
from PIL import Image

from transformers import ConvNextImageProcessor, ConvNextVaConfig, ConvNextVaForImageClassification
from transformers.image_utils import PILImageResampling
from transformers.utils import logging


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





def 							lowercase   (snake_case__				:	List[str]	)       ->					List[str]:


				'''simple docstring'''






				lowerCAmelCase		=			ConvNextVaConfig()

				if "atto" in checkpoint_url:
								lowerCAmelCase		=			[2, 2, 6, 2]
								lowerCAmelCase		=			[40, 80, 160, 320]
				if "femto" in checkpoint_url:
								lowerCAmelCase		=			[2, 2, 6, 2]
								lowerCAmelCase		=			[48, 96, 192, 384]
				if "pico" in checkpoint_url:
								lowerCAmelCase		=			[2, 2, 6, 2]
								lowerCAmelCase		=			[64, 128, 256, 512]
				if "nano" in checkpoint_url:
								lowerCAmelCase		=			[2, 2, 8, 2]
								lowerCAmelCase		=			[80, 160, 320, 640]
				if "tiny" in checkpoint_url:
								lowerCAmelCase		=			[3, 3, 9, 3]
								lowerCAmelCase		=			[96, 192, 384, 768]
				if "base" in checkpoint_url:
								lowerCAmelCase		=			[3, 3, 27, 3]
								lowerCAmelCase		=			[128, 256, 512, 1_024]
				if "large" in checkpoint_url:
								lowerCAmelCase		=			[3, 3, 27, 3]
								lowerCAmelCase		=			[192, 384, 768, 1_536]
				if "huge" in checkpoint_url:
								lowerCAmelCase		=			[3, 3, 27, 3]
								lowerCAmelCase		=			[352, 704, 1_408, 2_816]

				lowerCAmelCase		=			1_000
				lowerCAmelCase		=			"imagenet-1k-id2label.json"
				lowerCAmelCase		=			(1, 1_000)

				lowerCAmelCase		=			"huggingface/label-files"
				lowerCAmelCase		=			num_labels
				lowerCAmelCase		=			json.load(open(hf_hub_download(_a ,    _a ,    repo_type="""dataset"""	) ,    """r"""	)	)
				lowerCAmelCase		=			{int(_a	): v for k, v in idalabel.items()}

				lowerCAmelCase		=			idalabel
				lowerCAmelCase		=			{v: k for k, v in idalabel.items()}
				lowerCAmelCase		=			hidden_sizes
				lowerCAmelCase		=			depths

				return config, expected_shape





def 							lowercase   (snake_case__				:	Optional[Any]	)       ->					List[str]:


				'''simple docstring'''






				if "downsample_layers.0.0" in name:
								lowerCAmelCase		=			name.replace("""downsample_layers.0.0""" ,    """embeddings.patch_embeddings"""	)
				if "downsample_layers.0.1" in name:
								lowerCAmelCase		=			name.replace("""downsample_layers.0.1""" ,    """embeddings.norm"""	)  # we rename to layernorm later on
				if "downsample_layers.1.0" in name:
								lowerCAmelCase		=			name.replace("""downsample_layers.1.0""" ,    """stages.1.downsampling_layer.0"""	)
				if "downsample_layers.1.1" in name:
								lowerCAmelCase		=			name.replace("""downsample_layers.1.1""" ,    """stages.1.downsampling_layer.1"""	)
				if "downsample_layers.2.0" in name:
								lowerCAmelCase		=			name.replace("""downsample_layers.2.0""" ,    """stages.2.downsampling_layer.0"""	)
				if "downsample_layers.2.1" in name:
								lowerCAmelCase		=			name.replace("""downsample_layers.2.1""" ,    """stages.2.downsampling_layer.1"""	)
				if "downsample_layers.3.0" in name:
								lowerCAmelCase		=			name.replace("""downsample_layers.3.0""" ,    """stages.3.downsampling_layer.0"""	)
				if "downsample_layers.3.1" in name:
								lowerCAmelCase		=			name.replace("""downsample_layers.3.1""" ,    """stages.3.downsampling_layer.1"""	)
				if "stages" in name and "downsampling_layer" not in name:
								# stages.0.0. for instance should be renamed to stages.0.layers.0.
								lowerCAmelCase		=			name[: len("""stages.0"""	)] + ".layers" + name[len("""stages.0"""	) :]
				if "gamma" in name:
								lowerCAmelCase		=			name.replace("""gamma""" ,    """weight"""	)
				if "beta" in name:
								lowerCAmelCase		=			name.replace("""beta""" ,    """bias"""	)
				if "stages" in name:
								lowerCAmelCase		=			name.replace("""stages""" ,    """encoder.stages"""	)
				if "norm" in name:
								lowerCAmelCase		=			name.replace("""norm""" ,    """layernorm"""	)
				if "head" in name:
								lowerCAmelCase		=			name.replace("""head""" ,    """classifier"""	)

				return name





def 							lowercase   ()       ->					Union[str, Any]:


				'''simple docstring'''






				lowerCAmelCase		=			"http://images.cocodataset.org/val2017/000000039769.jpg"
				lowerCAmelCase		=			Image.open(requests.get(_a ,    stream=_a	).raw	)
				return im





def 							lowercase   (snake_case__				:	List[Any]	)       ->					Dict:


				'''simple docstring'''






				if "224" in checkpoint_url:
								lowerCAmelCase		=			224
								lowerCAmelCase		=			224 / 256
				elif "384" in checkpoint_url:
								lowerCAmelCase		=			384
								lowerCAmelCase		=			None
				else:
								lowerCAmelCase		=			512
								lowerCAmelCase		=			None

				return ConvNextImageProcessor(
				    size=_a ,    crop_pct=_a ,    image_mean=[0.485, 0.456, 0.406] ,    image_std=[0.229, 0.224, 0.225] ,    resample=PILImageResampling.BICUBIC ,    )





@torch.no_grad()
def 							lowercase   (snake_case__				:	Tuple ,    snake_case__				:	Union[str, Any] ,    snake_case__				:	int ,    snake_case__				:	int	)       ->					Any:


				'''simple docstring'''






				print("""Downloading original model from checkpoint..."""	)
				# define ConvNeXTV2 configuration based on URL
				lowerCAmelCase		=			get_convnextva_config(_a	)
				# load original state_dict from URL
				lowerCAmelCase		=			torch.hub.load_state_dict_from_url(_a	)["model"]

				print("""Converting model parameters..."""	)
				# rename keys
				for key in state_dict.copy().keys():
								lowerCAmelCase		=			state_dict.pop(_a	)
								lowerCAmelCase		=			val
				# add prefix to all keys expect classifier head
				for key in state_dict.copy().keys():
								lowerCAmelCase		=			state_dict.pop(_a	)
								if not key.startswith("""classifier"""	):
												lowerCAmelCase		=			"convnextv2." + key
								lowerCAmelCase		=			val

				# load HuggingFace model
				lowerCAmelCase		=			ConvNextVaForImageClassification(_a	)
				model.load_state_dict(_a	)
				model.eval()

				# Check outputs on an image, prepared by ConvNextImageProcessor
				lowerCAmelCase		=			convert_preprocessor(_a	)
				lowerCAmelCase		=			preprocessor(images=prepare_img() ,    return_tensors="""pt"""	)
				lowerCAmelCase		=			model(**_a	).logits

				# note: the logits below were obtained without center cropping
				if checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_atto_1k_224_ema.pt":
								lowerCAmelCase		=			torch.tensor([-0.3_930, 0.1_747, -0.5_246, 0.4_177, 0.4_295]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_femto_1k_224_ema.pt":
								lowerCAmelCase		=			torch.tensor([-0.1_727, -0.5_341, -0.7_818, -0.4_745, -0.6_566]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_pico_1k_224_ema.pt":
								lowerCAmelCase		=			torch.tensor([-0.0_333, 0.1_563, -0.9_137, 0.1_054, 0.0_381]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_nano_1k_224_ema.pt":
								lowerCAmelCase		=			torch.tensor([-0.1_744, -0.1_555, -0.0_713, 0.0_950, -0.1_431]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_tiny_1k_224_ema.pt":
								lowerCAmelCase		=			torch.tensor([0.9_996, 0.1_966, -0.4_386, -0.3_472, 0.6_661]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_base_1k_224_ema.pt":
								lowerCAmelCase		=			torch.tensor([-0.2_553, -0.6_708, -0.1_359, 0.2_518, -0.2_488]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_large_1k_224_ema.pt":
								lowerCAmelCase		=			torch.tensor([-0.0_673, -0.5_627, -0.3_753, -0.2_722, 0.0_178]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_huge_1k_224_ema.pt":
								lowerCAmelCase		=			torch.tensor([-0.6_377, -0.7_458, -0.2_150, 0.1_184, -0.0_597]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_nano_22k_224_ema.pt":
								lowerCAmelCase		=			torch.tensor([1.0_799, 0.2_322, -0.8_860, 1.0_219, 0.6_231]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_nano_22k_384_ema.pt":
								lowerCAmelCase		=			torch.tensor([0.3_766, 0.4_917, -1.1_426, 0.9_942, 0.6_024]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_tiny_22k_224_ema.pt":
								lowerCAmelCase		=			torch.tensor([0.4_220, -0.6_919, -0.4_317, -0.2_881, -0.6_609]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_tiny_22k_384_ema.pt":
								lowerCAmelCase		=			torch.tensor([0.1_082, -0.8_286, -0.5_095, 0.4_681, -0.8_085]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_base_22k_224_ema.pt":
								lowerCAmelCase		=			torch.tensor([-0.2_419, -0.6_221, 0.2_176, -0.0_980, -0.7_527]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_base_22k_384_ema.pt":
								lowerCAmelCase		=			torch.tensor([0.0_391, -0.4_371, 0.3_786, 0.1_251, -0.2_784]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_large_22k_224_ema.pt":
								lowerCAmelCase		=			torch.tensor([-0.0_504, 0.5_636, -0.1_729, -0.6_507, -0.3_949]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_large_22k_384_ema.pt":
								lowerCAmelCase		=			torch.tensor([0.3_560, 0.9_486, 0.3_149, -0.2_667, -0.5_138]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_huge_22k_384_ema.pt":
								lowerCAmelCase		=			torch.tensor([-0.2_469, -0.4_550, -0.5_853, -0.0_810, 0.0_309]	)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_huge_22k_512_ema.pt":
								lowerCAmelCase		=			torch.tensor([-0.3_090, 0.0_802, -0.0_682, -0.1_979, -0.2_826]	)
				else:
								raise ValueError(f'''Unknown URL: {checkpoint_url}'''	)

				assert torch.allclose(logits[0, :5] ,    _a ,    atol=1e-3	)
				assert logits.shape == expected_shape
				print("""Model outputs match the original results!"""	)

				if save_model:
								print("""Saving model to local..."""	)
								# Create folder to save model
								if not os.path.isdir(_a	):
												os.mkdir(_a	)

								model.save_pretrained(_a	)
								preprocessor.save_pretrained(_a	)

				lowerCAmelCase		=			"convnextv2"
				if "atto" in checkpoint_url:
								model_name += "-atto"
				if "femto" in checkpoint_url:
								model_name += "-femto"
				if "pico" in checkpoint_url:
								model_name += "-pico"
				if "nano" in checkpoint_url:
								model_name += "-nano"
				elif "tiny" in checkpoint_url:
								model_name += "-tiny"
				elif "base" in checkpoint_url:
								model_name += "-base"
				elif "large" in checkpoint_url:
								model_name += "-large"
				elif "huge" in checkpoint_url:
								model_name += "-huge"
				if "22k" in checkpoint_url and "1k" not in checkpoint_url:
								model_name += "-22k"
				elif "22k" in checkpoint_url and "1k" in checkpoint_url:
								model_name += "-22k-1k"
				elif "1k" in checkpoint_url:
								model_name += "-1k"
				if "224" in checkpoint_url:
								model_name += "-224"
				elif "384" in checkpoint_url:
								model_name += "-384"
				elif "512" in checkpoint_url:
								model_name += "-512"

				if push_to_hub:
								print(f'''Pushing {model_name} to the hub...'''	)
								model.push_to_hub(_a	)
								preprocessor.push_to_hub(_a	)


if __name__ == "__main__":
		a								=							argparse.ArgumentParser()
		# Required parameters
		parser.add_argument(
		    '--checkpoint_url',
		    default='https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_atto_1k_224_ema.pt',
		    type=str,
		    help='URL of the original ConvNeXTV2 checkpoint you\'d like to convert.',
		)
		parser.add_argument(
		    '--pytorch_dump_folder_path',
		    default='model',
		    type=str,
		    help='Path to the output PyTorch model directory.',
		)
		parser.add_argument('--save_model', action='store_true', help='Save model to local')
		parser.add_argument('--push_to_hub', action='store_true', help='Push model and image preprocessor to the hub')

		a								=							parser.parse_args()
		convert_convnextva_checkpoint(
		    args.checkpoint_url, args.pytorch_dump_folder_path, args.save_model, args.push_to_hub
		)









"""simple docstring"""







import numpy as np
import requests





def 							lowercase   ()       ->					Optional[int]:


				'''simple docstring'''






				lowerCAmelCase		=			requests.get(
				    """https://raw.githubusercontent.com/yashLadha/The_Math_of_Intelligence/"""
				    """master/Week1/ADRvsRating.csv"""	)
				lowerCAmelCase		=			response.text.splitlines()
				lowerCAmelCase		=			[]
				for item in lines:
								lowerCAmelCase		=			item.split(""","""	)
								data.append(snake_case__	)
				data.pop(0	)  # This is for removing the labels from the list
				lowerCAmelCase		=			np.matrix(snake_case__	)
				return dataset





def 							lowercase   (snake_case__				:	List[str] ,    snake_case__				:	int ,    snake_case__				:	List[str] ,    snake_case__				:	Tuple ,    snake_case__				:	Union[str, Any]	)       ->					str:


				'''simple docstring'''






				lowerCAmelCase		=			len_data

				lowerCAmelCase		=			np.dot(snake_case__ ,    data_x.transpose()	)
				prod -= data_y.transpose()
				lowerCAmelCase		=			np.dot(snake_case__ ,    snake_case__	)
				lowerCAmelCase		=			theta - (alpha / n) * sum_grad
				return theta





def 							lowercase   (snake_case__				:	Any ,    snake_case__				:	int ,    snake_case__				:	Any ,    snake_case__				:	Dict	)       ->					List[str]:


				'''simple docstring'''






				lowerCAmelCase		=			np.dot(snake_case__ ,    data_x.transpose()	)
				prod -= data_y.transpose()
				lowerCAmelCase		=			np.sum(np.square(snake_case__	)	)
				lowerCAmelCase		=			sum_elem / (2 * len_data)
				return error





def 							lowercase   (snake_case__				:	Optional[Any] ,    snake_case__				:	List[Any]	)       ->					str:


				'''simple docstring'''






				lowerCAmelCase		=			100_000
				lowerCAmelCase		=			0.0_001_550

				lowerCAmelCase		=			data_x.shape[1]
				lowerCAmelCase		=			data_x.shape[0] - 1

				lowerCAmelCase		=			np.zeros((1, no_features)	)

				for i in range(0 ,    snake_case__	):
								lowerCAmelCase		=			run_steep_gradient_descent(snake_case__ ,    snake_case__ ,    snake_case__ ,    snake_case__ ,    snake_case__	)
								lowerCAmelCase		=			sum_of_square_error(snake_case__ ,    snake_case__ ,    snake_case__ ,    snake_case__	)
								print(f'''At Iteration {i + 1} - Error is {error:.5f}'''	)

				return theta





def 							lowercase   (snake_case__				:	List[str] ,    snake_case__				:	Optional[int]	)       ->					List[str]:


				'''simple docstring'''






				lowerCAmelCase		=			sum(abs(y - predicted_y[i]	) for i, y in enumerate(snake_case__	)	)
				return total / len(snake_case__	)





def 							lowercase   ()       ->					Optional[int]:


				'''simple docstring'''






				lowerCAmelCase		=			collect_dataset()

				lowerCAmelCase		=			data.shape[0]
				lowerCAmelCase		=			np.c_[np.ones(snake_case__	), data[:, :-1]].astype(snake_case__	)
				lowerCAmelCase		=			data[:, -1].astype(snake_case__	)

				lowerCAmelCase		=			run_linear_regression(snake_case__ ,    snake_case__	)
				lowerCAmelCase		=			theta.shape[1]
				print("""Resultant Feature vector : """	)
				for i in range(0 ,    snake_case__	):
								print(f'''{theta[0, i]:.5f}'''	)


if __name__ == "__main__":
		main()





