






"""simple docstring"""







import argparse
import json
import os

import fairseq
import torch
from fairseq.data import Dictionary

from transformers import (
    HubertConfig,
    HubertForCTC,
    HubertModel,
    WavaVecaCTCTokenizer,
    WavaVecaFeatureExtractor,
    WavaVecaProcessor,
    logging,
)


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

a			:    Optional[int]				 =		{
    """post_extract_proj""": """feature_projection.projection""",
    """encoder.pos_conv.0""": """encoder.pos_conv_embed.conv""",
    """self_attn.k_proj""": """encoder.layers.*.attention.k_proj""",
    """self_attn.v_proj""": """encoder.layers.*.attention.v_proj""",
    """self_attn.q_proj""": """encoder.layers.*.attention.q_proj""",
    """self_attn.out_proj""": """encoder.layers.*.attention.out_proj""",
    """self_attn_layer_norm""": """encoder.layers.*.layer_norm""",
    """fc1""": """encoder.layers.*.feed_forward.intermediate_dense""",
    """fc2""": """encoder.layers.*.feed_forward.output_dense""",
    """final_layer_norm""": """encoder.layers.*.final_layer_norm""",
    """encoder.layer_norm""": """encoder.layer_norm""",
    """w2v_model.layer_norm""": """feature_projection.layer_norm""",
    """w2v_encoder.proj""": """lm_head""",
    """mask_emb""": """masked_spec_embed""",
}





def 						lowercase__(A ,		A ,		A ,		A ,		A						)    ->Tuple:




						"""simple docstring"""



						for attribute in key.split("."						):
												lowercase__    :				int=	getattr(A ,		A						)

						if weight_type is not None:
												lowercase__    :				Union[str, Any]=	getattr(A ,		A						).shape
						else:
												lowercase__    :				str=	hf_pointer.shape

						assert hf_shape == value.shape, (
						    f'''Shape of hf {key + '.' + weight_type if weight_type is not None else ''} is {hf_shape}, but should be'''
						    f''' {value.shape} for {full_name}'''
						)

						if weight_type == "weight":
												lowercase__    :				Union[str, Any]=	value
						elif weight_type == "weight_g":
												lowercase__    :				str=	value
						elif weight_type == "weight_v":
												lowercase__    :				List[Any]=	value
						elif weight_type == "bias":
												lowercase__    :				List[str]=	value
						else:
												lowercase__    :				Optional[Any]=	value

						logger.info(f'''{key + '.' + weight_type if weight_type is not None else ''} was initialized from {full_name}.'''						)





def 						lowercase__(A ,		A ,		A						)    ->int:




						"""simple docstring"""



						lowercase__    :				int=	[]
						lowercase__    :				Optional[Any]=	fairseq_model.state_dict()

						lowercase__    :				str=	hf_model.hubert.feature_extractor if is_finetuned else hf_model.feature_extractor

						for name, value in fairseq_dict.items():
												lowercase__    :				int=	False
												if "conv_layers" in name:
																		load_conv_layer(
																		    A ,		A ,		A ,		A ,		hf_model.config.feat_extract_norm == "group" ,		)
																		lowercase__    :				Any=	True
												else:
																		for key, mapped_key in MAPPING.items():
																								lowercase__    :				int=	"hubert." + mapped_key if (is_finetuned and mapped_key != "lm_head") else mapped_key

																								if key in name or (key.split("w2v_model."						)[-1] == name.split("."						)[0] and not is_finetuned):
																														lowercase__    :				str=	True
																														if "*" in mapped_key:
																																				lowercase__    :				Optional[Any]=	name.split(A						)[0].split("."						)[-2]
																																				lowercase__    :				Optional[int]=	mapped_key.replace("*" ,		A						)
																														if "weight_g" in name:
																																				lowercase__    :				Optional[int]=	"weight_g"
																														elif "weight_v" in name:
																																				lowercase__    :				Optional[int]=	"weight_v"
																														elif "weight" in name:
																																				lowercase__    :				List[Any]=	"weight"
																														elif "bias" in name:
																																				lowercase__    :				Optional[int]=	"bias"
																														else:
																																				lowercase__    :				str=	None
																														set_recursively(A ,		A ,		A ,		A ,		A						)
																								continue
												if not is_used:
																		unused_weights.append(A						)

						logger.warning(f'''Unused weights: {unused_weights}'''						)





