






'''simple docstring'''





import argparse
import json
from pathlib import Path

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

from transformers import ConvNextConfig, ConvNextForImageClassification, ConvNextImageProcessor
from transformers.utils import logging


logging.set_verbosity_info()
_UpperCamelCase		:		str								=			logging.get_logger(__name__)
def __UpperCAmelCase (			A			:	Tuple						)  -> Union[str, Any]:
			UpperCAmelCase_     :   str       =   ConvNextConfig()

			if "tiny" in checkpoint_url:
						UpperCAmelCase_     :   Dict       =   [3, 3, 9, 3]
						UpperCAmelCase_     :   Dict       =   [9_6, 1_9_2, 3_8_4, 7_6_8]
			if "small" in checkpoint_url:
						UpperCAmelCase_     :   Union[str, Any]       =   [3, 3, 2_7, 3]
						UpperCAmelCase_     :   List[str]       =   [9_6, 1_9_2, 3_8_4, 7_6_8]
			if "base" in checkpoint_url:
						UpperCAmelCase_     :   str       =   [3, 3, 2_7, 3]
						UpperCAmelCase_     :   Optional[int]       =   [1_2_8, 2_5_6, 5_1_2, 1_0_2_4]
			if "large" in checkpoint_url:
						UpperCAmelCase_     :   Dict       =   [3, 3, 2_7, 3]
						UpperCAmelCase_     :   Union[str, Any]       =   [1_9_2, 3_8_4, 7_6_8, 1_5_3_6]
			if "xlarge" in checkpoint_url:
						UpperCAmelCase_     :   List[Any]       =   [3, 3, 2_7, 3]
						UpperCAmelCase_     :   Tuple       =   [2_5_6, 5_1_2, 1_0_2_4, 2_0_4_8]

			if "1k" in checkpoint_url:
						UpperCAmelCase_     :   Tuple       =   1_0_0_0
						UpperCAmelCase_     :   Tuple       =   '''imagenet-1k-id2label.json'''
						UpperCAmelCase_     :   Tuple       =   (1, 1_0_0_0)
			else:
						UpperCAmelCase_     :   int       =   2_1_8_4_1
						UpperCAmelCase_     :   Union[str, Any]       =   '''imagenet-22k-id2label.json'''
						UpperCAmelCase_     :   Any       =   (1, 2_1_8_4_1)

			UpperCAmelCase_     :   Any       =   '''huggingface/label-files'''
			UpperCAmelCase_     :   str       =   num_labels
			UpperCAmelCase_     :   int       =   json.load(open(hf_hub_download(A	,   A	,   repo_type='''dataset'''						)	,   '''r'''						)						)
			UpperCAmelCase_     :   Optional[int]       =   {int(A						): v for k, v in idalabel.items()}
			if "1k" not in checkpoint_url:
						# this dataset contains 21843 labels but the model only has 21841
						# we delete the classes as mentioned in https://github.com/google-research/big_transfer/issues/18
						del idalabel[9_2_0_5]
						del idalabel[1_5_0_2_7]
			UpperCAmelCase_     :   List[str]       =   idalabel
			UpperCAmelCase_     :   Union[str, Any]       =   {v: k for k, v in idalabel.items()}
			UpperCAmelCase_     :   List[str]       =   hidden_sizes
			UpperCAmelCase_     :   Union[str, Any]       =   depths

			return config, expected_shape
