

'''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()
_a	 =     logging.get_logger(__name__)







def _a				( SCREAMING_SNAKE_CASE	:    Optional[int]	)					->					List[Any]:

 """simple docstring"""






 __lowerCAmelCase:     Any     			=   ConvNextConfig()

 if "tiny" in checkpoint_url:
  __lowerCAmelCase:     Any     			=   [3, 3, 9, 3]
  __lowerCAmelCase:     List[Any]     			=   [96, 1_92, 3_84, 7_68]
 if "small" in checkpoint_url:
  __lowerCAmelCase:     List[Any]     			=   [3, 3, 27, 3]
  __lowerCAmelCase:     int     			=   [96, 1_92, 3_84, 7_68]
 if "base" in checkpoint_url:
  __lowerCAmelCase:     int     			=   [3, 3, 27, 3]
  __lowerCAmelCase:     Tuple     			=   [1_28, 2_56, 5_12, 10_24]
 if "large" in checkpoint_url:
  __lowerCAmelCase:     Tuple     			=   [3, 3, 27, 3]
  __lowerCAmelCase:     str     			=   [1_92, 3_84, 7_68, 15_36]
 if "xlarge" in checkpoint_url:
  __lowerCAmelCase:     str     			=   [3, 3, 27, 3]
  __lowerCAmelCase:     Tuple     			=   [2_56, 5_12, 10_24, 20_48]

 if "1k" in checkpoint_url:
  __lowerCAmelCase:     Union[str, Any]     			=   10_00
  __lowerCAmelCase:     List[Any]     			=   '''imagenet-1k-id2label.json'''
  __lowerCAmelCase:     Union[str, Any]     			=   (1, 10_00)
 else:
  __lowerCAmelCase:     Optional[Any]     			=   2_18_41
  __lowerCAmelCase:     str     			=   '''imagenet-22k-id2label.json'''
  __lowerCAmelCase:     Optional[int]     			=   (1, 2_18_41)

 __lowerCAmelCase:     Any     			=   '''huggingface/label-files'''
 __lowerCAmelCase:     Any     			=   num_labels
 __lowerCAmelCase:     Tuple     			=   json.load(open(hf_hub_download(SCREAMING_SNAKE_CASE					,      SCREAMING_SNAKE_CASE					,      repo_type='dataset'	)					,      'r'	)	)
 __lowerCAmelCase:     int     			=   {int(SCREAMING_SNAKE_CASE	): 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[92_05]
  del idalabel[1_50_27]
 __lowerCAmelCase:     str     			=   idalabel
 __lowerCAmelCase:     List[str]     			=   {v: k for k, v in idalabel.items()}
 __lowerCAmelCase:     Tuple     			=   hidden_sizes
 __lowerCAmelCase:     List[str]     			=   depths

 return config, expected_shape







def _a				( SCREAMING_SNAKE_CASE	:    int	)					->					Optional[Any]:

 """simple docstring"""






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

 return name







def _a				( )					->					Any:

 """simple docstring"""






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







@torch.no_grad()
def _a				( SCREAMING_SNAKE_CASE	:    Tuple					,      SCREAMING_SNAKE_CASE	:    Optional[int]	)					->					List[Any]:

 """simple docstring"""






 __lowerCAmelCase:     int     			=   get_convnext_config(SCREAMING_SNAKE_CASE	)
 # load original state_dict from URL
 __lowerCAmelCase:     Any     			=   torch.hub.load_state_dict_from_url(SCREAMING_SNAKE_CASE	)['''model''']
 # rename keys
 for key in state_dict.copy().keys():
  __lowerCAmelCase:     List[str]     			=   state_dict.pop(SCREAMING_SNAKE_CASE	)
  __lowerCAmelCase:     Tuple     			=   val
 # add prefix to all keys expect classifier head
 for key in state_dict.copy().keys():
  __lowerCAmelCase:     List[Any]     			=   state_dict.pop(SCREAMING_SNAKE_CASE	)
  if not key.startswith('classifier'	):
   __lowerCAmelCase:     Dict     			=   '''convnext.''' + key
  __lowerCAmelCase:     Optional[int]     			=   val

 # load HuggingFace model
 __lowerCAmelCase:     Dict     			=   ConvNextForImageClassification(SCREAMING_SNAKE_CASE	)
 model.load_state_dict(SCREAMING_SNAKE_CASE	)
 model.eval()

 # Check outputs on an image, prepared by ConvNextImageProcessor
 __lowerCAmelCase:     Optional[int]     			=   2_24 if '''224''' in checkpoint_url else 3_84
 __lowerCAmelCase:     int     			=   ConvNextImageProcessor(size=SCREAMING_SNAKE_CASE	)
 __lowerCAmelCase:     Union[str, Any]     			=   image_processor(images=prepare_img()					,      return_tensors='pt'	).pixel_values

 __lowerCAmelCase:     str     			=   model(SCREAMING_SNAKE_CASE	).logits

 # note: the logits below were obtained without center cropping
 if checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_tiny_1k_224_ema.pth":
  __lowerCAmelCase:     Dict     			=   torch.tensor([-0.1_2_1_0, -0.6_6_0_5, 0.1_9_1_8]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_small_1k_224_ema.pth":
  __lowerCAmelCase:     Union[str, Any]     			=   torch.tensor([-0.4_4_7_3, -0.1_8_4_7, -0.6_3_6_5]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_1k_224_ema.pth":
  __lowerCAmelCase:     List[Any]     			=   torch.tensor([0.4_5_2_5, 0.7_5_3_9, 0.0_3_0_8]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_1k_384.pth":
  __lowerCAmelCase:     Optional[int]     			=   torch.tensor([0.3_5_6_1, 0.6_3_5_0, -0.0_3_8_4]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_1k_224_ema.pth":
  __lowerCAmelCase:     int     			=   torch.tensor([0.4_1_7_4, -0.0_9_8_9, 0.1_4_8_9]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_1k_384.pth":
  __lowerCAmelCase:     List[Any]     			=   torch.tensor([0.2_5_1_3, -0.1_3_4_9, -0.1_6_1_3]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_224.pth":
  __lowerCAmelCase:     List[Any]     			=   torch.tensor([1.2_9_8_0, 0.3_6_3_1, -0.1_1_9_8]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_224.pth":
  __lowerCAmelCase:     str     			=   torch.tensor([1.2_9_6_3, 0.1_2_2_7, 0.1_7_2_3]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_224.pth":
  __lowerCAmelCase:     Union[str, Any]     			=   torch.tensor([1.7_9_5_6, 0.8_3_9_0, 0.2_8_2_0]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_224.pth":
  __lowerCAmelCase:     Tuple     			=   torch.tensor([-0.2_8_2_2, -0.0_5_0_2, -0.0_8_7_8]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_384.pth":
  __lowerCAmelCase:     Tuple     			=   torch.tensor([-0.5_6_7_2, -0.0_7_3_0, -0.4_3_4_8]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_224.pth":
  __lowerCAmelCase:     Union[str, Any]     			=   torch.tensor([0.2_6_8_1, 0.2_3_6_5, 0.6_2_4_6]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_384.pth":
  __lowerCAmelCase:     Optional[int]     			=   torch.tensor([-0.2_6_4_2, 0.3_9_3_1, 0.5_1_1_6]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_224_ema.pth":
  __lowerCAmelCase:     Any     			=   torch.tensor([-0.6_6_7_7, -0.1_8_7_3, -0.8_3_7_9]	)
 elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_384_ema.pth":
  __lowerCAmelCase:     str     			=   torch.tensor([-0.7_7_4_9, -0.2_9_6_7, -0.6_4_4_4]	)
 else:
  raise ValueError(f'''Unknown URL: {checkpoint_url}'''	)

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

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

 print('Pushing model to the hub...'	)
 __lowerCAmelCase:     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(SCREAMING_SNAKE_CASE					,      SCREAMING_SNAKE_CASE	)					,      organization='nielsr'					,      commit_message='Add model'					,      )


if __name__ == "__main__":
  _a	 =     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.''',
  )

  _a	 =     parser.parse_args()
  convert_convnext_checkpoint(args.checkpoint_url, args.pytorch_dump_folder_path)








