


'''simple docstring'''


import argparse
import json
from pathlib import Path

import torch
import torchaudio
from datasets import load_dataset
from huggingface_hub import hf_hub_download

from transformers import ASTConfig, ASTFeatureExtractor, ASTForAudioClassification
from transformers.utils import logging


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






def        __lowerCAmelCase       (__lowerCAmelCase      ):
		_UpperCAmelCase						:				Any	    =					ASTConfig()

		if "10-10" in model_name:
				pass
		elif "speech-commands" in model_name:
				_UpperCAmelCase						:				Union[str, Any]	    =					128
		elif "12-12" in model_name:
				_UpperCAmelCase						:				Union[str, Any]	    =					12
				_UpperCAmelCase						:				str	    =					12
		elif "14-14" in model_name:
				_UpperCAmelCase						:				Union[str, Any]	    =					14
				_UpperCAmelCase						:				Optional[int]	    =					14
		elif "16-16" in model_name:
				_UpperCAmelCase						:				List[str]	    =					16
				_UpperCAmelCase						:				Optional[Any]	    =					16
		else:
				raise ValueError("Model not supported"      )

		_UpperCAmelCase						:				Union[str, Any]	    =					"huggingface/label-files"
		if "speech-commands" in model_name:
				_UpperCAmelCase						:				Tuple	    =					35
				_UpperCAmelCase						:				Dict	    =					"speech-commands-v2-id2label.json"
		else:
				_UpperCAmelCase						:				int	    =					527
				_UpperCAmelCase						:				Optional[Any]	    =					"audioset-id2label.json"

		_UpperCAmelCase						:				List[str]	    =					json.load(open(hf_hub_download(__lowerCAmelCase					,       __lowerCAmelCase					,       repo_type="dataset"      )					,       "r"      )      )
		_UpperCAmelCase						:				Tuple	    =					{int(__lowerCAmelCase      ): v for k, v in idalabel.items()}
		_UpperCAmelCase						:				Dict	    =					idalabel
		_UpperCAmelCase						:				Dict	    =					{v: k for k, v in idalabel.items()}

		return config






def        __lowerCAmelCase       (__lowerCAmelCase      ):



		if "module.v" in name:
				_UpperCAmelCase						:				Any	    =					name.replace("module.v"					,       "audio_spectrogram_transformer"      )
		if "cls_token" in name:
				_UpperCAmelCase						:				List[str]	    =					name.replace("cls_token"					,       "embeddings.cls_token"      )
		if "dist_token" in name:
				_UpperCAmelCase						:				Dict	    =					name.replace("dist_token"					,       "embeddings.distillation_token"      )
		if "pos_embed" in name:
				_UpperCAmelCase						:				Optional[int]	    =					name.replace("pos_embed"					,       "embeddings.position_embeddings"      )
		if "patch_embed.proj" in name:
				_UpperCAmelCase						:				List[str]	    =					name.replace("patch_embed.proj"					,       "embeddings.patch_embeddings.projection"      )
		# transformer blocks
		if "blocks" in name:
				_UpperCAmelCase						:				str	    =					name.replace("blocks"					,       "encoder.layer"      )
		if "attn.proj" in name:
				_UpperCAmelCase						:				str	    =					name.replace("attn.proj"					,       "attention.output.dense"      )
		if "attn" in name:
				_UpperCAmelCase						:				Any	    =					name.replace("attn"					,       "attention.self"      )
		if "norm1" in name:
				_UpperCAmelCase						:				str	    =					name.replace("norm1"					,       "layernorm_before"      )
		if "norm2" in name:
				_UpperCAmelCase						:				int	    =					name.replace("norm2"					,       "layernorm_after"      )
		if "mlp.fc1" in name:
				_UpperCAmelCase						:				Optional[int]	    =					name.replace("mlp.fc1"					,       "intermediate.dense"      )
		if "mlp.fc2" in name:
				_UpperCAmelCase						:				List[str]	    =					name.replace("mlp.fc2"					,       "output.dense"      )
		# final layernorm
		if "audio_spectrogram_transformer.norm" in name:
				_UpperCAmelCase						:				List[str]	    =					name.replace("audio_spectrogram_transformer.norm"					,       "audio_spectrogram_transformer.layernorm"      )
		# classifier head
		if "module.mlp_head.0" in name:
				_UpperCAmelCase						:				List[Any]	    =					name.replace("module.mlp_head.0"					,       "classifier.layernorm"      )
		if "module.mlp_head.1" in name:
				_UpperCAmelCase						:				List[Any]	    =					name.replace("module.mlp_head.1"					,       "classifier.dense"      )

		return name