def __UpperCAmelCase (			A			:	Optional[Any]						)  -> int:
			if "downsample_layers.0.0" in name:
						UpperCAmelCase_     :   Optional[int]       =   name.replace('''downsample_layers.0.0'''	,   '''embeddings.patch_embeddings'''						)
			if "downsample_layers.0.1" in name:
						UpperCAmelCase_     :   List[str]       =   name.replace('''downsample_layers.0.1'''	,   '''embeddings.norm'''						)  # we rename to layernorm later on
			if "downsample_layers.1.0" in name:
						UpperCAmelCase_     :   Dict       =   name.replace('''downsample_layers.1.0'''	,   '''stages.1.downsampling_layer.0'''						)
			if "downsample_layers.1.1" in name:
						UpperCAmelCase_     :   Optional[int]       =   name.replace('''downsample_layers.1.1'''	,   '''stages.1.downsampling_layer.1'''						)
			if "downsample_layers.2.0" in name:
						UpperCAmelCase_     :   Optional[Any]       =   name.replace('''downsample_layers.2.0'''	,   '''stages.2.downsampling_layer.0'''						)
			if "downsample_layers.2.1" in name:
						UpperCAmelCase_     :   str       =   name.replace('''downsample_layers.2.1'''	,   '''stages.2.downsampling_layer.1'''						)
			if "downsample_layers.3.0" in name:
						UpperCAmelCase_     :   List[str]       =   name.replace('''downsample_layers.3.0'''	,   '''stages.3.downsampling_layer.0'''						)
			if "downsample_layers.3.1" in name:
						UpperCAmelCase_     :   Optional[Any]       =   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.
						UpperCAmelCase_     :   Union[str, Any]       =   name[: len('''stages.0'''						)] + '''.layers''' + name[len('''stages.0'''						) :]
			if "stages" in name:
						UpperCAmelCase_     :   int       =   name.replace('''stages'''	,   '''encoder.stages'''						)
			if "norm" in name:
						UpperCAmelCase_     :   Any       =   name.replace('''norm'''	,   '''layernorm'''						)
			if "gamma" in name:
						UpperCAmelCase_     :   List[str]       =   name.replace('''gamma'''	,   '''layer_scale_parameter'''						)
			if "head" in name:
						UpperCAmelCase_     :   int       =   name.replace('''head'''	,   '''classifier'''						)

			return name
def __UpperCAmelCase (			)  -> List[Any]:
			UpperCAmelCase_     :   List[Any]       =   '''http://images.cocodataset.org/val2017/000000039769.jpg'''
			UpperCAmelCase_     :   str       =   Image.open(requests.get(A	,   stream=A						).raw						)
			return im
