
from __future__ import annotations

import unittest
from collections.abc import Iterator






class 					__lowercase		:


					def __init__(	self       ,       a__       ,       a__						)		->							None:





									'''simple docstring'''
									A_       	=  label
									A_       	=  parent
									A_       	=  None
									A_       	=  None






class 					__lowercase		:


					def __init__(	self						)		->							None:





									'''simple docstring'''
									A_       	=  None


					def        lowerCAmelCase_    (	self						)		->							None:





									'''simple docstring'''
									A_       	=  None


					def        lowerCAmelCase_    (	self						)		->							bool:





									'''simple docstring'''
									return self.root is None


					def        lowerCAmelCase_    (	self       ,       a__						)		->							None:





									'''simple docstring'''
									A_       	=  self._put(self.root       ,       a__						)


					def        lowerCAmelCase_    (	self       ,       a__       ,       a__       ,       a__ = None						)		->							Node:





									'''simple docstring'''
									if node is None:
													A_       	=  Node(a__       ,       a__						)
									else:
													if label < node.label:
																	A_       	=  self._put(node.left       ,       a__       ,       a__						)
													elif label > node.label:
																	A_       	=  self._put(node.right       ,       a__       ,       a__						)
													else:
																	A_       	=  F"Node with label {label} already exists"
																	raise Exception(a__						)

									return node


					def        lowerCAmelCase_    (	self       ,       a__						)		->							Node:





									'''simple docstring'''
									return self._search(self.root       ,       a__						)


					def        lowerCAmelCase_    (	self       ,       a__       ,       a__						)		->							Node:





									'''simple docstring'''
									if node is None:
													A_       	=  F"Node with label {label} does not exist"
													raise Exception(a__						)
									else:
													if label < node.label:
																	A_       	=  self._search(node.left       ,       a__						)
													elif label > node.label:
																	A_       	=  self._search(node.right       ,       a__						)

									return node


					def        lowerCAmelCase_    (	self       ,       a__						)		->							None:





									'''simple docstring'''
									A_       	=  self.search(a__						)
									if node.right and node.left:
													A_       	=  self._get_lowest_node(node.right						)
													A_       	=  node.left
													A_       	=  node.right
													A_       	=  lowest_node
													if node.right:
																	A_       	=  lowest_node
													self._reassign_nodes(a__       ,       a__						)
									elif not node.right and node.left:
													self._reassign_nodes(a__       ,       node.left						)
									elif node.right and not node.left:
													self._reassign_nodes(a__       ,       node.right						)
									else:
													self._reassign_nodes(a__       ,       a__						)


					def        lowerCAmelCase_    (	self       ,       a__       ,       a__						)		->							None:





									'''simple docstring'''
									if new_children:
													A_       	=  node.parent

									if node.parent:
													if node.parent.right == node:
																	A_       	=  new_children
													else:
																	A_       	=  new_children
									else:
													A_       	=  new_children


					def        lowerCAmelCase_    (	self       ,       a__						)		->							Node:





									'''simple docstring'''
									if node.left:
													A_       	=  self._get_lowest_node(node.left						)
									else:
													A_       	=  node
													self._reassign_nodes(a__       ,       node.right						)

									return lowest_node


					def        lowerCAmelCase_    (	self       ,       a__						)		->							bool:





									'''simple docstring'''
									try:
													self.search(a__						)
													return True
									except Exception:
													return False


					def        lowerCAmelCase_    (	self						)		->							int:





									'''simple docstring'''
									if self.root is None:
													raise Exception('''Binary search tree is empty'''						)

									A_       	=  self.root
									while node.right is not None:
													A_       	=  node.right

									return node.label


					def        lowerCAmelCase_    (	self						)		->							int:





									'''simple docstring'''
									if self.root is None:
													raise Exception('''Binary search tree is empty'''						)

									A_       	=  self.root
									while node.left is not None:
													A_       	=  node.left

									return node.label


					def        lowerCAmelCase_    (	self						)		->							Iterator[Node]:





									'''simple docstring'''
									return self._inorder_traversal(self.root						)


					def        lowerCAmelCase_    (	self       ,       a__						)		->							Iterator[Node]:





									'''simple docstring'''
									if node is not None:
													yield from self._inorder_traversal(node.left						)
													yield node
													yield from self._inorder_traversal(node.right						)


					def        lowerCAmelCase_    (	self						)		->							Iterator[Node]:





									'''simple docstring'''
									return self._preorder_traversal(self.root						)


					def        lowerCAmelCase_    (	self       ,       a__						)		->							Iterator[Node]:





									'''simple docstring'''
									if node is not None:
													yield node
													yield from self._preorder_traversal(node.left						)
													yield from self._preorder_traversal(node.right						)






