

import functools
import operator

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


_UpperCAmelCase		:       List[str]						    =	logging.get_logger(__name__)

_UpperCAmelCase		:       List[str]						    =	{
    """facebook/wav2vec2-base-960h""": """https://huggingface.co/facebook/wav2vec2-base-960h/resolve/main/config.json""",
    # See all Wav2Vec2 models at https://huggingface.co/models?filter=wav2vec2
}







class 			lowercase    (	lowercase_      ):
				__SCREAMING_SNAKE_CASE :			Union[str, Any]	      =      '''wav2vec2'''




				def __init__( self				,       snake_case=32				,       snake_case=768				,       snake_case=12				,       snake_case=12				,       snake_case=3072				,       snake_case="gelu"				,       snake_case=0.1				,       snake_case=0.1				,       snake_case=0.1				,       snake_case=0.0				,       snake_case=0.0				,       snake_case=0.1				,       snake_case=0.1				,       snake_case=0.02				,       snake_case=1e-5				,       snake_case="group"				,       snake_case="gelu"				,       snake_case=(512, 512, 512, 512, 512, 512, 512)				,       snake_case=(5, 2, 2, 2, 2, 2, 2)				,       snake_case=(10, 3, 3, 3, 3, 2, 2)				,       snake_case=False				,       snake_case=128				,       snake_case=16				,       snake_case=False				,       snake_case=True				,       snake_case=0.05				,       snake_case=10				,       snake_case=2				,       snake_case=0.0				,       snake_case=10				,       snake_case=0				,       snake_case=320				,       snake_case=2				,       snake_case=0.1				,       snake_case=100				,       snake_case=256				,       snake_case=256				,       snake_case=0.1				,       snake_case="sum"				,       snake_case=False				,       snake_case=False				,       snake_case=256				,       snake_case=(512, 512, 512, 512, 1500)				,       snake_case=(5, 3, 3, 1, 1)				,       snake_case=(1, 2, 3, 1, 1)				,       snake_case=512				,       snake_case=0				,       snake_case=1				,       snake_case=2				,       snake_case=False				,       snake_case=3				,       snake_case=2				,       snake_case=3				,       snake_case=None				,       snake_case=None				,       **snake_case				,       ):
											super().__init__(**snake_case				,       pad_token_id=snake_case				,       bos_token_id=snake_case				,       eos_token_id=snake_case	)
											snake_case_          =   hidden_size
											snake_case_          =   feat_extract_norm
											snake_case_          =   feat_extract_activation
											snake_case_          =   list(snake_case	)
											snake_case_          =   list(snake_case	)
											snake_case_          =   list(snake_case	)
											snake_case_          =   conv_bias
											snake_case_          =   num_conv_pos_embeddings
											snake_case_          =   num_conv_pos_embedding_groups
											snake_case_          =   len(self.conv_dim	)
											snake_case_          =   num_hidden_layers
											snake_case_          =   intermediate_size
											snake_case_          =   hidden_act
											snake_case_          =   num_attention_heads
											snake_case_          =   hidden_dropout
											snake_case_          =   attention_dropout
											snake_case_          =   activation_dropout
											snake_case_          =   feat_proj_dropout
											snake_case_          =   final_dropout
											snake_case_          =   layerdrop
											snake_case_          =   layer_norm_eps
											snake_case_          =   initializer_range
											snake_case_          =   vocab_size
											snake_case_          =   do_stable_layer_norm
											snake_case_          =   use_weighted_layer_sum

											if (
											    (len(self.conv_stride	) != self.num_feat_extract_layers)
											    or (len(self.conv_kernel	) != self.num_feat_extract_layers)
											    or (len(self.conv_dim	) != self.num_feat_extract_layers)
											):
																		raise ValueError(
																		    'Configuration for convolutional layers is incorrect. It is required that `len(config.conv_dim)` =='
																		    ' `len(config.conv_stride)` == `len(config.conv_kernel)`, but is `len(config.conv_dim) ='
																		    F''' {len(self.conv_dim	)}`, `len(config.conv_stride) = {len(self.conv_stride	)}`,'''
																		    F''' `len(config.conv_kernel) = {len(self.conv_kernel	)}`.'''	)

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

											# parameters for pretraining with codevector quantized representations
											snake_case_          =   num_codevectors_per_group
											snake_case_          =   num_codevector_groups
											snake_case_          =   contrastive_logits_temperature
											snake_case_          =   feat_quantizer_dropout
											snake_case_          =   num_negatives
											snake_case_          =   codevector_dim
											snake_case_          =   proj_codevector_dim
											snake_case_          =   diversity_loss_weight

											# ctc loss
											snake_case_          =   ctc_loss_reduction
											snake_case_          =   ctc_zero_infinity

											# adapter
											snake_case_          =   add_adapter
											snake_case_          =   adapter_kernel_size
											snake_case_          =   adapter_stride
											snake_case_          =   num_adapter_layers
											snake_case_          =   output_hidden_size or hidden_size
											snake_case_          =   adapter_attn_dim

											# SequenceClassification-specific parameter. Feel free to ignore for other classes.
											snake_case_          =   classifier_proj_size

											# XVector-specific parameters. Feel free to ignore for other classes.
											snake_case_          =   list(snake_case	)
											snake_case_          =   list(snake_case	)
											snake_case_          =   list(snake_case	)
											snake_case_          =   xvector_output_dim




				@property
				def    a							( self	):
											return functools.reduce(operator.mul				,       self.conv_stride				,       1	)







from __future__ import annotations





def  __lowerCamelCase     (			UpperCamelCase__       ,							UpperCamelCase__				):







							'''simple docstring'''






							snake_case_          =   []
							create_all_state(1       ,							UpperCamelCase__       ,							UpperCamelCase__       ,							[]       ,							UpperCamelCase__				)
							return result





def  __lowerCamelCase     (			UpperCamelCase__       ,							UpperCamelCase__       ,							UpperCamelCase__       ,							UpperCamelCase__       ,							UpperCamelCase__       ,							):







							'''simple docstring'''






							if level == 0:
														total_list.append(current_list[:]				)
														return

							for i in range(UpperCamelCase__       ,							total_number - level + 2				):
														current_list.append(UpperCamelCase__				)
														create_all_state(i + 1       ,							UpperCamelCase__       ,							level - 1       ,							UpperCamelCase__       ,							UpperCamelCase__				)
														current_list.pop()





def  __lowerCamelCase     (			UpperCamelCase__				):







							'''simple docstring'''






							for i in total_list:
														print(*UpperCamelCase__				)


if __name__ == "__main__":
					_UpperCAmelCase		:       str						    =	4
					_UpperCAmelCase		:       Tuple						    =	2
					_UpperCAmelCase		:       Optional[int]						    =	generate_all_combinations(n, k)
					print_all_state(total_list)