def        __lowerCAmelCase       (__lowerCAmelCase					,       __lowerCAmelCase      ):



		for key in orig_state_dict.copy().keys():
				_UpperCAmelCase						:				Any	    =					orig_state_dict.pop(__lowerCAmelCase      )

				if "qkv" in key:
						_UpperCAmelCase						:				List[Any]	    =					key.split("."      )
						_UpperCAmelCase						:				str	    =					int(key_split[3]      )
						_UpperCAmelCase						:				Tuple	    =					config.hidden_size
						if "weight" in key:
								_UpperCAmelCase						:				Optional[Any]	    =					val[:dim, :]
								_UpperCAmelCase						:				Dict	    =					val[dim : dim * 2, :]
								_UpperCAmelCase						:				List[Any]	    =					val[-dim:, :]
						else:
								_UpperCAmelCase						:				Union[str, Any]	    =					val[:dim]
								_UpperCAmelCase						:				int	    =					val[dim : dim * 2]
								_UpperCAmelCase						:				Union[str, Any]	    =					val[-dim:]
				else:
						_UpperCAmelCase						:				int	    =					val

		return orig_state_dict






def        __lowerCAmelCase       (__lowerCAmelCase      ):
		_UpperCAmelCase						:				Optional[Any]	    =					[
		    "module.v.head.weight",
		    "module.v.head.bias",
		    "module.v.head_dist.weight",
		    "module.v.head_dist.bias",
		]
		for k in ignore_keys:
				state_dict.pop(__lowerCAmelCase					,       __lowerCAmelCase      )






@torch.no_grad()
def        __lowerCAmelCase       (__lowerCAmelCase					,       __lowerCAmelCase					,       __lowerCAmelCase=False      ):
		_UpperCAmelCase						:				List[str]	    =					get_audio_spectrogram_transformer_config(__lowerCAmelCase      )

		_UpperCAmelCase						:				int	    =					{
		    "ast-finetuned-audioset-10-10-0.4593": (
		        "https://www.dropbox.com/s/ca0b1v2nlxzyeb4/audioset_10_10_0.4593.pth?dl=1"
		    ),
		    "ast-finetuned-audioset-10-10-0.450": (
		        "https://www.dropbox.com/s/1tv0hovue1bxupk/audioset_10_10_0.4495.pth?dl=1"
		    ),
		    "ast-finetuned-audioset-10-10-0.448": (
		        "https://www.dropbox.com/s/6u5sikl4b9wo4u5/audioset_10_10_0.4483.pth?dl=1"
		    ),
		    "ast-finetuned-audioset-10-10-0.448-v2": (
		        "https://www.dropbox.com/s/kt6i0v9fvfm1mbq/audioset_10_10_0.4475.pth?dl=1"
		    ),
		    "ast-finetuned-audioset-12-12-0.447": (
		        "https://www.dropbox.com/s/snfhx3tizr4nuc8/audioset_12_12_0.4467.pth?dl=1"
		    ),
		    "ast-finetuned-audioset-14-14-0.443": (
		        "https://www.dropbox.com/s/z18s6pemtnxm4k7/audioset_14_14_0.4431.pth?dl=1"
		    ),
		    "ast-finetuned-audioset-16-16-0.442": (
		        "https://www.dropbox.com/s/mdsa4t1xmcimia6/audioset_16_16_0.4422.pth?dl=1"
		    ),
		    "ast-finetuned-speech-commands-v2": (
		        "https://www.dropbox.com/s/q0tbqpwv44pquwy/speechcommands_10_10_0.9812.pth?dl=1"
		    ),
		}

		# load original state_dict
		_UpperCAmelCase						:				Optional[int]	    =					model_name_to_url[model_name]
		_UpperCAmelCase						:				Optional[int]	    =					torch.hub.load_state_dict_from_url(__lowerCAmelCase					,       map_location="cpu"      )
		# remove some keys
		remove_keys(__lowerCAmelCase      )
		# rename some keys
		_UpperCAmelCase						:				Optional[int]	    =					convert_state_dict(__lowerCAmelCase					,       __lowerCAmelCase      )

		# load 🤗 model
		_UpperCAmelCase						:				Tuple	    =					ASTForAudioClassification(__lowerCAmelCase      )
		model.eval()

		model.load_state_dict(__lowerCAmelCase      )

		# verify outputs on dummy input
		# source: https://github.com/YuanGongND/ast/blob/79e873b8a54d0a3b330dd522584ff2b9926cd581/src/run.py#L62
		_UpperCAmelCase						:				Union[str, Any]	    =					-4.2_6_7_7_3_9_3 if "speech-commands" not in model_name else -6.8_4_5_9_7_8
		_UpperCAmelCase						:				Optional[int]	    =					4.5_6_8_9_9_7_4 if "speech-commands" not in model_name else 5.5_6_5_4_5_2_6
		_UpperCAmelCase						:				Optional[int]	    =					1_024 if "speech-commands" not in model_name else 128
		_UpperCAmelCase						:				Optional[Any]	    =					ASTFeatureExtractor(mean=__lowerCAmelCase					,       std=__lowerCAmelCase					,       max_length=__lowerCAmelCase      )

		if "speech-commands" in model_name:
				_UpperCAmelCase						:				List[str]	    =					load_dataset("speech_commands"					,       "v0.02"					,       split="validation"      )
				_UpperCAmelCase						:				Union[str, Any]	    =					dataset[0]["audio"]["array"]
		else:
				_UpperCAmelCase						:				Optional[int]	    =					hf_hub_download(
				    repo_id="nielsr/audio-spectogram-transformer-checkpoint"					,       filename="sample_audio.flac"					,       repo_type="dataset"					,       )

				_UpperCAmelCase    ,			_UpperCAmelCase						:				List[Any]	    =					torchaudio.load(__lowerCAmelCase      )
				_UpperCAmelCase						:				int	    =					waveform.squeeze().numpy()

		_UpperCAmelCase						:				Any	    =					feature_extractor(__lowerCAmelCase					,       sampling_rate=16_000					,       return_tensors="pt"      )

		# forward pass
		_UpperCAmelCase						:				str	    =					model(**__lowerCAmelCase      )
		_UpperCAmelCase						:				Tuple	    =					outputs.logits

		if model_name == "ast-finetuned-audioset-10-10-0.4593":
				_UpperCAmelCase						:				Optional[int]	    =					torch.tensor([-0.8_7_6_0, -7.0_0_4_2, -8.6_6_0_2]      )
		elif model_name == "ast-finetuned-audioset-10-10-0.450":
				_UpperCAmelCase						:				Dict	    =					torch.tensor([-1.1_9_8_6, -7.0_9_0_3, -8.2_7_1_8]      )
		elif model_name == "ast-finetuned-audioset-10-10-0.448":
				_UpperCAmelCase						:				Dict	    =					torch.tensor([-2.6_1_2_8, -8.0_0_8_0, -9.4_3_4_4]      )
		elif model_name == "ast-finetuned-audioset-10-10-0.448-v2":
				_UpperCAmelCase						:				Any	    =					torch.tensor([-1.5_0_8_0, -7.4_5_3_4, -8.8_9_1_7]      )
		elif model_name == "ast-finetuned-audioset-12-12-0.447":
				_UpperCAmelCase						:				Any	    =					torch.tensor([-0.5_0_5_0, -6.5_8_3_3, -8.0_8_4_3]      )
		elif model_name == "ast-finetuned-audioset-14-14-0.443":
				_UpperCAmelCase						:				Optional[Any]	    =					torch.tensor([-0.3_8_2_6, -7.0_3_3_6, -8.2_4_1_3]      )
		elif model_name == "ast-finetuned-audioset-16-16-0.442":
				_UpperCAmelCase						:				int	    =					torch.tensor([-1.2_1_1_3, -6.9_1_0_1, -8.3_4_7_0]      )
		elif model_name == "ast-finetuned-speech-commands-v2":
				_UpperCAmelCase						:				Optional[Any]	    =					torch.tensor([6.1_5_8_9, -8.0_5_6_6, -8.7_9_8_4]      )
		else:
				raise ValueError("Unknown model name"      )
		if not torch.allclose(logits[0, :3]					,       __lowerCAmelCase					,       atol=1e-4      ):
				raise ValueError("Logits don\'t match"      )
		print("Looks ok!"      )

		if pytorch_dump_folder_path is not None:
				Path(__lowerCAmelCase      ).mkdir(exist_ok=__lowerCAmelCase      )
				print(F"""Saving model {model_name} to {pytorch_dump_folder_path}"""      )
				model.save_pretrained(__lowerCAmelCase      )
				print(F"""Saving feature extractor to {pytorch_dump_folder_path}"""      )
				feature_extractor.save_pretrained(__lowerCAmelCase      )

		if push_to_hub:
				print("Pushing model and feature extractor to the hub..."      )
				model.push_to_hub(F"""MIT/{model_name}"""      )
				feature_extractor.push_to_hub(F"""MIT/{model_name}"""      )