class 					__lowercase		(					unittest.TestCase       ):


					@staticmethod
					def        lowerCAmelCase_    (	)		->							BinarySearchTree:





									'''simple docstring'''
									A_       	=  BinarySearchTree()
									t.put(8						)
									t.put(3						)
									t.put(6						)
									t.put(1						)
									t.put(1_0						)
									t.put(1_4						)
									t.put(1_3						)
									t.put(4						)
									t.put(7						)
									t.put(5						)

									return t


					def        lowerCAmelCase_    (	self						)		->							None:





									'''simple docstring'''
									A_       	=  BinarySearchTree()
									assert t.is_empty()

									t.put(8						)
									assert t.root is not None
									assert t.root.parent is None
									assert t.root.label == 8

									t.put(1_0						)
									assert t.root.right is not None
									assert t.root.right.parent == t.root
									assert t.root.right.label == 1_0

									t.put(3						)
									assert t.root.left is not None
									assert t.root.left.parent == t.root
									assert t.root.left.label == 3

									t.put(6						)
									assert t.root.left.right is not None
									assert t.root.left.right.parent == t.root.left
									assert t.root.left.right.label == 6

									t.put(1						)
									assert t.root.left.left is not None
									assert t.root.left.left.parent == t.root.left
									assert t.root.left.left.label == 1

									with self.assertRaises(a__						):  # noqa: B017
													t.put(1						)


					def        lowerCAmelCase_    (	self						)		->							None:





									'''simple docstring'''
									A_       	=  self._get_binary_search_tree()

									A_       	=  t.search(6						)
									assert node.label == 6

									A_       	=  t.search(1_3						)
									assert node.label == 1_3

									with self.assertRaises(a__						):  # noqa: B017
													t.search(2						)


					def        lowerCAmelCase_    (	self						)		->							None:





									'''simple docstring'''
									A_       	=  self._get_binary_search_tree()

									t.remove(1_3						)
									assert t.root is not None
									assert t.root.right is not None
									assert t.root.right.right is not None
									assert t.root.right.right.right is None
									assert t.root.right.right.left is None

									t.remove(7						)
									assert t.root.left is not None
									assert t.root.left.right is not None
									assert t.root.left.right.left is not None
									assert t.root.left.right.right is None
									assert t.root.left.right.left.label == 4

									t.remove(6						)
									assert t.root.left.left is not None
									assert t.root.left.right.right is not None
									assert t.root.left.left.label == 1
									assert t.root.left.right.label == 4
									assert t.root.left.right.right.label == 5
									assert t.root.left.right.left is None
									assert t.root.left.left.parent == t.root.left
									assert t.root.left.right.parent == t.root.left

									t.remove(3						)
									assert t.root is not None
									assert t.root.left.label == 4
									assert t.root.left.right.label == 5
									assert t.root.left.left.label == 1
									assert t.root.left.parent == t.root
									assert t.root.left.left.parent == t.root.left
									assert t.root.left.right.parent == t.root.left

									t.remove(4						)
									assert t.root.left is not None
									assert t.root.left.left is not None
									assert t.root.left.label == 5
									assert t.root.left.right is None
									assert t.root.left.left.label == 1
									assert t.root.left.parent == t.root
									assert t.root.left.left.parent == t.root.left


					def        lowerCAmelCase_    (	self						)		->							None:





									'''simple docstring'''
									A_       	=  self._get_binary_search_tree()

									t.remove(3						)
									assert t.root is not None
									assert t.root.left is not None
									assert t.root.left.left is not None
									assert t.root.left.right is not None
									assert t.root.left.right.left is not None
									assert t.root.left.right.right is not None
									assert t.root.left.label == 4
									assert t.root.left.right.label == 6
									assert t.root.left.left.label == 1
									assert t.root.left.right.right.label == 7
									assert t.root.left.right.left.label == 5
									assert t.root.left.parent == t.root
									assert t.root.left.right.parent == t.root.left
									assert t.root.left.left.parent == t.root.left
									assert t.root.left.right.left.parent == t.root.left.right


					def        lowerCAmelCase_    (	self						)		->							None:





									'''simple docstring'''
									A_       	=  self._get_binary_search_tree()
									t.empty()
									assert t.root is None


					def        lowerCAmelCase_    (	self						)		->							None:





									'''simple docstring'''
									A_       	=  self._get_binary_search_tree()
									assert not t.is_empty()

									t.empty()
									assert t.is_empty()


					def        lowerCAmelCase_    (	self						)		->							None:





									'''simple docstring'''
									A_       	=  self._get_binary_search_tree()

									assert t.exists(6						)
									assert not t.exists(-1						)


					def        lowerCAmelCase_    (	self						)		->							None:





									'''simple docstring'''
									A_       	=  self._get_binary_search_tree()

									assert t.get_max_label() == 1_4

									t.empty()
									with self.assertRaises(a__						):  # noqa: B017
													t.get_max_label()


					def        lowerCAmelCase_    (	self						)		->							None:





									'''simple docstring'''
									A_       	=  self._get_binary_search_tree()

									assert t.get_min_label() == 1

									t.empty()
									with self.assertRaises(a__						):  # noqa: B017
													t.get_min_label()


					def        lowerCAmelCase_    (	self						)		->							None:





									'''simple docstring'''
									A_       	=  self._get_binary_search_tree()

									A_       	=  [i.label for i in t.inorder_traversal()]
									assert inorder_traversal_nodes == [1, 3, 4, 5, 6, 7, 8, 1_0, 1_3, 1_4]


					def        lowerCAmelCase_    (	self						)		->							None:





									'''simple docstring'''
									A_       	=  self._get_binary_search_tree()

									A_       	=  [i.label for i in t.preorder_traversal()]
									assert preorder_traversal_nodes == [8, 3, 1, 6, 4, 5, 7, 1_0, 1_4, 1_3]



