




from collections import OrderedDict
from typing import TYPE_CHECKING, Any, Mapping, Optional, Union

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig, OnnxSeqaSeqConfigWithPast
from ...utils import logging


if TYPE_CHECKING:
		from ...feature_extraction_utils import FeatureExtractionMixin
		from ...tokenization_utils_base import PreTrainedTokenizerBase
		from ...utils import TensorType

__A						:							str							=  logging.get_logger(__name__)

__A						:							List[Any]							=  {
    """openai/whisper-base""": """https://huggingface.co/openai/whisper-base/resolve/main/config.json""",
}

# fmt: off
__A						:							int							=  [
    1, 2, 7, 8, 9, 1_0, 1_4, 2_5,
    2_6, 2_7, 2_8, 2_9, 3_1, 5_8, 5_9, 6_0, 6_1, 6_2,
    6_3, 9_0, 9_1, 9_2, 9_3, 3_5_7, 3_6_6, 4_3_8, 5_3_2, 6_8_5,
    7_0_5, 7_9_6, 9_3_0, 1_0_5_8, 1_2_2_0, 1_2_6_7, 1_2_7_9, 1_3_0_3, 1_3_4_3, 1_3_7_7,
    1_3_9_1, 1_6_3_5, 1_7_8_2, 1_8_7_5, 2_1_6_2, 2_3_6_1, 2_4_8_8, 3_4_6_7, 4_0_0_8, 4_2_1_1,
    4_6_0_0, 4_8_0_8, 5_2_9_9, 5_8_5_5, 6_3_2_9, 7_2_0_3, 9_6_0_9, 9_9_5_9, 1_0_5_6_3, 1_0_7_8_6,
    1_1_4_2_0, 1_1_7_0_9, 1_1_9_0_7, 1_3_1_6_3, 1_3_6_9_7, 1_3_7_0_0, 1_4_8_0_8, 1_5_3_0_6, 1_6_4_1_0, 1_6_7_9_1,
    1_7_9_9_2, 1_9_2_0_3, 1_9_5_1_0, 2_0_7_2_4, 2_2_3_0_5, 2_2_9_3_5, 2_7_0_0_7, 3_0_1_0_9, 3_0_4_2_0, 3_3_4_0_9,
    3_4_9_4_9, 4_0_2_8_3, 4_0_4_9_3, 4_0_5_4_9, 4_7_2_8_2, 4_9_1_4_6, 5_0_2_5_7, 5_0_3_5_9, 5_0_3_6_0, 5_0_3_6_1
]
__A						:							Union[str, Any]							=  [
    1, 2, 7, 8, 9, 1_0, 1_4, 2_5,
    2_6, 2_7, 2_8, 2_9, 3_1, 5_8, 5_9, 6_0, 6_1, 6_2,
    6_3, 9_0, 9_1, 9_2, 9_3, 3_5_9, 5_0_3, 5_2_2, 5_4_2, 8_7_3,
    8_9_3, 9_0_2, 9_1_8, 9_2_2, 9_3_1, 1_3_5_0, 1_8_5_3, 1_9_8_2, 2_4_6_0, 2_6_2_7,
    3_2_4_6, 3_2_5_3, 3_2_6_8, 3_5_3_6, 3_8_4_6, 3_9_6_1, 4_1_8_3, 4_6_6_7, 6_5_8_5, 6_6_4_7,
    7_2_7_3, 9_0_6_1, 9_3_8_3, 1_0_4_2_8, 1_0_9_2_9, 1_1_9_3_8, 1_2_0_3_3, 1_2_3_3_1, 1_2_5_6_2, 1_3_7_9_3,
    1_4_1_5_7, 1_4_6_3_5, 1_5_2_6_5, 1_5_6_1_8, 1_6_5_5_3, 1_6_6_0_4, 1_8_3_6_2, 1_8_9_5_6, 2_0_0_7_5, 2_1_6_7_5,
    2_2_5_2_0, 2_6_1_3_0, 2_6_1_6_1, 2_6_4_3_5, 2_8_2_7_9, 2_9_4_6_4, 3_1_6_5_0, 3_2_3_0_2, 3_2_4_7_0, 3_6_8_6_5,
    4_2_8_6_3, 4_7_4_2_5, 4_9_8_7_0, 5_0_2_5_4, 5_0_2_5_8, 5_0_3_6_0, 5_0_3_6_1, 5_0_3_6_2
]




