

'''simple docstring'''

import inspect
import unittest

from transformers import DataaVecVisionConfig
from transformers.models.auto import get_values
from transformers.testing_utils import require_torch, require_torch_multi_gpu, require_vision, slow, torch_device
from transformers.utils import cached_property, is_torch_available, is_vision_available

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, _config_zero_init, floats_tensor, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
						import torch
						from torch import nn

						from transformers import (
						    MODEL_MAPPING,
						    DataaVecVisionForImageClassification,
						    DataaVecVisionForSemanticSegmentation,
						    DataaVecVisionModel,
						)
						from transformers.models.dataavec.modeling_dataavec_vision import DATA2VEC_VISION_PRETRAINED_MODEL_ARCHIVE_LIST


if is_vision_available():
						from PIL import Image

						from transformers import BeitImageProcessor







class lowerCamelCase   :

				def __init__(       self,						lowercase_,						lowercase_=100,						lowercase_=13,						lowercase_=30,						lowercase_=2,						lowercase_=3,						lowercase_=True,						lowercase_=True,						lowercase_=32,						lowercase_=4,						lowercase_=4,						lowercase_=37,						lowercase_="gelu",						lowercase_=0.1,						lowercase_=0.1,						lowercase_=10,						lowercase_=0.02,						lowercase_=3,						lowercase_=None,						lowercase_=[0, 1, 2, 3],						)    ->							Dict:
					snake_case							=					parent
					snake_case							=					100
					snake_case							=					batch_size
					snake_case							=					image_size
					snake_case							=					patch_size
					snake_case							=					num_channels
					snake_case							=					is_training
					snake_case							=					use_labels
					snake_case							=					hidden_size
					snake_case							=					num_hidden_layers
					snake_case							=					num_attention_heads
					snake_case							=					intermediate_size
					snake_case							=					hidden_act
					snake_case							=					hidden_dropout_prob
					snake_case							=					attention_probs_dropout_prob
					snake_case							=					type_sequence_label_size
					snake_case							=					initializer_range
					snake_case							=					scope
					snake_case							=					out_indices
					snake_case							=					num_labels

					# in BeiT, the seq length equals the number of patches + 1 (we add 1 for the [CLS] token)
					snake_case							=					(image_size // patch_size) ** 2
					snake_case							=					num_patches + 1

				def 					_lowerCamelCase    (       self )    ->							Union[str, Any]:
					snake_case							=					floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size] )

					snake_case							=					None
					snake_case							=					None
					if self.use_labels:
						snake_case							=					ids_tensor([self.batch_size],						self.type_sequence_label_size )
						snake_case							=					ids_tensor([self.batch_size, self.image_size, self.image_size],						self.num_labels )

					snake_case							=					self.get_config()

					return config, pixel_values, labels, pixel_labels

				def 					_lowerCamelCase    (       self )    ->							Tuple:
					return DataaVecVisionConfig(
					    vocab_size=self.vocab_size,						image_size=self.image_size,						patch_size=self.patch_size,						num_channels=self.num_channels,						hidden_size=self.hidden_size,						num_hidden_layers=self.num_hidden_layers,						num_attention_heads=self.num_attention_heads,						intermediate_size=self.intermediate_size,						hidden_act=self.hidden_act,						hidden_dropout_prob=self.hidden_dropout_prob,						attention_probs_dropout_prob=self.attention_probs_dropout_prob,						is_decoder=lowercase_,						initializer_range=self.initializer_range,						out_indices=self.out_indices,						)

				def 					_lowerCamelCase    (       self,						lowercase_,						lowercase_,						lowercase_,						lowercase_ )    ->							Tuple:
					snake_case							=					DataaVecVisionModel(config=lowercase_ )
					model.to(lowercase_ )
					model.eval()
					snake_case							=					model(lowercase_ )
					# expected sequence length = num_patches + 1 (we add 1 for the [CLS] token)
					snake_case							=					(self.image_size // self.patch_size) ** 2
					self.parent.assertEqual(result.last_hidden_state.shape,						(self.batch_size, num_patches + 1, self.hidden_size) )

				def 					_lowerCamelCase    (       self,						lowercase_,						lowercase_,						lowercase_,						lowercase_ )    ->							Any:
					snake_case							=					self.type_sequence_label_size
					snake_case							=					DataaVecVisionForImageClassification(lowercase_ )
					model.to(lowercase_ )
					model.eval()
					snake_case							=					model(lowercase_,						labels=lowercase_ )
					self.parent.assertEqual(result.logits.shape,						(self.batch_size, self.type_sequence_label_size) )

				def 					_lowerCamelCase    (       self,						lowercase_,						lowercase_,						lowercase_,						lowercase_ )    ->							str:
					snake_case							=					self.num_labels
					snake_case							=					DataaVecVisionForSemanticSegmentation(lowercase_ )
					model.to(lowercase_ )
					model.eval()
					snake_case							=					model(lowercase_ )
					self.parent.assertEqual(
					    result.logits.shape,						(self.batch_size, self.num_labels, self.image_size * 2, self.image_size * 2) )
					snake_case							=					model(lowercase_,						labels=lowercase_ )
					self.parent.assertEqual(
					    result.logits.shape,						(self.batch_size, self.num_labels, self.image_size * 2, self.image_size * 2) )






				def 					_lowerCamelCase    (       self )    ->							Union[str, Any]:
					snake_case							=					self.prepare_config_and_inputs()
					snake_case			,			snake_case			,			snake_case			,			snake_case							=					config_and_inputs
					snake_case							=					{'pixel_values': pixel_values}
					return config, inputs_dict







@require_torch
class lowerCamelCase   (    __lowerCAmelCase				,				__lowerCAmelCase				,				unittest.TestCase				):
				snake_case_							     = (
				    (DataaVecVisionModel, DataaVecVisionForImageClassification, DataaVecVisionForSemanticSegmentation)
				    if is_torch_available()
				    else ()
				)
				snake_case_							     = (
				    {
				        '''feature-extraction''': DataaVecVisionModel,
				        '''image-classification''': DataaVecVisionForImageClassification,
				        '''image-segmentation''': DataaVecVisionForSemanticSegmentation,
				    }
				    if is_torch_available()
				    else {}
				)

				snake_case_							     = False
				snake_case_							     = False
				snake_case_							     = False

				def 					_lowerCamelCase    (       self )    ->							Tuple:
					snake_case							=					DataaVecVisionModelTester(self )
					snake_case							=					ConfigTester(
					    self,						config_class=lowercase_,						has_text_modality=lowercase_,						hidden_size=37 )

				def 					_lowerCamelCase    (       self )    ->							Any:
					self.config_tester.run_common_tests()

				def 					_lowerCamelCase    (       self )    ->							List[Any]:
					# Data2VecVision does not use inputs_embeds
					pass

				@require_torch_multi_gpu
				@unittest.skip(
				    reason='Data2VecVision has some layers using `add_module` which doesn\'t work well with `nn.DataParallel`' )
				def 					_lowerCamelCase    (       self )    ->							Tuple:
					pass

				def 					_lowerCamelCase    (       self )    ->							Tuple:
					snake_case			,			snake_case							=					self.model_tester.prepare_config_and_inputs_for_common()

					for model_class in self.all_model_classes:
						snake_case							=					model_class(lowercase_ )
						self.assertIsInstance(model.get_input_embeddings(),						(nn.Module) )
						snake_case							=					model.get_output_embeddings()
						self.assertTrue(x is None or isinstance(lowercase_,						nn.Linear ) )

				def 					_lowerCamelCase    (       self )    ->							Dict:
					snake_case			,			snake_case							=					self.model_tester.prepare_config_and_inputs_for_common()

					for model_class in self.all_model_classes:
						snake_case							=					model_class(lowercase_ )
						snake_case							=					inspect.signature(model.forward )
						# signature.parameters is an OrderedDict => so arg_names order is deterministic
						snake_case							=					[*signature.parameters.keys()]

						snake_case							=					['pixel_values']
						self.assertListEqual(arg_names[:1],						lowercase_ )

				def 					_lowerCamelCase    (       self )    ->							Optional[Any]:
					snake_case							=					self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_model(*lowercase_ )

				def 					_lowerCamelCase    (       self )    ->							Optional[Any]:
					snake_case							=					self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_for_image_segmentation(*lowercase_ )

				def 					_lowerCamelCase    (       self )    ->							Tuple:
					if not self.model_tester.is_training:
						return

					snake_case			,			snake_case							=					self.model_tester.prepare_config_and_inputs_for_common()
					snake_case							=					True

					for model_class in self.all_model_classes:
						if model_class in [*get_values(lowercase_ )]:
							continue

						snake_case							=					model_class(lowercase_ )
						model.to(lowercase_ )
						model.train()
						snake_case							=					self._prepare_for_class(lowercase_,						lowercase_,						return_labels=lowercase_ )
						snake_case							=					model(**lowercase_ ).loss
						loss.backward()

				def 					_lowerCamelCase    (       self )    ->							List[Any]:
					snake_case			,			snake_case							=					self.model_tester.prepare_config_and_inputs_for_common()
					if not self.model_tester.is_training:
						return

					snake_case							=					False
					snake_case							=					True

					for model_class in self.all_model_classes:
						if model_class in [*get_values(lowercase_ )] or not model_class.supports_gradient_checkpointing:
							continue
						# TODO: remove the following 3 lines once we have a MODEL_FOR_SEMANTIC_SEGMENTATION_MAPPING
						# this can then be incorporated into _prepare_for_class in test_modeling_common.py
						elif model_class.__name__ == "Data2VecVisionForSemanticSegmentation":
							snake_case			,			snake_case			,			snake_case			,			snake_case							=					inputs_dict['pixel_values'].shape
							snake_case							=					torch.zeros(
							    [self.model_tester.batch_size, height, width],						device=lowercase_ ).long()
						snake_case							=					model_class(lowercase_ )
						model.gradient_checkpointing_enable()
						model.to(lowercase_ )
						model.train()
						snake_case							=					self._prepare_for_class(lowercase_,						lowercase_,						return_labels=lowercase_ )
						snake_case							=					model(**lowercase_ ).loss
						loss.backward()

				def 					_lowerCamelCase    (       self )    ->							int:
					snake_case			,			snake_case							=					self.model_tester.prepare_config_and_inputs_for_common()

					snake_case							=					_config_zero_init(lowercase_ )
					for model_class in self.all_model_classes:
						snake_case							=					model_class(config=lowercase_ )
						for name, param in model.named_parameters():
							# we skip lambda parameters as these require special initial values
							# determined by config.layer_scale_init_value
							if "lambda" in name:
								continue
							if param.requires_grad:
								self.assertIn(
								    ((param.data.mean() * 1E9).round() / 1E9).item(),						[0.0, 1.0],						msg=F'''Parameter {name} of model {model_class} seems not properly initialized''',						)

				def 					_lowerCamelCase    (       self,						lowercase_,						lowercase_,						lowercase_,						lowercase_=2E-4,						lowercase_="outputs",						lowercase_=None )    ->							Tuple:
					# We override with a slightly higher tol value, as semseg models tend to diverge a bit more
					super().check_pt_tf_outputs(lowercase_,						lowercase_,						lowercase_,						lowercase_,						lowercase_,						lowercase_ )

				def 					_lowerCamelCase    (       self )    ->							Dict:
					snake_case							=					self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_for_image_classification(*lowercase_ )






				@slow
				def 					_lowerCamelCase    (       self )    ->							Dict:
					for model_name in DATA2VEC_VISION_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
						snake_case							=					DataaVecVisionModel.from_pretrained(lowercase_ )
						self.assertIsNotNone(lowercase_ )

def      __magic_name__							(			)      ->		Tuple:
	snake_case							=					Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png'				)
	return image







@require_torch
@require_vision
class lowerCamelCase   (    unittest.TestCase				):

				@cached_property
				def 					_lowerCamelCase    (       self )    ->							Union[str, Any]:
					return (
					    BeitImageProcessor.from_pretrained('facebook/data2vec-vision-base-ft1k' ) if is_vision_available() else None
					)






				@slow
				def 					_lowerCamelCase    (       self )    ->							Dict:
					snake_case							=					DataaVecVisionForImageClassification.from_pretrained('facebook/data2vec-vision-base-ft1k' ).to(
					    lowercase_ )

					snake_case							=					self.default_image_processor
					snake_case							=					prepare_img()
					snake_case							=					image_processor(images=lowercase_,						return_tensors='pt' ).to(lowercase_ )

					# forward pass
					with torch.no_grad():
						snake_case							=					model(**lowercase_ )
					snake_case							=					outputs.logits

					# verify the logits
					snake_case							=					torch.Size((1, 1000) )
					self.assertEqual(logits.shape,						lowercase_ )

					snake_case							=					torch.tensor([0.3_277, -0.1_395, 0.0_911] ).to(lowercase_ )

					self.assertTrue(torch.allclose(logits[0, :3],						lowercase_,						atol=1E-4 ) )

					snake_case							=					[model.config.labelaid[i] for i in ['remote control, remote', 'tabby, tabby cat']]
					self.assertEqual(logits[0].topk(2 ).indices.cpu().tolist(),						lowercase_ )










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__			:   Optional[Any]      			=    logging.get_logger(__name__)


def 	_A	(   _UpperCamelCase			):
				_UpperCAmelCase						:  Optional[Any]     					=	ConvNextConfig()

				if "tiny" in checkpoint_url:
								_UpperCAmelCase						:  Any     					=	[3, 3, 9, 3]
								_UpperCAmelCase						:  int     					=	[96, 192, 384, 768]
				if "small" in checkpoint_url:
								_UpperCAmelCase						:  str     					=	[3, 3, 27, 3]
								_UpperCAmelCase						:  List[Any]     					=	[96, 192, 384, 768]
				if "base" in checkpoint_url:
								_UpperCAmelCase						:  Dict     					=	[3, 3, 27, 3]
								_UpperCAmelCase						:  Tuple     					=	[128, 256, 512, 1_024]
				if "large" in checkpoint_url:
								_UpperCAmelCase						:  Optional[int]     					=	[3, 3, 27, 3]
								_UpperCAmelCase						:  Optional[int]     					=	[192, 384, 768, 1_536]
				if "xlarge" in checkpoint_url:
								_UpperCAmelCase						:  Tuple     					=	[3, 3, 27, 3]
								_UpperCAmelCase						:  int     					=	[256, 512, 1_024, 2_048]

				if "1k" in checkpoint_url:
								_UpperCAmelCase						:  int     					=	1_000
								_UpperCAmelCase						:  Union[str, Any]     					=	'''imagenet-1k-id2label.json'''
								_UpperCAmelCase						:  Any     					=	(1, 1_000)
				else:
								_UpperCAmelCase						:  Union[str, Any]     					=	21_841
								_UpperCAmelCase						:  int     					=	'''imagenet-22k-id2label.json'''
								_UpperCAmelCase						:  List[str]     					=	(1, 21_841)

				_UpperCAmelCase						:  List[str]     					=	'''huggingface/label-files'''
				_UpperCAmelCase						:  Any     					=	num_labels
				_UpperCAmelCase						:  str     					=	json.load(open(hf_hub_download(_UpperCamelCase      ,					_UpperCamelCase      ,					repo_type='''dataset'''			)      ,					'''r'''			)			)
				_UpperCAmelCase						:  List[Any]     					=	{int(_UpperCamelCase			): 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_205]
								del idalabel[15_027]
				_UpperCAmelCase						:  List[str]     					=	idalabel
				_UpperCAmelCase						:  Any     					=	{v: k for k, v in idalabel.items()}
				_UpperCAmelCase						:  Union[str, Any]     					=	hidden_sizes
				_UpperCAmelCase						:  int     					=	depths

				return config, expected_shape


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

				return name


def 	_A	(   ):
				_UpperCAmelCase						:  Tuple     					=	'''http://images.cocodataset.org/val2017/000000039769.jpg'''
				_UpperCAmelCase						:  Union[str, Any]     					=	Image.open(requests.get(_UpperCamelCase      ,					stream=_UpperCamelCase			).raw			)
				return im


@torch.no_grad()
def 	_A	(   _UpperCamelCase      ,					_UpperCamelCase			):
				_UpperCAmelCase					, _UpperCAmelCase						:  Union[str, Any]     					=	get_convnext_config(_UpperCamelCase			)
				# load original state_dict from URL
				_UpperCAmelCase						:  List[Any]     					=	torch.hub.load_state_dict_from_url(_UpperCamelCase			)['''model''']
				# rename keys
				for key in state_dict.copy().keys():
								_UpperCAmelCase						:  str     					=	state_dict.pop(_UpperCamelCase			)
								_UpperCAmelCase						:  int     					=	val
				# add prefix to all keys expect classifier head
				for key in state_dict.copy().keys():
								_UpperCAmelCase						:  Any     					=	state_dict.pop(_UpperCamelCase			)
								if not key.startswith('''classifier'''			):
												_UpperCAmelCase						:  Dict     					=	'''convnext.''' + key
								_UpperCAmelCase						:  List[Any]     					=	val

				# load HuggingFace model
				_UpperCAmelCase						:  Optional[int]     					=	ConvNextForImageClassification(_UpperCamelCase			)
				model.load_state_dict(_UpperCamelCase			)
				model.eval()

				# Check outputs on an image, prepared by ConvNextImageProcessor
				_UpperCAmelCase						:  Optional[Any]     					=	224 if '''224''' in checkpoint_url else 384
				_UpperCAmelCase						:  int     					=	ConvNextImageProcessor(size=_UpperCamelCase			)
				_UpperCAmelCase						:  Union[str, Any]     					=	image_processor(images=prepare_img()      ,					return_tensors='''pt'''			).pixel_values

				_UpperCAmelCase						:  Any     					=	model(_UpperCamelCase			).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						:  Optional[int]     					=	torch.tensor([-0.1_210, -0.6_605, 0.1_918]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_small_1k_224_ema.pth":
								_UpperCAmelCase						:  Optional[Any]     					=	torch.tensor([-0.4_473, -0.1_847, -0.6_365]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_1k_224_ema.pth":
								_UpperCAmelCase						:  List[str]     					=	torch.tensor([0.4_525, 0.7_539, 0.0_308]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_1k_384.pth":
								_UpperCAmelCase						:  Any     					=	torch.tensor([0.3_561, 0.6_350, -0.0_384]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_1k_224_ema.pth":
								_UpperCAmelCase						:  str     					=	torch.tensor([0.4_174, -0.0_989, 0.1_489]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_1k_384.pth":
								_UpperCAmelCase						:  Tuple     					=	torch.tensor([0.2_513, -0.1_349, -0.1_613]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_224.pth":
								_UpperCAmelCase						:  Dict     					=	torch.tensor([1.2_980, 0.3_631, -0.1_198]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_224.pth":
								_UpperCAmelCase						:  Optional[int]     					=	torch.tensor([1.2_963, 0.1_227, 0.1_723]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_224.pth":
								_UpperCAmelCase						:  str     					=	torch.tensor([1.7_956, 0.8_390, 0.2_820]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_224.pth":
								_UpperCAmelCase						:  List[str]     					=	torch.tensor([-0.2_822, -0.0_502, -0.0_878]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_384.pth":
								_UpperCAmelCase						:  List[Any]     					=	torch.tensor([-0.5_672, -0.0_730, -0.4_348]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_224.pth":
								_UpperCAmelCase						:  str     					=	torch.tensor([0.2_681, 0.2_365, 0.6_246]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_384.pth":
								_UpperCAmelCase						:  List[str]     					=	torch.tensor([-0.2_642, 0.3_931, 0.5_116]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_224_ema.pth":
								_UpperCAmelCase						:  Tuple     					=	torch.tensor([-0.6_677, -0.1_873, -0.8_379]			)
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_384_ema.pth":
								_UpperCAmelCase						:  Any     					=	torch.tensor([-0.7_749, -0.2_967, -0.6_444]			)
				else:
								raise ValueError(F'''Unknown URL: {checkpoint_url}'''			)

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

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

				print('''Pushing model to the hub...'''			)
				_UpperCAmelCase						:  Union[str, Any]     					=	'''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(_UpperCamelCase      ,					_UpperCamelCase			)      ,					organization='''nielsr'''      ,					commit_message='''Add model'''      ,					)


if __name__ == "__main__":
					UpperCAmelCase__			:   List[Any]      			=    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__			:   int      			=    parser.parse_args()
					convert_convnext_checkpoint(args.checkpoint_url, args.pytorch_dump_folder_path)