def        lowerCamelCase_  (   ):
				A_       	=  BinarySearchTree()
				t.put(8     )
				t.put(3     )
				t.put(6     )
				t.put(1     )
				t.put(10     )
				t.put(14     )
				t.put(13     )
				t.put(4     )
				t.put(7     )
				t.put(5     )

				print(
				    '''
            8
           / \\
          3   10
         / \\    \\
        1   6    14
           / \\   /
          4   7 13
           \\
            5
        '''     )

				print('''Label 6 exists:''' ,						t.exists(6     )     )
				print('''Label 13 exists:''' ,						t.exists(13     )     )
				print('''Label -1 exists:''' ,						t.exists(-1     )     )
				print('''Label 12 exists:''' ,						t.exists(12     )     )

				# Prints all the elements of the list in inorder traversal
				A_       	=  [i.label for i in t.inorder_traversal()]
				print('''Inorder traversal:''' ,						__UpperCamelCase     )

				# Prints all the elements of the list in preorder traversal
				A_       	=  [i.label for i in t.preorder_traversal()]
				print('''Preorder traversal:''' ,						__UpperCamelCase     )

				print('''Max. label:''' ,						t.get_max_label()     )
				print('''Min. label:''' ,						t.get_min_label()     )

				# Delete elements
				print('''\nDeleting elements 13, 10, 8, 3, 6, 14'''     )
				print(
				    '''
          4
         / \\
        1   7
             \\
              5
        '''     )
				t.remove(13     )
				t.remove(10     )
				t.remove(8     )
				t.remove(3     )
				t.remove(6     )
				t.remove(14     )

				# Prints all the elements of the list in inorder traversal after delete
				A_       	=  [i.label for i in t.inorder_traversal()]
				print('''Inorder traversal after delete:''' ,						__UpperCamelCase     )

				# Prints all the elements of the list in preorder traversal after delete
				A_       	=  [i.label for i in t.preorder_traversal()]
				print('''Preorder traversal after delete:''' ,						__UpperCamelCase     )

				print('''Max. label:''' ,						t.get_max_label()     )
				print('''Min. label:''' ,						t.get_min_label()     )


if __name__ == "__main__":
						binary_search_tree_example()

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()
SCREAMING_SNAKE_CASE   :		List[str]					 =       logging.get_logger(__name__)



