'''simple docstring'''





import argparse
import os
from functools import reduce

import fairseq
import torch
from datasets import load_dataset

from transformers import WavaVecaProcessor, logging
from transformers.models.dataavec.configuration_dataavec_audio import DataaVecAudioConfig

# Copied from https://github.com/pytorch/fairseq/blob/main/examples/data2vec/models/data2vec_audio.py
from transformers.models.dataavec.dataavec_audio import DataaVecAudioModel as Dummy  # noqa: F401
from transformers.models.dataavec.modeling_dataavec_audio import DataaVecAudioForCTC, DataaVecAudioModel


logging.set_verbosity_info()
UpperCAmelCase							=       logging.get_logger(__name__)

UpperCAmelCase							=       {
    "post_extract_proj": "feature_projection.projection",
    "models.0.layer_norm": "feature_projection.layer_norm",
    "self_attn.k_proj": "encoder.layers.*.attention.k_proj",
    "self_attn.v_proj": "encoder.layers.*.attention.v_proj",
    "self_attn.q_proj": "encoder.layers.*.attention.q_proj",
    "self_attn.out_proj": "encoder.layers.*.attention.out_proj",
    "self_attn_layer_norm": "encoder.layers.*.layer_norm",
    "fc1": "encoder.layers.*.feed_forward.intermediate_dense",
    "fc2": "encoder.layers.*.feed_forward.output_dense",
    "final_layer_norm": "encoder.layers.*.final_layer_norm",
    "encoder.layer_norm": "encoder.layer_norm",
    "w2v_model.layer_norm": "feature_projection.layer_norm",
    "w2v_encoder.proj": "lm_head",
    "mask_emb": "masked_spec_embed",
}
UpperCAmelCase							=       [
    "lm_head",
]






def 					SCREAMING_SNAKE_CASE_			(		lowerCAmelCase_: str ,	lowerCAmelCase_: int ,	lowerCAmelCase_: Dict ,	lowerCAmelCase_: Union[str, Any] ,	lowerCAmelCase_: Union[str, Any]     ):
      for attribute in key.split("."     ):
            snake_case_     :			str       =       getattr(lowerCAmelCase_ ,	lowerCAmelCase_     )

      if weight_type is not None:
            snake_case_     :			Any       =       getattr(lowerCAmelCase_ ,	lowerCAmelCase_     ).shape
      else:
            snake_case_     :			Tuple       =       hf_pointer.shape

      if hf_shape != value.shape:
            raise ValueError(
                f"Shape of hf {key + '.' + weight_type if weight_type is not None else ''} is {hf_shape}, but should be"
                f" {value.shape} for {full_name}"     )

      if weight_type == "weight":
            snake_case_     :			Dict       =       value
      elif weight_type == "weight_g":
            snake_case_     :			Optional[Any]       =       value
      elif weight_type == "weight_v":
            snake_case_     :			str       =       value
      elif weight_type == "bias":
            snake_case_     :			List[str]       =       value
      else:
            snake_case_     :			Dict       =       value

      logger.info(f"{key + '.' + weight_type if weight_type is not None else ''} was initialized from {full_name}."     )






def 					SCREAMING_SNAKE_CASE_			(		lowerCAmelCase_: Any ,	lowerCAmelCase_: Optional[int] ,	lowerCAmelCase_: List[str]     ):
      snake_case_     :			Optional[int]       =       []
      snake_case_     :			List[Any]       =       fairseq_model.state_dict()

      if not is_headless:
            snake_case_     :			int       =       hf_model.dataavec_audio.feature_extractor
            snake_case_     :			str       =       hf_model.dataavec_audio.encoder.pos_conv_embed

      else:
            snake_case_     :			Any       =       hf_model.feature_extractor
            snake_case_     :			List[Any]       =       hf_model.encoder.pos_conv_embed

      for name, value in fairseq_dict.items():
            snake_case_     :			Union[str, Any]       =       False
            if "conv_layers" in name:
                  load_conv_layer(
                      lowerCAmelCase_ ,	lowerCAmelCase_ ,	lowerCAmelCase_ ,	lowerCAmelCase_ ,	)
                  snake_case_     :			Optional[int]       =       True
            elif "pos_conv" in name:
                  load_pos_conv_layer(
                      lowerCAmelCase_ ,	lowerCAmelCase_ ,	lowerCAmelCase_ ,	lowerCAmelCase_ ,	)
                  snake_case_     :			Optional[Any]       =       True
            else:
                  for key, mapped_key in MAPPING.items():
                        if not is_headless:
                              snake_case_     :			List[str]       =       "data2vec_audio." + mapped_key if mapped_key not in TOP_LEVEL_KEYS else mapped_key
                        if key in name or key.split("w2v_model."     )[-1] == name.split("."     )[0]:
                              snake_case_     :			List[Any]       =       True
                              if "*" in mapped_key:
                                    snake_case_     :			str       =       name.split(lowerCAmelCase_     )[0].split("."     )[-2]
                                    snake_case_     :			Optional[int]       =       mapped_key.replace("*" ,	lowerCAmelCase_     )
                              if "weight_g" in name:
                                    snake_case_     :			int       =       "weight_g"
                              elif "weight_v" in name:
                                    snake_case_     :			List[Any]       =       "weight_v"
                              elif "bias" in name:
                                    snake_case_     :			str       =       "bias"
                              elif "weight" in name:
                                    # TODO: don't match quantizer.weight_proj
                                    snake_case_     :			Optional[Any]       =       "weight"
                              else:
                                    snake_case_     :			int       =       None
                              set_recursively(lowerCAmelCase_ ,	lowerCAmelCase_ ,	lowerCAmelCase_ ,	lowerCAmelCase_ ,	lowerCAmelCase_     )
                        continue
            if not is_used:
                  unused_weights.append(lowerCAmelCase_     )

      logger.warning(f"Unused weights: {unused_weights}"     )