def 						lowercase__(A ,		A ,		A ,		A ,		A						)    ->Optional[Any]:




						"""simple docstring"""



						lowercase__    :				Any=	full_name.split("conv_layers."						)[-1]
						lowercase__    :				str=	name.split("."						)
						lowercase__    :				List[Any]=	int(items[0]						)
						lowercase__    :				List[str]=	int(items[1]						)

						if type_id == 0:
												if "bias" in name:
																		assert value.shape == feature_extractor.conv_layers[layer_id].conv.bias.data.shape, (
																		    f'''{full_name} has size {value.shape}, but'''
																		    f''' {feature_extractor.conv_layers[layer_id].conv.bias.data.shape} was found.'''
																		)
																		lowercase__    :				List[str]=	value
																		logger.info(f'''Feat extract conv layer {layer_id} was initialized from {full_name}.'''						)
												elif "weight" in name:
																		assert value.shape == feature_extractor.conv_layers[layer_id].conv.weight.data.shape, (
																		    f'''{full_name} has size {value.shape}, but'''
																		    f''' {feature_extractor.conv_layers[layer_id].conv.weight.data.shape} was found.'''
																		)
																		lowercase__    :				Union[str, Any]=	value
																		logger.info(f'''Feat extract conv layer {layer_id} was initialized from {full_name}.'''						)
						elif (type_id == 2 and not use_group_norm) or (type_id == 2 and layer_id == 0 and use_group_norm):
												if "bias" in name:
																		assert value.shape == feature_extractor.conv_layers[layer_id].layer_norm.bias.data.shape, (
																		    f'''{full_name} has size {value.shape}, but {feature_extractor[layer_id].layer_norm.bias.data.shape} was'''
																		    " found."
																		)
																		lowercase__    :				Dict=	value
																		logger.info(f'''Feat extract layer norm weight of layer {layer_id} was initialized from {full_name}.'''						)
												elif "weight" in name:
																		assert value.shape == feature_extractor.conv_layers[layer_id].layer_norm.weight.data.shape, (
																		    f'''{full_name} has size {value.shape}, but'''
																		    f''' {feature_extractor[layer_id].layer_norm.weight.data.shape} was found.'''
																		)
																		lowercase__    :				List[str]=	value
																		logger.info(f'''Feat extract layer norm weight of layer {layer_id} was initialized from {full_name}.'''						)
						else:
												unused_weights.append(A						)





@torch.no_grad()
def 						lowercase__(A ,		A ,		A=None ,		A=None ,		A=True						)    ->str:




						"""simple docstring"""



						if config_path is not None:
												lowercase__    :				Optional[int]=	HubertConfig.from_pretrained(A						)
						else:
												lowercase__    :				Tuple=	HubertConfig()

						if is_finetuned:
												if dict_path:
																		lowercase__    :				List[Any]=	Dictionary.load(A						)

																		# important change bos & pad token id since CTC symbol is <pad> and
																		# not <s> as in fairseq
																		lowercase__    :				Tuple=	target_dict.pad_index
																		lowercase__    :				int=	target_dict.bos_index
																		lowercase__    :				Optional[Any]=	target_dict.eos_index
																		lowercase__    :				str=	len(target_dict.symbols						)
																		lowercase__    :				Tuple=	os.path.join(A ,		"vocab.json"						)
																		if not os.path.isdir(A						):
																								logger.error("--pytorch_dump_folder_path ({}) should be a directory".format(A						)						)
																								return
																		os.makedirs(A ,		exist_ok=A						)
																		with open(A ,		"w" ,		encoding="utf-8"						) as vocab_handle:
																								json.dump(target_dict.indices ,		A						)
																		lowercase__    :				List[str]=	WavaVecaCTCTokenizer(
																		    A ,		unk_token=target_dict.unk_word ,		pad_token=target_dict.pad_word ,		bos_token=target_dict.bos_word ,		eos_token=target_dict.eos_word ,		word_delimiter_token="|" ,		do_lower_case=A ,		)
																		lowercase__    :				str=	True if config.feat_extract_norm == "layer" else False
																		lowercase__    :				Any=	WavaVecaFeatureExtractor(
																		    feature_size=1 ,		sampling_rate=16_000 ,		padding_value=0 ,		do_normalize=A ,		return_attention_mask=A ,		)
																		lowercase__    :				int=	WavaVecaProcessor(feature_extractor=A ,		tokenizer=A						)
																		processor.save_pretrained(A						)

												lowercase__    :				Optional[int]=	HubertForCTC(A						)
						else:
												lowercase__    :				Tuple=	HubertModel(A						)

						if is_finetuned:
												lowercase__,     lowercase__,     lowercase__    :				Dict=	fairseq.checkpoint_utils.load_model_ensemble_and_task(
												    [checkpoint_path] ,		arg_overrides={"data": "/".join(dict_path.split("/"						)[:-1]						)}						)
						else:
												lowercase__,     lowercase__,     lowercase__    :				Optional[Any]=	fairseq.checkpoint_utils.load_model_ensemble_and_task([checkpoint_path]						)

						lowercase__    :				Tuple=	model[0].eval()

						recursively_load_weights(A ,		A ,		A						)

						hf_wavavec.save_pretrained(A						)