def        lowerCamelCase_  (   __UpperCamelCase     ):
				A_       	=  ConvNextVaConfig()

				if "atto" in checkpoint_url:
								A_       	=  [2, 2, 6, 2]
								A_       	=  [40, 80, 1_60, 3_20]
				if "femto" in checkpoint_url:
								A_       	=  [2, 2, 6, 2]
								A_       	=  [48, 96, 1_92, 3_84]
				if "pico" in checkpoint_url:
								A_       	=  [2, 2, 6, 2]
								A_       	=  [64, 1_28, 2_56, 5_12]
				if "nano" in checkpoint_url:
								A_       	=  [2, 2, 8, 2]
								A_       	=  [80, 1_60, 3_20, 6_40]
				if "tiny" in checkpoint_url:
								A_       	=  [3, 3, 9, 3]
								A_       	=  [96, 1_92, 3_84, 7_68]
				if "base" in checkpoint_url:
								A_       	=  [3, 3, 27, 3]
								A_       	=  [1_28, 2_56, 5_12, 10_24]
				if "large" in checkpoint_url:
								A_       	=  [3, 3, 27, 3]
								A_       	=  [1_92, 3_84, 7_68, 15_36]
				if "huge" in checkpoint_url:
								A_       	=  [3, 3, 27, 3]
								A_       	=  [3_52, 7_04, 14_08, 28_16]

				A_       	=  10_00
				A_       	=  '''imagenet-1k-id2label.json'''
				A_       	=  (1, 10_00)

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

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

				return config, expected_shape



def        lowerCamelCase_  (   __UpperCamelCase     ):
				if "downsample_layers.0.0" in name:
								A_       	=  name.replace('''downsample_layers.0.0''' ,						'''embeddings.patch_embeddings'''     )
				if "downsample_layers.0.1" in name:
								A_       	=  name.replace('''downsample_layers.0.1''' ,						'''embeddings.norm'''     )  # we rename to layernorm later on
				if "downsample_layers.1.0" in name:
								A_       	=  name.replace('''downsample_layers.1.0''' ,						'''stages.1.downsampling_layer.0'''     )
				if "downsample_layers.1.1" in name:
								A_       	=  name.replace('''downsample_layers.1.1''' ,						'''stages.1.downsampling_layer.1'''     )
				if "downsample_layers.2.0" in name:
								A_       	=  name.replace('''downsample_layers.2.0''' ,						'''stages.2.downsampling_layer.0'''     )
				if "downsample_layers.2.1" in name:
								A_       	=  name.replace('''downsample_layers.2.1''' ,						'''stages.2.downsampling_layer.1'''     )
				if "downsample_layers.3.0" in name:
								A_       	=  name.replace('''downsample_layers.3.0''' ,						'''stages.3.downsampling_layer.0'''     )
				if "downsample_layers.3.1" in name:
								A_       	=  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.
								A_       	=  name[: len('''stages.0'''     )] + '''.layers''' + name[len('''stages.0'''     ) :]
				if "gamma" in name:
								A_       	=  name.replace('''gamma''' ,						'''weight'''     )
				if "beta" in name:
								A_       	=  name.replace('''beta''' ,						'''bias'''     )
				if "stages" in name:
								A_       	=  name.replace('''stages''' ,						'''encoder.stages'''     )
				if "norm" in name:
								A_       	=  name.replace('''norm''' ,						'''layernorm'''     )
				if "head" in name:
								A_       	=  name.replace('''head''' ,						'''classifier'''     )

				return name



def        lowerCamelCase_  (   ):
				A_       	=  '''http://images.cocodataset.org/val2017/000000039769.jpg'''
				A_       	=  Image.open(requests.get(__UpperCamelCase ,						stream=__UpperCamelCase     ).raw     )
				return im



def        lowerCamelCase_  (   __UpperCamelCase     ):
				if "224" in checkpoint_url:
								A_       	=  2_24
								A_       	=  2_24 / 2_56
				elif "384" in checkpoint_url:
								A_       	=  3_84
								A_       	=  None
				else:
								A_       	=  5_12
								A_       	=  None

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