if __name__ == "__main__":
						lowerCamelCase__					=   argparse.ArgumentParser()
						# Required parameters
						parser.add_argument(
						    '--model_name',
						    default='ast-finetuned-audioset-10-10-0.4593',
						    type=str,
						    help='Name of the Audio Spectrogram Transformer model you\'d like to convert.',
						)
						parser.add_argument(
						    '--pytorch_dump_folder_path', default=None, type=str, help='Path to the output PyTorch model directory.'
						)
						parser.add_argument(
						    '--push_to_hub', action='store_true', help='Whether or not to push the converted model to the 🤗 hub.'
						)

						lowerCamelCase__					=   parser.parse_args()
						convert_audio_spectrogram_transformer_checkpoint(args.model_name, args.pytorch_dump_folder_path, args.push_to_hub)




import qiskit





def 				UpperCAmelCase						(    lowercase							,			lowercase							):







				"""simple docstring"""



				__lowercase 			=							qiskit.Aer.get_backend('''aer_simulator'''							)

				# Create a Quantum Circuit acting on the q register
				__lowercase 			=							qiskit.QuantumCircuit(lowercase							,			lowercase							)

				# Map the quantum measurement to the classical bits
				circuit.measure([0]							,			[0]							)

				# Execute the circuit on the simulator
				__lowercase 			=							qiskit.execute(lowercase							,			lowercase							,			shots=1000							)

				# Return the histogram data of the results of the experiment.
				return job.result().get_counts(lowercase							)


if __name__ == "__main__":
		print(F'''Total count for various states are: {single_qubit_measure(1, 1)}''')