if __name__ == "__main__":
			a			:    Any				 =		argparse.ArgumentParser()
			parser.add_argument("""--pytorch_dump_folder_path""", default=None, type=str, help="""Path to the output PyTorch model.""")
			parser.add_argument("""--checkpoint_path""", default=None, type=str, help="""Path to fairseq checkpoint""")
			parser.add_argument("""--dict_path""", default=None, type=str, help="""Path to dict of fine-tuned model""")
			parser.add_argument("""--config_path""", default=None, type=str, help="""Path to hf config.json of model to convert""")
			parser.add_argument(
			    """--not_finetuned""", action="""store_true""", help="""Whether the model to convert is a fine-tuned model or not"""
			)
			a			:    str				 =		parser.parse_args()
			convert_hubert_checkpoint(
			    args.checkpoint_path, args.pytorch_dump_folder_path, args.config_path, args.dict_path, not args.not_finetuned
			)














"""simple docstring"""







import inspect

import jax
import jax.lax as lax
import jax.numpy as jnp

from ..utils import add_start_docstrings
from ..utils.logging import get_logger


a			:    Any				 =		get_logger(__name__)


a			:    Any				 =		r"""
    Args:
        input_ids (`jnp.ndarray` of shape `(batch_size, sequence_length)`):
            Indices of input sequence tokens in the vocabulary.

            Indices can be obtained using [`PreTrainedTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        scores (`jnp.ndarray` of shape `(batch_size, config.vocab_size)`):
            Prediction scores of a language modeling head. These can be logits for each vocabulary when not using beam
            search or log softmax for each vocabulary token when using beam search
        kwargs (`Dict[str, Any]`, *optional*):
            Additional logits processor specific kwargs.

    Return:
        `jnp.ndarray` of shape `(batch_size, config.vocab_size)`: The processed prediction scores.

"""