@torch.no_grad()
def        lowerCamelCase_  (   __UpperCamelCase ,						__UpperCamelCase ,						__UpperCamelCase ,						__UpperCamelCase     ):
				print('''Downloading original model from checkpoint...'''     )
				# define ConvNeXTV2 configuration based on URL
				A_	,					A_       	=  get_convnextva_config(__UpperCamelCase     )
				# load original state_dict from URL
				A_       	=  torch.hub.load_state_dict_from_url(__UpperCamelCase     )['''model''']

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

				# load HuggingFace model
				A_       	=  ConvNextVaForImageClassification(__UpperCamelCase     )
				model.load_state_dict(__UpperCamelCase     )
				model.eval()

				# Check outputs on an image, prepared by ConvNextImageProcessor
				A_       	=  convert_preprocessor(__UpperCamelCase     )
				A_       	=  preprocessor(images=prepare_img() ,						return_tensors='''pt'''     )
				A_       	=  model(**__UpperCamelCase     ).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":
								A_       	=  torch.tensor([-0.3930, 0.1747, -0.5246, 0.4177, 0.4295]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_femto_1k_224_ema.pt":
								A_       	=  torch.tensor([-0.1727, -0.5341, -0.7818, -0.4745, -0.6566]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_pico_1k_224_ema.pt":
								A_       	=  torch.tensor([-0.0333, 0.1563, -0.9137, 0.1054, 0.0381]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_nano_1k_224_ema.pt":
								A_       	=  torch.tensor([-0.1744, -0.1555, -0.0713, 0.0950, -0.1431]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_tiny_1k_224_ema.pt":
								A_       	=  torch.tensor([0.9996, 0.1966, -0.4386, -0.3472, 0.6661]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_base_1k_224_ema.pt":
								A_       	=  torch.tensor([-0.2553, -0.6708, -0.1359, 0.2518, -0.2488]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_large_1k_224_ema.pt":
								A_       	=  torch.tensor([-0.0673, -0.5627, -0.3753, -0.2722, 0.0178]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_huge_1k_224_ema.pt":
								A_       	=  torch.tensor([-0.6377, -0.7458, -0.2150, 0.1184, -0.0597]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_nano_22k_224_ema.pt":
								A_       	=  torch.tensor([1.0799, 0.2322, -0.8860, 1.0219, 0.6231]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_nano_22k_384_ema.pt":
								A_       	=  torch.tensor([0.3766, 0.4917, -1.1426, 0.9942, 0.6024]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_tiny_22k_224_ema.pt":
								A_       	=  torch.tensor([0.4220, -0.6919, -0.4317, -0.2881, -0.6609]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_tiny_22k_384_ema.pt":
								A_       	=  torch.tensor([0.1082, -0.8286, -0.5095, 0.4681, -0.8085]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_base_22k_224_ema.pt":
								A_       	=  torch.tensor([-0.2419, -0.6221, 0.2176, -0.0980, -0.7527]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_base_22k_384_ema.pt":
								A_       	=  torch.tensor([0.0391, -0.4371, 0.3786, 0.1251, -0.2784]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_large_22k_224_ema.pt":
								A_       	=  torch.tensor([-0.0504, 0.5636, -0.1729, -0.6507, -0.3949]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_large_22k_384_ema.pt":
								A_       	=  torch.tensor([0.3560, 0.9486, 0.3149, -0.2667, -0.5138]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_huge_22k_384_ema.pt":
								A_       	=  torch.tensor([-0.2469, -0.4550, -0.5853, -0.0810, 0.0309]     )
				elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_huge_22k_512_ema.pt":
								A_       	=  torch.tensor([-0.3090, 0.0802, -0.0682, -0.1979, -0.2826]     )
				else:
								raise ValueError(F"Unknown URL: {checkpoint_url}"     )

				assert torch.allclose(logits[0, :5] ,						__UpperCamelCase ,						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(__UpperCamelCase     ):
												os.mkdir(__UpperCamelCase     )

								model.save_pretrained(__UpperCamelCase     )
								preprocessor.save_pretrained(__UpperCamelCase     )

				A_       	=  '''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(__UpperCamelCase     )
								preprocessor.push_to_hub(__UpperCamelCase     )


if __name__ == "__main__":
						SCREAMING_SNAKE_CASE   :		Tuple					 =       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")

						SCREAMING_SNAKE_CASE   :		Dict					 =       parser.parse_args()
						convert_convnextva_checkpoint(
						    args.checkpoint_url, args.pytorch_dump_folder_path, args.save_model, args.push_to_hub
						)