


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 		_UpperCAmelCase							(     SCREAMING_SNAKE_CASE__     :   int							):
     __UpperCamelCase       				=ConvNextVaConfig()

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

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

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

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

     return config, expected_shape

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

     return name

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

def 		_UpperCAmelCase							(     SCREAMING_SNAKE_CASE__     :   List[Any]							):
     if "224" in checkpoint_url:
          __UpperCamelCase       				=2_24
          __UpperCamelCase       				=2_24 / 2_56
     elif "384" in checkpoint_url:
          __UpperCamelCase       				=3_84
          __UpperCamelCase       				=None
     else:
          __UpperCamelCase       				=5_12
          __UpperCamelCase       				=None

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

@torch.no_grad()
def 		_UpperCAmelCase							(     SCREAMING_SNAKE_CASE__     :   Optional[int]     ,	SCREAMING_SNAKE_CASE__     :   Tuple     ,	SCREAMING_SNAKE_CASE__     :   Dict     ,	SCREAMING_SNAKE_CASE__     :   List[str]							):
     print('Downloading original model from checkpoint...'							)
     # define ConvNeXTV2 configuration based on URL
     __UpperCamelCase				, __UpperCamelCase       				=get_convnextva_config(SCREAMING_SNAKE_CASE__							)
     # load original state_dict from URL
     __UpperCamelCase       				=torch.hub.load_state_dict_from_url(SCREAMING_SNAKE_CASE__							)['model']

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

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

     # Check outputs on an image, prepared by ConvNextImageProcessor
     __UpperCamelCase       				=convert_preprocessor(SCREAMING_SNAKE_CASE__							)
     __UpperCamelCase       				=preprocessor(images=prepare_img()     ,	return_tensors='pt'							)
     __UpperCamelCase       				=model(**SCREAMING_SNAKE_CASE__							).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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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":
          __UpperCamelCase       				=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]     ,	SCREAMING_SNAKE_CASE__     ,	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(SCREAMING_SNAKE_CASE__							):
               os.mkdir(SCREAMING_SNAKE_CASE__							)

          model.save_pretrained(SCREAMING_SNAKE_CASE__							)
          preprocessor.save_pretrained(SCREAMING_SNAKE_CASE__							)

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


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
   )









from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_tf_available, is_torch_available


_A									=		{
    'configuration_flaubert': ['FLAUBERT_PRETRAINED_CONFIG_ARCHIVE_MAP', 'FlaubertConfig', 'FlaubertOnnxConfig'],
    'tokenization_flaubert': ['FlaubertTokenizer'],
}

try:
   if not is_torch_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   _A									=		[
       'FLAUBERT_PRETRAINED_MODEL_ARCHIVE_LIST',
       'FlaubertForMultipleChoice',
       'FlaubertForQuestionAnswering',
       'FlaubertForQuestionAnsweringSimple',
       'FlaubertForSequenceClassification',
       'FlaubertForTokenClassification',
       'FlaubertModel',
       'FlaubertWithLMHeadModel',
       'FlaubertPreTrainedModel',
   ]

try:
   if not is_tf_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   _A									=		[
       'TF_FLAUBERT_PRETRAINED_MODEL_ARCHIVE_LIST',
       'TFFlaubertForMultipleChoice',
       'TFFlaubertForQuestionAnsweringSimple',
       'TFFlaubertForSequenceClassification',
       'TFFlaubertForTokenClassification',
       'TFFlaubertModel',
       'TFFlaubertPreTrainedModel',
       'TFFlaubertWithLMHeadModel',
   ]


if TYPE_CHECKING:
   from .configuration_flaubert import FLAUBERT_PRETRAINED_CONFIG_ARCHIVE_MAP, FlaubertConfig, FlaubertOnnxConfig
   from .tokenization_flaubert import FlaubertTokenizer

   try:
      if not is_torch_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .modeling_flaubert import (
          FLAUBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
          FlaubertForMultipleChoice,
          FlaubertForQuestionAnswering,
          FlaubertForQuestionAnsweringSimple,
          FlaubertForSequenceClassification,
          FlaubertForTokenClassification,
          FlaubertModel,
          FlaubertPreTrainedModel,
          FlaubertWithLMHeadModel,
      )

   try:
      if not is_tf_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .modeling_tf_flaubert import (
          TF_FLAUBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
          TFFlaubertForMultipleChoice,
          TFFlaubertForQuestionAnsweringSimple,
          TFFlaubertForSequenceClassification,
          TFFlaubertForTokenClassification,
          TFFlaubertModel,
          TFFlaubertPreTrainedModel,
          TFFlaubertWithLMHeadModel,
      )

else:
   import sys

   _A									=		_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)





