

from ...configuration_utils import PretrainedConfig
from ...utils import logging


a		=logging.get_logger(__name__)

a		={
    """MIT/ast-finetuned-audioset-10-10-0.4593""": (
        """https://huggingface.co/MIT/ast-finetuned-audioset-10-10-0.4593/resolve/main/config.json"""
    ),
}






class        A_		(       SCREAMING_SNAKE_CASE				):
							_UpperCAmelCase    :  Optional[int]						      =      '''audio-spectrogram-transformer'''
							def __init__(		self		:			Union[str, Any]   ,SCREAMING_SNAKE_CASE__		:			int=7_6_8   ,SCREAMING_SNAKE_CASE__		:			Any=1_2   ,SCREAMING_SNAKE_CASE__		:			Union[str, Any]=1_2   ,SCREAMING_SNAKE_CASE__		:			str=3_0_7_2   ,SCREAMING_SNAKE_CASE__		:			List[Any]="gelu"   ,SCREAMING_SNAKE_CASE__		:			Dict=0.0   ,SCREAMING_SNAKE_CASE__		:			List[str]=0.0   ,SCREAMING_SNAKE_CASE__		:			Dict=0.02   ,SCREAMING_SNAKE_CASE__		:			Optional[Any]=1E-12   ,SCREAMING_SNAKE_CASE__		:			List[str]=1_6   ,SCREAMING_SNAKE_CASE__		:			Any=True   ,SCREAMING_SNAKE_CASE__		:			Optional[int]=1_0   ,SCREAMING_SNAKE_CASE__		:			Optional[Any]=1_0   ,SCREAMING_SNAKE_CASE__		:			Optional[Any]=1_0_2_4   ,SCREAMING_SNAKE_CASE__		:			Union[str, Any]=1_2_8   ,**SCREAMING_SNAKE_CASE__		:			Any   ,):
								super().__init__(**SCREAMING_SNAKE_CASE__)

								__lowerCamelCase				:				str					       = hidden_size
								__lowerCamelCase				:				Any					       = num_hidden_layers
								__lowerCamelCase				:				Union[str, Any]					       = num_attention_heads
								__lowerCamelCase				:				Optional[Any]					       = intermediate_size
								__lowerCamelCase				:				List[str]					       = hidden_act
								__lowerCamelCase				:				Tuple					       = hidden_dropout_prob
								__lowerCamelCase				:				str					       = attention_probs_dropout_prob
								__lowerCamelCase				:				Optional[int]					       = initializer_range
								__lowerCamelCase				:				Optional[int]					       = layer_norm_eps
								__lowerCamelCase				:				List[str]					       = patch_size
								__lowerCamelCase				:				int					       = qkv_bias
								__lowerCamelCase				:				Optional[int]					       = frequency_stride
								__lowerCamelCase				:				str					       = time_stride
								__lowerCamelCase				:				Dict					       = max_length
								__lowerCamelCase				:				List[Any]					       = num_mel_bins










from timeit import timeit

lowercase__				:     Union[str, Any] 		=						{
    "MALAYALAM": True,
    "String": False,
    "rotor": True,
    "level": True,
    "A": True,
    "BB": True,
    "ABC": False,
    "amanaplanacanalpanama": True,  # "a man a plan a canal panama"
}
# Ensure our test data is valid
assert all((key == key[::-1]) is value for key, value in test_data.items())


def 						lowerCamelCase__    (		_A							):







	'''simple docstring'''





	snake_case_		    =     0
	snake_case_		    =     len(_A							) - 1
	while start_i < end_i:
		if s[start_i] == s[end_i]:
			start_i += 1
			end_i -= 1
		else:
			return False
	return True


def 						lowerCamelCase__    (		_A							):







	'''simple docstring'''





	snake_case_		    =     len(_A							) // 2
	snake_case_		    =     len(_A							)

	# We need to traverse till half of the length of string
	# as we can get access of the i'th last element from
	# i'th index.
	# eg: [0,1,2,3,4,5] => 4th index can be accessed
	# with the help of 1st index (i==n-i-1)
	# where n is length of string
	return all(s[i] == s[n - i - 1] for i in range(_A							)							)


def 						lowerCamelCase__    (		_A							):







	'''simple docstring'''





	if len(_A							) <= 2:
		return True
	if s[0] == s[len(_A							) - 1]:
		return is_palindrome_recursive(s[1:-1]							)
	else:
		return False


def 						lowerCamelCase__    (		_A							):







	'''simple docstring'''





	return s == s[::-1]


def 						lowerCamelCase__    (		_A							):







	'''simple docstring'''





	snake_case_		    =     f"all({name}(key) is value for key, value in test_data.items())"
	snake_case_		    =     f"from __main__ import test_data, {name}"
	snake_case_		    =     500000
	snake_case_		    =     timeit(stmt=_A     ,	setup=_A     ,	number=_A							)
	print(f"{name:<35} finished {number:,} runs in {result:.5f} seconds"							)


if __name__ == "__main__":
		for key, value in test_data.items():
				assert is_palindrome(key) is is_palindrome_recursive(key)
				assert is_palindrome(key) is is_palindrome_slice(key)
				print(f'''{key:21} {value}''')
		print("a man a plan a canal panama")

		# finished 500,000 runs in 0.46793 seconds
		benchmark_function("is_palindrome_slice")
		# finished 500,000 runs in 0.85234 seconds
		benchmark_function("is_palindrome")
		# finished 500,000 runs in 1.32028 seconds
		benchmark_function("is_palindrome_recursive")
		# finished 500,000 runs in 2.08679 seconds
		benchmark_function("is_palindrome_traversal")