@torch.no_grad()
def __UpperCAmelCase (			A			:	Optional[int]	,   A			:	Union[str, Any]						)  -> int:
			UpperCAmelCase_  ,     UpperCAmelCase_     :   Dict       =   get_convnext_config(A						)
			# load original state_dict from URL
			UpperCAmelCase_     :   Tuple       =   torch.hub.load_state_dict_from_url(A						)['''model''']
			# rename keys
			for key in state_dict.copy().keys():
						UpperCAmelCase_     :   Any       =   state_dict.pop(A						)
						UpperCAmelCase_     :   List[Any]       =   val
			# add prefix to all keys expect classifier head
			for key in state_dict.copy().keys():
						UpperCAmelCase_     :   Tuple       =   state_dict.pop(A						)
						if not key.startswith('''classifier'''						):
									UpperCAmelCase_     :   str       =   '''convnext.''' + key
						UpperCAmelCase_     :   Any       =   val

			# load HuggingFace model
			UpperCAmelCase_     :   Union[str, Any]       =   ConvNextForImageClassification(A						)
			model.load_state_dict(A						)
			model.eval()

			# Check outputs on an image, prepared by ConvNextImageProcessor
			UpperCAmelCase_     :   str       =   2_2_4 if '''224''' in checkpoint_url else 3_8_4
			UpperCAmelCase_     :   List[Any]       =   ConvNextImageProcessor(size=A						)
			UpperCAmelCase_     :   List[str]       =   image_processor(images=prepare_img()	,   return_tensors='''pt'''						).pixel_values

			UpperCAmelCase_     :   int       =   model(A						).logits

			# note: the logits below were obtained without center cropping
			if checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_tiny_1k_224_ema.pth":
						UpperCAmelCase_     :   Union[str, Any]       =   torch.tensor([-0.1210, -0.6605, 0.1918]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_small_1k_224_ema.pth":
						UpperCAmelCase_     :   Tuple       =   torch.tensor([-0.4473, -0.1847, -0.6365]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_1k_224_ema.pth":
						UpperCAmelCase_     :   Tuple       =   torch.tensor([0.4525, 0.7539, 0.0308]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_1k_384.pth":
						UpperCAmelCase_     :   List[str]       =   torch.tensor([0.3561, 0.6350, -0.0384]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_1k_224_ema.pth":
						UpperCAmelCase_     :   Union[str, Any]       =   torch.tensor([0.4174, -0.0989, 0.1489]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_1k_384.pth":
						UpperCAmelCase_     :   Optional[int]       =   torch.tensor([0.2513, -0.1349, -0.1613]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_224.pth":
						UpperCAmelCase_     :   Dict       =   torch.tensor([1.2980, 0.3631, -0.1198]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_224.pth":
						UpperCAmelCase_     :   Union[str, Any]       =   torch.tensor([1.2963, 0.1227, 0.1723]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_224.pth":
						UpperCAmelCase_     :   str       =   torch.tensor([1.7956, 0.8390, 0.2820]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_224.pth":
						UpperCAmelCase_     :   Any       =   torch.tensor([-0.2822, -0.0502, -0.0878]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_384.pth":
						UpperCAmelCase_     :   Tuple       =   torch.tensor([-0.5672, -0.0730, -0.4348]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_224.pth":
						UpperCAmelCase_     :   str       =   torch.tensor([0.2681, 0.2365, 0.6246]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_384.pth":
						UpperCAmelCase_     :   Any       =   torch.tensor([-0.2642, 0.3931, 0.5116]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_224_ema.pth":
						UpperCAmelCase_     :   int       =   torch.tensor([-0.6677, -0.1873, -0.8379]						)
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_384_ema.pth":
						UpperCAmelCase_     :   List[Any]       =   torch.tensor([-0.7749, -0.2967, -0.6444]						)
			else:
						raise ValueError(F"Unknown URL: {checkpoint_url}"						)

			assert torch.allclose(logits[0, :3]	,   A	,   atol=1e-3						)
			assert logits.shape == expected_shape

			Path(A						).mkdir(exist_ok=A						)
			print(F"Saving model to {pytorch_dump_folder_path}"						)
			model.save_pretrained(A						)
			print(F"Saving image processor to {pytorch_dump_folder_path}"						)
			image_processor.save_pretrained(A						)

			print('''Pushing model to the hub...'''						)
			UpperCAmelCase_     :   Dict       =   '''convnext'''
			if "tiny" in checkpoint_url:
						model_name += "-tiny"
			elif "small" in checkpoint_url:
						model_name += "-small"
			elif "base" in checkpoint_url:
						model_name += "-base"
			elif "xlarge" in checkpoint_url:
						model_name += "-xlarge"
			elif "large" in checkpoint_url:
						model_name += "-large"
			if "224" in checkpoint_url:
						model_name += "-224"
			elif "384" in checkpoint_url:
						model_name += "-384"
			if "22k" in checkpoint_url and "1k" not in checkpoint_url:
						model_name += "-22k"
			if "22k" in checkpoint_url and "1k" in checkpoint_url:
						model_name += "-22k-1k"

			model.push_to_hub(
			    repo_path_or_name=Path(A	,   A						)	,   organization='''nielsr'''	,   commit_message='''Add model'''	,   )


if __name__ == "__main__":
						_UpperCamelCase		:		Optional[int]								=			argparse.ArgumentParser()
						# Required parameters
						parser.add_argument(
						    '--checkpoint_url',
						    default='https://dl.fbaipublicfiles.com/convnext/convnext_tiny_1k_224_ema.pth',
						    type=str,
						    help='URL of the original ConvNeXT checkpoint you\'d like to convert.',
						)
						parser.add_argument(
						    '--pytorch_dump_folder_path',
						    default=None,
						    type=str,
						    required=True,
						    help='Path to the output PyTorch model directory.',
						)

						_UpperCamelCase		:		Optional[int]								=			parser.parse_args()
						convert_convnext_checkpoint(args.checkpoint_url, args.pytorch_dump_folder_path)










'''simple docstring'''





import unittest

import torch

from diffusers import DDIMScheduler, TextToVideoZeroPipeline
from diffusers.utils import load_pt, require_torch_gpu, slow

from ..test_pipelines_common import assert_mean_pixel_difference


@slow
@require_torch_gpu
class 				snake_case__     (			unittest.TestCase):




					def 						A     (       self       :						Optional[Any]     )  ->    List[str]:
								UpperCAmelCase_     :   Optional[Any]       =   '''runwayml/stable-diffusion-v1-5'''
								UpperCAmelCase_     :   Optional[int]       =   TextToVideoZeroPipeline.from_pretrained(_A							,				torch_dtype=torch.floataa     ).to('''cuda'''     )
								UpperCAmelCase_     :   Tuple       =   DDIMScheduler.from_config(pipe.scheduler.config     )
								UpperCAmelCase_     :   Tuple       =   torch.Generator(device='''cuda'''     ).manual_seed(0     )

								UpperCAmelCase_     :   List[Any]       =   '''A bear is playing a guitar on Times Square'''
								UpperCAmelCase_     :   List[Any]       =   pipe(prompt=_A							,				generator=_A     ).images

								UpperCAmelCase_     :   Any       =   load_pt(
								    '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/text-to-video/A bear is playing a guitar on Times Square.pt'''     )

								assert_mean_pixel_difference(_A							,				_A     )