import requests
from bsa import BeautifulSoup







def _a				( SCREAMING_SNAKE_CASE	:    int					,      SCREAMING_SNAKE_CASE	:    str	)					->					str:

 """simple docstring"""






 __lowerCAmelCase:     Tuple     			=   (
     'https://www.horoscope.com/us/horoscopes/general/'
     f'''horoscope-general-daily-{day}.aspx?sign={zodiac_sign}'''
 )
 __lowerCAmelCase:     Optional[Any]     			=   BeautifulSoup(requests.get(SCREAMING_SNAKE_CASE	).content					,      'html.parser'	)
 return soup.find('div'					,      class_='main-horoscope'	).p.text


if __name__ == "__main__":
  print('''Daily Horoscope. \n''')
  print(
      '''enter your Zodiac sign number:\n''',
      '''1. Aries\n''',
      '''2. Taurus\n''',
      '''3. Gemini\n''',
      '''4. Cancer\n''',
      '''5. Leo\n''',
      '''6. Virgo\n''',
      '''7. Libra\n''',
      '''8. Scorpio\n''',
      '''9. Sagittarius\n''',
      '''10. Capricorn\n''',
      '''11. Aquarius\n''',
      '''12. Pisces\n''',
  )
  _a	 =     int(input('''number> ''').strip())
  print('''choose some day:\n''', '''yesterday\n''', '''today\n''', '''tomorrow\n''')
  _a	 =     input('''enter the day> ''')
  _a	 =     horoscope(zodiac_sign, day)
  print(horoscope_text)