class    __UpperCAmelCase:




						"""simple docstring"""




						@add_start_docstrings(snake_case__      )
						def __call__(       self	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												raise NotImplementedError(
												    F'''{self.__class__} is an abstract class. Only classes inheriting this class can be called.'''      )


class    __UpperCAmelCase:




						"""simple docstring"""




						@add_start_docstrings(snake_case__      )
						def __call__(       self	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												raise NotImplementedError(
												    F'''{self.__class__} is an abstract class. Only classes inheriting this class can be called.'''      )


class    __UpperCAmelCase(       SCREAMING_SNAKE_CASE__							):




						"""simple docstring"""




						@add_start_docstrings(snake_case__      )
						def __call__(       self	,  snake_case__	,  snake_case__	,  snake_case__	,  **snake_case__      ):
												'''simple docstring'''
												for processor in self:
																		lowercase__    :				Optional[Any]=	inspect.signature(processor.__call__      ).parameters
																		if len(snake_case__      ) > 3:
																								if not all(arg in kwargs for arg in list(function_args.keys()      )[2:]      ):
																														raise ValueError(
																														    F'''Make sure that all the required parameters: {list(function_args.keys()      )} for '''
																														    F'''{processor.__class__} are passed to the logits processor.'''      )
																								lowercase__    :				Union[str, Any]=	processor(snake_case__	,  snake_case__	,  snake_case__	,  **snake_case__      )
																		else:
																								lowercase__    :				Dict=	processor(snake_case__	,  snake_case__	,  snake_case__      )
												return scores


class    __UpperCAmelCase(       SCREAMING_SNAKE_CASE__							):




						"""simple docstring"""




						def __init__(       self	,  snake_case__      ):
												'''simple docstring'''
												if not isinstance(snake_case__	,  snake_case__      ) or not (temperature > 0):
																		raise ValueError(F'''`temperature` has to be a strictly positive float, but is {temperature}'''      )

												lowercase__    :				Any=	temperature




						def __call__(       self	,  snake_case__	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												lowercase__    :				int=	scores / self.temperature
												return scores


class    __UpperCAmelCase(       SCREAMING_SNAKE_CASE__							):




						"""simple docstring"""




						def __init__(       self	,  snake_case__	,  snake_case__ = -float("Inf"      )	,  snake_case__ = 1      ):
												'''simple docstring'''
												if not isinstance(snake_case__	,  snake_case__      ) or (top_p < 0 or top_p > 1.0):
																		raise ValueError(F'''`top_p` has to be a float > 0 and < 1, but is {top_p}'''      )
												if not isinstance(snake_case__	,  snake_case__      ) or (min_tokens_to_keep < 1):
																		raise ValueError(F'''`min_tokens_to_keep` has to be a positive integer, but is {min_tokens_to_keep}'''      )

												lowercase__    :				int=	top_p
												lowercase__    :				Optional[int]=	filter_value
												lowercase__    :				Tuple=	min_tokens_to_keep




						def __call__(       self	,  snake_case__	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												lowercase__,     lowercase__    :				Dict=	lax.top_k(snake_case__	,  scores.shape[-1]      )

												lowercase__    :				Optional[int]=	jnp.full_like(snake_case__	,  self.filter_value      )
												lowercase__    :				Union[str, Any]=	jax.nn.softmax(snake_case__	,  axis=-1      ).cumsum(axis=-1      )
												lowercase__    :				str=	cumulative_probs < self.top_p

												# include the token that is higher than top_p as well
												lowercase__    :				str=	jnp.roll(snake_case__	,  1      )
												score_mask |= score_mask.at[:, 0].set(snake_case__      )

												# min tokens to keep
												lowercase__    :				Optional[int]=	score_mask.at[:, : self.min_tokens_to_keep].set(snake_case__      )

												lowercase__    :				str=	jnp.where(snake_case__	,  snake_case__	,  snake_case__      )
												lowercase__    :				str=	jax.lax.sort_key_val(snake_case__	,  snake_case__      )[-1]

												return next_scores


class    __UpperCAmelCase(       SCREAMING_SNAKE_CASE__							):




						"""simple docstring"""




						def __init__(       self	,  snake_case__	,  snake_case__ = -float("Inf"      )	,  snake_case__ = 1      ):
												'''simple docstring'''
												if not isinstance(snake_case__	,  snake_case__      ) or top_k <= 0:
																		raise ValueError(F'''`top_k` has to be a strictly positive integer, but is {top_k}'''      )

												lowercase__    :				List[Any]=	max(snake_case__	,  snake_case__      )
												lowercase__    :				Dict=	filter_value




						def __call__(       self	,  snake_case__	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												lowercase__,     lowercase__    :				Optional[Any]=	scores.shape
												lowercase__    :				int=	jnp.full(batch_size * vocab_size	,  self.filter_value      )

												lowercase__    :				Dict=	min(self.top_k	,  scores.shape[-1]      )  # Safety check
												lowercase__,     lowercase__    :				List[Any]=	lax.top_k(snake_case__	,  snake_case__      )
												lowercase__    :				Optional[int]=	jnp.broadcast_to((jnp.arange(snake_case__      ) * vocab_size)[:, None]	,  (batch_size, topk)      ).flatten()
												lowercase__    :				str=	topk_scores.flatten()
												lowercase__    :				Any=	topk_indices.flatten() + shift

												lowercase__    :				Optional[Any]=	next_scores_flat.at[topk_indices_flat].set(snake_case__      )
												lowercase__    :				str=	next_scores_flat.reshape(snake_case__	,  snake_case__      )
												return next_scores


class    __UpperCAmelCase(       SCREAMING_SNAKE_CASE__							):




						"""simple docstring"""




						def __init__(       self	,  snake_case__      ):
												'''simple docstring'''
												lowercase__    :				Any=	bos_token_id




						def __call__(       self	,  snake_case__	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												lowercase__    :				Any=	jnp.full(scores.shape	,  -float("inf"      )      )

												lowercase__    :				int=	1 - jnp.bool_(cur_len - 1      )

												lowercase__    :				int=	jnp.where(snake_case__	,  new_scores.at[:, self.bos_token_id].set(0      )	,  snake_case__      )

												return scores


class    __UpperCAmelCase(       SCREAMING_SNAKE_CASE__							):




						"""simple docstring"""




						def __init__(       self	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												lowercase__    :				Tuple=	max_length
												lowercase__    :				str=	eos_token_id




						def __call__(       self	,  snake_case__	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												lowercase__    :				List[Any]=	jnp.full(scores.shape	,  -float("inf"      )      )

												lowercase__    :				Any=	1 - jnp.bool_(cur_len - self.max_length + 1      )

												lowercase__    :				Optional[int]=	jnp.where(snake_case__	,  new_scores.at[:, self.eos_token_id].set(0      )	,  snake_case__      )

												return scores


class    __UpperCAmelCase(       SCREAMING_SNAKE_CASE__							):




						"""simple docstring"""




						def __init__(       self	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												if not isinstance(snake_case__	,  snake_case__      ) or min_length < 0:
																		raise ValueError(F'''`min_length` has to be a positive integer, but is {min_length}'''      )

												if not isinstance(snake_case__	,  snake_case__      ) or eos_token_id < 0:
																		raise ValueError(F'''`eos_token_id` has to be a positive integer, but is {eos_token_id}'''      )

												lowercase__    :				List[str]=	min_length
												lowercase__    :				Dict=	eos_token_id




						def __call__(       self	,  snake_case__	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												# create boolean flag to decide if min length penalty should be applied
												lowercase__    :				Tuple=	1 - jnp.clip(cur_len - self.min_length	,  0	,  1      )

												lowercase__    :				Dict=	jnp.where(snake_case__	,  scores.at[:, self.eos_token_id].set(-float("inf"      )      )	,  snake_case__      )

												return scores


class    __UpperCAmelCase(       SCREAMING_SNAKE_CASE__							):




						"""simple docstring"""




						def __init__(       self	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												lowercase__    :				Optional[Any]=	list(snake_case__      )
												lowercase__    :				List[Any]=	begin_index




						def __call__(       self	,  snake_case__	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												lowercase__    :				str=	1 - jnp.bool_(cur_len - self.begin_index      )

												lowercase__    :				str=	jnp.where(snake_case__	,  scores.at[:, self.begin_suppress_tokens].set(-float("inf"      )      )	,  snake_case__      )

												return scores


class    __UpperCAmelCase(       SCREAMING_SNAKE_CASE__							):




						"""simple docstring"""




						def __init__(       self	,  snake_case__      ):
												'''simple docstring'''
												lowercase__    :				List[Any]=	list(snake_case__      )




						def __call__(       self	,  snake_case__	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												lowercase__    :				Any=	scores.at[..., self.suppress_tokens].set(-float("inf"      )      )

												return scores


class    __UpperCAmelCase(       SCREAMING_SNAKE_CASE__							):




						"""simple docstring"""




						def __init__(       self	,  snake_case__      ):
												'''simple docstring'''
												lowercase__    :				int=	dict(snake_case__      )
												# Converts the dictionary of format {index: token} containing the tokens to be forced to an array, where the
												# index of the array corresponds to the index of the token to be forced, for XLA compatibility.
												# Indexes without forced tokens will have a negative value.
												lowercase__    :				List[Any]=	jnp.ones((max(force_token_map.keys()      ) + 1)	,  dtype=jnp.intaa      ) * -1
												for index, token in force_token_map.items():
																		if token is not None:
																								lowercase__    :				List[Any]=	force_token_array.at[index].set(snake_case__      )
												lowercase__    :				int=	jnp.intaa(snake_case__      )




						def __call__(       self	,  snake_case__	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												def _force_token(snake_case__      ):
																		lowercase__    :				Dict=	scores.shape[0]
																		lowercase__    :				Any=	self.force_token_array[generation_idx]

																		lowercase__    :				List[Any]=	jnp.ones_like(snake_case__	,  dtype=scores.dtype      ) * -float("inf"      )
																		lowercase__    :				List[Any]=	jnp.zeros((batch_size, 1)	,  dtype=scores.dtype      )
																		lowercase__    :				List[str]=	lax.dynamic_update_slice(snake_case__	,  snake_case__	,  (0, current_token)      )
																		return new_scores

												lowercase__    :				Dict=	lax.cond(
												    cur_len >= self.force_token_array.shape[0]	,  lambda: scores	,  lambda: lax.cond(
												        self.force_token_array[cur_len] >= 0	,  lambda: _force_token(snake_case__      )	,  lambda: scores	,  )	,  )
												return scores


class    __UpperCAmelCase(       SCREAMING_SNAKE_CASE__							):




						"""simple docstring"""




						def __init__(       self	,  snake_case__	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												lowercase__    :				str=	generate_config.eos_token_id
												lowercase__    :				Optional[int]=	generate_config.no_timestamps_token_id
												lowercase__    :				Dict=	generate_config.no_timestamps_token_id + 1

												lowercase__    :				List[Any]=	decoder_input_length + 1

												if generate_config.is_multilingual:
																		# room for language token and task token
																		self.begin_index += 2
												if hasattr(snake_case__	,  "max_initial_timestamp_index"      ):
																		lowercase__    :				int=	generate_config.max_initial_timestamp_index
												else:
																		lowercase__    :				Dict=	model_config.vocab_size
												if self.max_initial_timestamp_index is None:
																		lowercase__    :				str=	model_config.vocab_size




						def __call__(       self	,  snake_case__	,  snake_case__	,  snake_case__      ):
												'''simple docstring'''
												# suppress <|notimestamps|> which is handled by without_timestamps
												lowercase__    :				int=	scores.at[:, self.no_timestamps_token_id].set(-float("inf"      )      )

												def handle_pairs(snake_case__	,  snake_case__      ):
																		lowercase__    :				Union[str, Any]=	jnp.where((cur_len - self.begin_index) >= 1	,  snake_case__	,  snake_case__      )
																		lowercase__    :				Tuple=	jnp.where(
																		    input_ids_k[cur_len - 1] >= self.timestamp_begin	,  True and last_was_timestamp	,  snake_case__	,  )

																		lowercase__    :				int=	jnp.where((cur_len - self.begin_index) < 2	,  snake_case__	,  snake_case__      )
																		lowercase__    :				Optional[int]=	jnp.where(
																		    input_ids_k[cur_len - 2] >= self.timestamp_begin	,  snake_case__	,  snake_case__	,  )

																		return jnp.where(
																		    snake_case__	,  jnp.where(
																		        penultimate_was_timestamp > 0	,  scores_k.at[self.timestamp_begin :].set(-float("inf"      )      )	,  scores_k.at[: self.eos_token_id].set(-float("inf"      )      )	,  )	,  snake_case__	,  )

												lowercase__    :				List[str]=	jax.vmap(snake_case__      )(snake_case__	,  snake_case__      )

												lowercase__    :				str=	jnp.where(cur_len == self.begin_index	,  snake_case__	,  snake_case__      )
												lowercase__    :				List[Any]=	jnp.where(
												    self.max_initial_timestamp_index is not None	,  True and apply_max_initial_timestamp	,  snake_case__	,  )

												lowercase__    :				Any=	self.timestamp_begin + self.max_initial_timestamp_index

												lowercase__    :				str=	jnp.where(
												    snake_case__	,  scores.at[:, last_allowed + 1 :].set(-float("inf"      )      )	,  snake_case__	,  )

												# if sum of probability over timestamps is above any other token, sample timestamp
												lowercase__    :				str=	jax.nn.log_softmax(snake_case__	,  axis=-1      )

												def handle_cumulative_probs(snake_case__	,  snake_case__      ):
																		lowercase__    :				Dict=	jax.nn.logsumexp(logprobs_k[self.timestamp_begin :]	,  axis=-1      )
																		lowercase__    :				Union[str, Any]=	jnp.max(logprobs_k[: self.timestamp_begin]      )
																		return jnp.where(
																		    timestamp_logprob > max_text_token_logprob	,  scores_k.at[: self.timestamp_begin].set(-float("inf"      )      )	,  snake_case__	,  )

												lowercase__    :				Optional[int]=	jax.vmap(snake_case__      )(snake_case__	,  snake_case__      )

												return scores






