



"""simple docstring"""
from ....configuration_utils import PretrainedConfig
from ....utils import logging


__a      =				logging.get_logger(__name__)

__a      =				{
    "speechbrain/m-ctc-t-large": "https://huggingface.co/speechbrain/m-ctc-t-large/resolve/main/config.json",
    # See all M-CTC-T models at https://huggingface.co/models?filter=mctct
}
class 				lowerCamelCase  (			_lowerCAmelCase				):






					'''simple docstring'''





					_A		:			Optional[Any]						=     """mctct"""






					def __init__(       self:							Optional[Any]						,     snake_case:							List[str]=8_065						,     snake_case:							Optional[Any]=1_536						,     snake_case:							str=36						,     snake_case:							Optional[int]=6_144						,     snake_case:							Any=4						,     snake_case:							Any=384						,     snake_case:							Optional[Any]=920						,     snake_case:							Dict=1E-5						,     snake_case:							Any=0.3						,     snake_case:							Optional[Any]="relu"						,     snake_case:							Tuple=0.0_2						,     snake_case:							int=0.3						,     snake_case:							Dict=0.3						,     snake_case:							Optional[int]=1						,     snake_case:							Dict=0						,     snake_case:							Optional[Any]=2						,     snake_case:							str=1						,     snake_case:							Union[str, Any]=0.3						,     snake_case:							List[str]=1						,     snake_case:							Tuple=(7,)						,     snake_case:							Optional[Any]=(3,)						,     snake_case:							int=80						,     snake_case:							List[str]=1						,     snake_case:							Any=None						,     snake_case:							Union[str, Any]="sum"						,     snake_case:							Any=False						,     **snake_case:							List[Any]						,     )   ->	Dict:
											super().__init__(**snake_case						,     pad_token_id=snake_case						,     bos_token_id=snake_case						,     eos_token_id=snake_case						)
											snake_case_ :int						=			vocab_size
											snake_case_ :List[Any]						=			hidden_size
											snake_case_ :str						=			num_hidden_layers
											snake_case_ :Tuple						=			intermediate_size
											snake_case_ :Optional[Any]						=			num_attention_heads
											snake_case_ :Dict						=			attention_head_dim
											snake_case_ :Optional[int]						=			max_position_embeddings
											snake_case_ :str						=			layer_norm_eps
											snake_case_ :Tuple						=			layerdrop
											snake_case_ :Any						=			hidden_act
											snake_case_ :Optional[int]						=			initializer_range
											snake_case_ :List[str]						=			hidden_dropout_prob
											snake_case_ :int						=			attention_probs_dropout_prob
											snake_case_ :int						=			pad_token_id
											snake_case_ :Optional[int]						=			bos_token_id
											snake_case_ :int						=			eos_token_id
											snake_case_ :Tuple						=			conv_glu_dim
											snake_case_ :List[str]						=			conv_dropout
											snake_case_ :List[str]						=			num_conv_layers
											snake_case_ :int						=			input_feat_per_channel
											snake_case_ :List[str]						=			input_channels
											snake_case_ :Tuple						=			conv_channels
											snake_case_ :Dict						=			ctc_loss_reduction
											snake_case_ :Any						=			ctc_zero_infinity

											# prevents config testing fail with exporting to json
											snake_case_ :Any						=			list(snake_case						)
											snake_case_ :str						=			list(snake_case						)

											if len(self.conv_kernel						) != self.num_conv_layers:
																	raise ValueError(
																	    """Configuration for convolutional module is incorrect. """
																	    """It is required that `len(config.conv_kernel)` == `config.num_conv_layers` """
																	    f"""but is `len(config.conv_kernel) = {len(self.conv_kernel						)}`, """
																	    f"""`config.num_conv_layers = {self.num_conv_layers}`."""						)








from typing import Tuple, Union

from ...modeling_outputs import BackboneOutput
from ...modeling_utils import PreTrainedModel
from ...utils import is_timm_available, is_torch_available, requires_backends
from ...utils.backbone_utils import BackboneMixin
from .configuration_timm_backbone import TimmBackboneConfig


if is_timm_available():
							import timm


if is_torch_available():
							from torch import Tensor