def 					SCREAMING_SNAKE_CASE_			(		lowerCAmelCase_: Optional[Any] ,	lowerCAmelCase_: str     ):
      snake_case_     :			List[Any]       =       path.split("."     )
      return reduce(lowerCAmelCase_ ,	lowerCAmelCase_ ,	lowerCAmelCase_     )






def 					SCREAMING_SNAKE_CASE_			(		lowerCAmelCase_: Any ,	lowerCAmelCase_: List[Any] ,	lowerCAmelCase_: Union[str, Any] ,	lowerCAmelCase_: List[Any]     ):
      snake_case_     :			List[Any]       =       access_by_string(lowerCAmelCase_ ,	lowerCAmelCase_     )
      snake_case_     :			int       =       hf_weight.data

      if fsq_value.shape != hf_value.shape:
            raise ValueError(f"{full_name} has size {fsq_value.shape}, but {hf_value.shape} was found."     )
      snake_case_     :			str       =       fsq_value
      logger.info(f"{full_name} was correctly initialized from {hf_weight_path}."     )






def 					SCREAMING_SNAKE_CASE_			(		lowerCAmelCase_: List[str] ,	lowerCAmelCase_: str ,	lowerCAmelCase_: List[str] ,	lowerCAmelCase_: Optional[Any]     ):
      snake_case_     :			Any       =       full_name.split("conv_layers."     )[-1]
      snake_case_     :			Tuple       =       name.split("."     )
      snake_case_     :			Union[str, Any]       =       int(items[0]     )
      snake_case_     :			Optional[int]       =       int(items[1]     )

      snake_case_     :			int       =       name.split("."     )[-1]
      if type_id == 0:
            snake_case_     :			Dict       =       "conv"
      elif type_id == 2:
            snake_case_     :			Dict       =       "layer_norm"
      else:
            unused_weights.append(lowerCAmelCase_     )
            return

      set_weights(lowerCAmelCase_ ,	lowerCAmelCase_ ,	lowerCAmelCase_ ,	f"conv_layers.{layer_id}.{layer_type}.{weight_type}"     )






def 					SCREAMING_SNAKE_CASE_			(		lowerCAmelCase_: List[Any] ,	lowerCAmelCase_: List[Any] ,	lowerCAmelCase_: str ,	lowerCAmelCase_: Any     ):
      snake_case_     :			Any       =       full_name.split("pos_conv."     )[-1]
      snake_case_     :			Tuple       =       name.split("."     )
      snake_case_     :			List[str]       =       int(items[0]     )
      snake_case_     :			List[Any]       =       int(items[1]     )

      snake_case_     :			Any       =       name.split("."     )[-1]
      if type_id != 0:
            unused_weights.append(lowerCAmelCase_     )
            return
      else:
            snake_case_     :			int       =       "conv"

      set_weights(lowerCAmelCase_ ,	lowerCAmelCase_ ,	lowerCAmelCase_ ,	f"layers.{layer_id}.{layer_type}.{weight_type}"     )