class 			UpperCAmelCase_      (   A       ):




							'''simple docstring'''



							a__						  =     '''whisper'''
							a__						  =     ['''past_key_values''']
							a__						  =     {'''num_attention_heads''': '''encoder_attention_heads''', '''hidden_size''': '''d_model'''}





							def __init__(					self       :	int       ,     a       :	Any=51_865       ,     a       :	Optional[int]=80       ,     a       :	Optional[int]=6       ,     a       :	str=4       ,     a       :	List[Any]=6       ,     a       :	Tuple=4       ,     a       :	List[Any]=1_536       ,     a       :	Any=1_536       ,     a       :	Optional[Any]=0.0       ,     a       :	List[str]=0.0       ,     a       :	Tuple=50_257       ,     a       :	int=True       ,     a       :	Any=True       ,     a       :	str="gelu"       ,     a       :	Tuple=256       ,     a       :	Union[str, Any]=0.0       ,     a       :	Optional[Any]=0.0       ,     a       :	Any=0.0       ,     a       :	Optional[int]=0.02       ,     a       :	List[str]=False       ,     a       :	Any=1_500       ,     a       :	List[Any]=448       ,     a       :	Optional[Any]=50_256       ,     a       :	Dict=50_256       ,     a       :	str=50_256       ,     a       :	List[str]=None       ,     a       :	Optional[int]=[220, 50_256]       ,     a       :	Optional[Any]=False       ,     a       :	Union[str, Any]=256       ,     a       :	Dict=False       ,     a       :	int=0.05       ,     a       :	Any=10       ,     a       :	Tuple=2       ,     a       :	Tuple=0.0       ,     a       :	Optional[Any]=10       ,     a       :	Optional[Any]=0       ,     a       :	str=7       ,     **a       :	Dict       ,     )			->					Tuple:
										SCREAMING_SNAKE_CASE           =					vocab_size
										SCREAMING_SNAKE_CASE           =					num_mel_bins
										SCREAMING_SNAKE_CASE           =					d_model
										SCREAMING_SNAKE_CASE           =					encoder_layers
										SCREAMING_SNAKE_CASE           =					encoder_attention_heads
										SCREAMING_SNAKE_CASE           =					decoder_layers
										SCREAMING_SNAKE_CASE           =					decoder_attention_heads
										SCREAMING_SNAKE_CASE           =					decoder_ffn_dim
										SCREAMING_SNAKE_CASE           =					encoder_ffn_dim
										SCREAMING_SNAKE_CASE           =					dropout
										SCREAMING_SNAKE_CASE           =					attention_dropout
										SCREAMING_SNAKE_CASE           =					activation_dropout
										SCREAMING_SNAKE_CASE           =					activation_function
										SCREAMING_SNAKE_CASE           =					init_std
										SCREAMING_SNAKE_CASE           =					encoder_layerdrop
										SCREAMING_SNAKE_CASE           =					decoder_layerdrop
										SCREAMING_SNAKE_CASE           =					use_cache
										SCREAMING_SNAKE_CASE           =					encoder_layers
										SCREAMING_SNAKE_CASE           =					scale_embedding  # scale factor will be sqrt(d_model) if True
										SCREAMING_SNAKE_CASE           =					max_source_positions
										SCREAMING_SNAKE_CASE           =					max_target_positions

										# Audio Classification-specific parameters. Feel free to ignore for other classes.
										SCREAMING_SNAKE_CASE           =					classifier_proj_size
										SCREAMING_SNAKE_CASE           =					use_weighted_layer_sum

										# fine-tuning config parameters for SpecAugment: https://arxiv.org/abs/1904.08779
										SCREAMING_SNAKE_CASE           =					apply_spec_augment
										SCREAMING_SNAKE_CASE           =					mask_time_prob
										SCREAMING_SNAKE_CASE           =					mask_time_length
										SCREAMING_SNAKE_CASE           =					mask_time_min_masks
										SCREAMING_SNAKE_CASE           =					mask_feature_prob
										SCREAMING_SNAKE_CASE           =					mask_feature_length
										SCREAMING_SNAKE_CASE           =					mask_feature_min_masks

										SCREAMING_SNAKE_CASE           =					median_filter_width

										super().__init__(
										    pad_token_id=a       ,     bos_token_id=a       ,     eos_token_id=a       ,     is_encoder_decoder=a       ,     decoder_start_token_id=a       ,     suppress_tokens=a       ,     begin_suppress_tokens=a       ,     **a       ,     )