class       _UpperCAmelCase					(       A__		,A__	):

				"""simple docstring"""




				lowercase__											=       """pixel_values"""
				lowercase__											=       False
				lowercase__											=       TimmBackboneConfig




				def __init__(     self						:    Tuple,  lowerCamelCase						:    List[str],  **lowerCamelCase						:    List[str]  ):

								'''simple docstring'''
								requires_backends(self,  '''timm'''  )
								super().__init__(lowerCamelCase  )
								lowercase__    =			config

								if config.backbone is None:
												raise ValueError('''backbone is not set in the config. Please set it to a timm model name.'''  )

								if config.backbone not in timm.list_models():
												raise ValueError(F"""backbone {config.backbone} is not supported by timm."""  )

								if hasattr(lowerCamelCase,  '''out_features'''  ) and config.out_features is not None:
												raise ValueError('''out_features is not supported by TimmBackbone. Please use out_indices instead.'''  )

								lowercase__    =			getattr(lowerCamelCase,  '''use_pretrained_backbone''',  lowerCamelCase  )
								if pretrained is None:
												raise ValueError('''use_pretrained_backbone is not set in the config. Please set it to True or False.'''  )

								# We just take the final layer by default. This matches the default for the transformers models.
								lowercase__    =			config.out_indices if getattr(lowerCamelCase,  '''out_indices''',  lowerCamelCase  ) is not None else (-1,)

								lowercase__    =			timm.create_model(
								    config.backbone,  pretrained=lowerCamelCase,  features_only=config.features_only,  in_chans=config.num_channels,  out_indices=lowerCamelCase,  **lowerCamelCase,  )
								# These are used to control the output of the model when called. If output_hidden_states is True, then
								# return_layers is modified to include all layers.
								lowercase__    =			self._backbone.return_layers
								lowercase__    =			{layer['''module''']: str(lowerCamelCase  ) for i, layer in enumerate(self._backbone.feature_info.info  )}
								super()._init_backbone(lowerCamelCase  )




				@classmethod
				def 				lowercase__   (     cls						:    List[str],  lowerCamelCase						:    List[str],  *lowerCamelCase						:    Optional[int],  **lowerCamelCase						:    List[Any]  ):

								'''simple docstring'''
								requires_backends(cls,  ['''vision''', '''timm''']  )
								from ...models.timm_backbone import TimmBackboneConfig

								lowercase__    =			kwargs.pop('''config''',  TimmBackboneConfig()  )

								lowercase__    =			kwargs.pop('''use_timm_backbone''',  lowerCamelCase  )
								if not use_timm:
												raise ValueError('''use_timm_backbone must be True for timm backbones'''  )

								lowercase__    =			kwargs.pop('''num_channels''',  config.num_channels  )
								lowercase__    =			kwargs.pop('''features_only''',  config.features_only  )
								lowercase__    =			kwargs.pop('''use_pretrained_backbone''',  config.use_pretrained_backbone  )
								lowercase__    =			kwargs.pop('''out_indices''',  config.out_indices  )
								lowercase__    =			TimmBackboneConfig(
								    backbone=lowerCamelCase,  num_channels=lowerCamelCase,  features_only=lowerCamelCase,  use_pretrained_backbone=lowerCamelCase,  out_indices=lowerCamelCase,  )
								return super()._from_config(lowerCamelCase,  **lowerCamelCase  )




				def 				lowercase__   (     self						:    List[Any],  lowerCamelCase						:    Optional[Any]  ):

								'''simple docstring'''
								pass




				def 				lowercase__   (     self						:    int,  lowerCamelCase						:    int,  lowerCamelCase						:    Optional[int]=None,  lowerCamelCase						:    List[Any]=None,  lowerCamelCase						:    int=None,  **lowerCamelCase						:    Optional[int]  ):

								'''simple docstring'''
								lowercase__    =			return_dict if return_dict is not None else self.config.use_return_dict
								lowercase__    =			(
								    output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states
								)
								lowercase__    =			output_attentions if output_attentions is not None else self.config.output_attentions

								if output_attentions:
												raise ValueError('''Cannot output attentions for timm backbones at the moment'''  )

								if output_hidden_states:
												# We modify the return layers to include all the stages of the backbone
												lowercase__    =			self._all_layers
												lowercase__    =			self._backbone(lowerCamelCase,  **lowerCamelCase  )
												lowercase__    =			self._return_layers
												lowercase__    =			tuple(hidden_states[i] for i in self.out_indices  )
								else:
												lowercase__    =			self._backbone(lowerCamelCase,  **lowerCamelCase  )
												lowercase__    =			None

								lowercase__    =			tuple(lowerCamelCase  )
								lowercase__    =			tuple(lowerCamelCase  ) if hidden_states is not None else None

								if not return_dict:
												lowercase__    =			(feature_maps,)
												if output_hidden_states:
																lowercase__    =			output + (hidden_states,)
												return output

								return BackboneOutput(feature_maps=lowerCamelCase,  hidden_states=lowerCamelCase,  attentions=lowerCamelCase  )