@torch.no_grad()
def 					SCREAMING_SNAKE_CASE_			(		lowerCAmelCase_: Tuple ,	lowerCAmelCase_: Any ,	lowerCAmelCase_: Dict=None ,	lowerCAmelCase_: List[str]=None ,	lowerCAmelCase_: Union[str, Any]=True     ):
      if config_path is not None:
            snake_case_     :			Union[str, Any]       =       DataaVecAudioConfig.from_pretrained(lowerCAmelCase_     )
      else:
            snake_case_     :			List[Any]       =       DataaVecAudioConfig()

      if not is_finetuned:
            # Modify final_proj layer name
            snake_case_     :			List[Any]       =       DataaVecAudioModel(lowerCAmelCase_     )
            snake_case_     :			int       =       os.path.dirname(lowerCAmelCase_     )

            snake_case_     :			Optional[int]       =       torch.load(lowerCAmelCase_     )
            snake_case_     :			Union[str, Any]       =       state_dict["model"].pop("final_proj.0.weight"     )
            snake_case_     :			Tuple       =       state_dict["model"].pop("final_proj.0.bias"     )
            snake_case_     :			int       =       os.path.join(lowerCAmelCase_ ,	"converted.pt"     )
            torch.save(lowerCAmelCase_ ,	lowerCAmelCase_     )
      else:
            snake_case_     :			List[Any]       =       DataaVecAudioForCTC(lowerCAmelCase_     )
            snake_case_     :			Union[str, Any]       =       checkpoint_path

      def load_dataavec(lowerCAmelCase_: Optional[Any]     ):
            snake_case_     :			Union[str, Any]       =       fairseq.checkpoint_utils.load_model_ensemble_and_task([path]     )
            return model[0].eval()

      snake_case_     :			Optional[Any]       =       load_dataavec(lowerCAmelCase_     )

      recursively_load_weights(lowerCAmelCase_ ,	lowerCAmelCase_ ,	not is_finetuned     )

      snake_case_     :			str       =       WavaVecaProcessor.from_pretrained("facebook/wav2vec2-large-lv60"     )

      snake_case_     :			List[str]       =       load_dataset("patrickvonplaten/librispeech_asr_dummy" ,	"clean" ,	split="validation"     )
      snake_case_     :			List[Any]       =       [x["array"] for x in ds[:4]["audio"]]

      snake_case_     :			Tuple       =       processor(lowerCAmelCase_ ,	return_tensors="pt" ,	padding=lowerCAmelCase_     )

      snake_case_     :			str       =       inputs.input_values
      snake_case_     :			Optional[int]       =       inputs.attention_mask
      #    input_values = inputs.input_values[:, :-1]
      #    attention_mask = inputs.attention_mask[:, :-1]

      hf_wavavec.eval()
      model.eval()
      if is_finetuned:
            snake_case_     :			Union[str, Any]       =       model(source=lowerCAmelCase_ ,	padding_mask=(1 - attention_mask) ,	mask=lowerCAmelCase_ ,	features_only=lowerCAmelCase_     )[
                "encoder_out"
            ].transpose(0 ,	1     )
            snake_case_     :			Any       =       hf_wavavec(lowerCAmelCase_ ,	attention_mask=lowerCAmelCase_     )["logits"]

            snake_case_     :			Optional[int]       =       torch.argmax(lowerCAmelCase_ ,	dim=-1     )
            snake_case_     :			List[str]       =       processor.batch_decode(lowerCAmelCase_     )

            print(f"Expected Output: {ds[:4]['text']}, Pred: {output_string}"     )
      else:
            snake_case_     :			str       =       model(source=lowerCAmelCase_ ,	padding_mask=(1 - attention_mask) ,	mask=lowerCAmelCase_ ,	features_only=lowerCAmelCase_     )[
                "layer_results"
            ][-1][0].transpose(0 ,	1     )
            snake_case_     :			Any       =       hf_wavavec(lowerCAmelCase_ ,	attention_mask=lowerCAmelCase_     )["last_hidden_state"]

      print(our_output.shape ,	their_output.shape     )
      snake_case_     :			List[str]       =       torch.max(torch.abs(our_output - their_output     )     ).item()
      print(f"max_absolute_diff = {max_absolute_diff}"     )  # ~ 1e-7
      snake_case_     :			Dict       =       torch.allclose(lowerCAmelCase_ ,	lowerCAmelCase_ ,	atol=1e-3     )
      print("Do both models output the same tensors?" ,	"🔥" if success else "💩"     )
      if not success:
            raise Exception("Something went wRoNg"     )

      hf_wavavec.save_pretrained(lowerCAmelCase_     )

      if is_finetuned:
            processor.save_pretrained(lowerCAmelCase_     )
      else:
            processor.feature_extractor.save_pretrained(lowerCAmelCase_     )


if __name__ == "__main__":
     UpperCAmelCase							=       argparse.ArgumentParser()
     parser.add_argument("--pytorch_dump_folder_path", default=None, type=str, help="Path to the output PyTorch model.")
     parser.add_argument("--checkpoint_path", default=None, type=str, help="Path to fairseq checkpoint")
     parser.add_argument("--dict_path", default=None, type=str, help="Path to dict of fine-tuned model")
     parser.add_argument("--config_path", default=None, type=str, help="Path to hf config.json of model to convert")
     parser.add_argument(
         "--not_finetuned", action="store_true", help="Whether the model to convert is a fine-tuned model or not"
     )
     UpperCAmelCase							=       parser.parse_args()
     convert_wavaveca_checkpoint(
         args.checkpoint_path, args.pytorch_dump_folder_path, args.config_path, args.dict_path, not args.not_finetuned
     )




import requests
from bsa import BeautifulSoup






def 					SCREAMING_SNAKE_CASE_			(		lowerCAmelCase_: int ,	lowerCAmelCase_: str     ):
      snake_case_     :			Optional[int]       =       (
          "https://www.horoscope.com/us/horoscopes/general/"
          f"horoscope-general-daily-{day}.aspx?sign={zodiac_sign}"
      )
      snake_case_     :			int       =       BeautifulSoup(requests.get(lowerCAmelCase_     ).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",
     )
     UpperCAmelCase							=       int(input("number> ").strip())
     print("choose some day:\n", "yesterday\n", "today\n", "tomorrow\n")
     UpperCAmelCase							=       input("enter the day> ")
     UpperCAmelCase							=       horoscope(zodiac_sign, day)
     print(horoscope_text)