class 			UpperCAmelCase_      (   A       ):




							'''simple docstring'''



							@property
							def    _UpperCAmelCase     (					self       :	Tuple			)			->					Mapping[str, Mapping[int, str]]:
										SCREAMING_SNAKE_CASE           =					OrderedDict(
										    [
										        ("""input_features""", {0: """batch""", 1: """feature_size""", 2: """encoder_sequence"""}),
										    ]			)
										if self.use_past:
													SCREAMING_SNAKE_CASE           =					{0: """batch"""}
										else:
													SCREAMING_SNAKE_CASE           =					{0: """batch""", 1: """decoder_sequence"""}

										if self.use_past:
													self.fill_with_past_key_values_(a       ,     direction="""inputs"""			)

										return common_inputs





							def    _UpperCAmelCase     (					self       :	Union[str, Any]       ,     a       :	Union["PreTrainedTokenizerBase", "FeatureExtractionMixin"]       ,     a       :	int = -1       ,     a       :	int = -1       ,     a       :	bool = False       ,     a       :	Optional["TensorType"] = None       ,     a       :	int = 22_050       ,     a       :	float = 5.0       ,     a       :	int = 220       ,     )			->					Mapping[str, Any]:
										SCREAMING_SNAKE_CASE           =					OrderedDict()
										SCREAMING_SNAKE_CASE           =					OnnxConfig.generate_dummy_inputs(
										    self       ,     preprocessor=preprocessor.feature_extractor       ,     batch_size=a       ,     framework=a       ,     sampling_rate=a       ,     time_duration=a       ,     frequency=a       ,     )
										SCREAMING_SNAKE_CASE           =					encoder_inputs["""input_features"""].shape[2]
										SCREAMING_SNAKE_CASE           =					encoder_sequence_length // 2 if self.use_past else seq_length

										SCREAMING_SNAKE_CASE           =					super().generate_dummy_inputs(
										    preprocessor.tokenizer       ,     a       ,     a       ,     a       ,     a			)

										SCREAMING_SNAKE_CASE           =					encoder_inputs.pop("""input_features"""			)
										SCREAMING_SNAKE_CASE           =					decoder_inputs.pop("""decoder_input_ids"""			)

										if "past_key_values" in decoder_inputs:
													SCREAMING_SNAKE_CASE           =					decoder_inputs.pop("""past_key_values"""			)

										return dummy_inputs







							@property
							def    _UpperCAmelCase     (					self       :	List[Any]			)			->					float:
										return 1E-3












from __future__ import annotations




class 			UpperCAmelCase_      :




							'''simple docstring'''



							def __init__(					self       :	Optional[int]       ,     a       :	int = 0			)			->					str:
										SCREAMING_SNAKE_CASE           =					key





							def    _UpperCAmelCase     (					self       :	Tuple       ,     a       :	str       ,     a       :	int			)			->					list[str]:
										assert isinstance(a       ,     a			) and isinstance(a       ,     a			)

										SCREAMING_SNAKE_CASE           =					key or self.__key or 1

										# make sure key is an appropriate size
										key %= 255

										return [chr(ord(a			) ^ key			) for ch in content]





							def    _UpperCAmelCase     (					self       :	Union[str, Any]       ,     a       :	str       ,     a       :	int			)			->					list[str]:
										assert isinstance(a       ,     a			) and isinstance(a       ,     a			)

										SCREAMING_SNAKE_CASE           =					key or self.__key or 1

										# make sure key is an appropriate size
										key %= 255

										return [chr(ord(a			) ^ key			) for ch in content]





							def    _UpperCAmelCase     (					self       :	Union[str, Any]       ,     a       :	str       ,     a       :	int = 0			)			->					str:
										assert isinstance(a       ,     a			) and isinstance(a       ,     a			)

										SCREAMING_SNAKE_CASE           =					key or self.__key or 1

										# make sure key can be any size
										while key > 255:
													key -= 255

										# This will be returned
										SCREAMING_SNAKE_CASE           =					""""""

										for ch in content:
													ans += chr(ord(a			) ^ key			)

										return ans





							def    _UpperCAmelCase     (					self       :	Dict       ,     a       :	str       ,     a       :	int = 0			)			->					str:
										assert isinstance(a       ,     a			) and isinstance(a       ,     a			)

										SCREAMING_SNAKE_CASE           =					key or self.__key or 1

										# make sure key can be any size
										while key > 255:
													key -= 255

										# This will be returned
										SCREAMING_SNAKE_CASE           =					""""""

										for ch in content:
													ans += chr(ord(a			) ^ key			)

										return ans





							def    _UpperCAmelCase     (					self       :	Optional[int]       ,     a       :	str       ,     a       :	int = 0			)			->					bool:
										assert isinstance(a       ,     a			) and isinstance(a       ,     a			)

										try:
													with open(a			) as fin, open("""encrypt.out"""       ,     """w+"""			) as fout:
																# actual encrypt-process
																for line in fin:
																			fout.write(self.encrypt_string(a       ,     a			)			)

										except OSError:
													return False

										return True







							def    _UpperCAmelCase     (					self       :	Dict       ,     a       :	str       ,     a       :	int			)			->					bool:
										assert isinstance(a       ,     a			) and isinstance(a       ,     a			)

										try:
													with open(a			) as fin, open("""decrypt.out"""       ,     """w+"""			) as fout:
																# actual encrypt-process
																for line in fin:
																			fout.write(self.decrypt_string(a       ,     a			)			)

										except OSError:
													return False

										return True


# Tests
# crypt = XORCipher()
# key = 67

# # test encrypt
# print(crypt.encrypt("hallo welt",key))
# # test decrypt
# print(crypt.decrypt(crypt.encrypt("hallo welt",key), key))

# # test encrypt_string
# print(crypt.encrypt_string("hallo welt",key))

# # test decrypt_string
# print(crypt.decrypt_string(crypt.encrypt_string("hallo welt",key),key))

# if (crypt.encrypt_file("test.txt",key)):
#       print("encrypt successful")
# else:
#       print("encrypt unsuccessful")

# if (crypt.decrypt_file("encrypt.out",key)):
#       print("decrypt successful")
# else:
#       print("decrypt unsuccessful")






