



import unittest
from pathlib import Path
from shutil import copyfile

from transformers import SPIECE_UNDERLINE, is_sentencepiece_available
from transformers.models.speech_to_text import SpeechaTextTokenizer
from transformers.models.speech_to_text.tokenization_speech_to_text import VOCAB_FILES_NAMES, save_json
from transformers.testing_utils import get_tests_dir, require_sentencepiece, require_tokenizers, slow

from ...test_tokenization_common import TokenizerTesterMixin


__UpperCAmelCase	       =	get_tests_dir('''fixtures/test_sentencepiece.model''')

if is_sentencepiece_available():
				import sentencepiece as sp


__UpperCAmelCase	       =	5
__UpperCAmelCase	       =	10



@require_sentencepiece
@require_tokenizers
class     lowerCAmelCase_		(  a__	,   unittest.TestCase							):
							UpperCAmelCase__    : Dict       					=  SpeechaTextTokenizer
							UpperCAmelCase__    : Optional[int]       					=  False
							UpperCAmelCase__    : Union[str, Any]       					=  True
							def  snake_case_	(      self	)					->		Optional[int]:
										super().setUp()

										UpperCamelCase   :  Any						     =     sp.SentencePieceProcessor()
										spm_model.Load(SCREAMING_SNAKE_CASE_	)
										UpperCamelCase   :  Optional[Any]						     =     ['<s>', '<pad>', '</s>', '<unk>']

										vocab += [spm_model.IdToPiece(id_	) for id_ in range(len(SCREAMING_SNAKE_CASE_	)	)]
										UpperCamelCase   :  Tuple						     =     dict(zip(SCREAMING_SNAKE_CASE_,      range(len(SCREAMING_SNAKE_CASE_	)	)	)	)

										UpperCamelCase   :  Any						     =     Path(self.tmpdirname	)
										save_json(SCREAMING_SNAKE_CASE_,      save_dir / VOCAB_FILES_NAMES['vocab_file']	)
										if not (save_dir / VOCAB_FILES_NAMES["spm_file"]).exists():
													copyfile(SCREAMING_SNAKE_CASE_,      save_dir / VOCAB_FILES_NAMES['spm_file']	)

										UpperCamelCase   :  Union[str, Any]						     =     SpeechaTextTokenizer.from_pretrained(self.tmpdirname	)
										tokenizer.save_pretrained(self.tmpdirname	)
							def  snake_case_	(      self	)					->		List[Any]:
										UpperCamelCase   :  Union[str, Any]						     =     '<pad>'
										UpperCamelCase   :  Dict						     =     1

										self.assertEqual(self.get_tokenizer()._convert_token_to_id(SCREAMING_SNAKE_CASE_	),      SCREAMING_SNAKE_CASE_	)
										self.assertEqual(self.get_tokenizer()._convert_id_to_token(SCREAMING_SNAKE_CASE_	),      SCREAMING_SNAKE_CASE_	)
							def  snake_case_	(      self	)					->		str:
										UpperCamelCase   :  Any						     =     list(self.get_tokenizer().get_vocab().keys()	)

										self.assertEqual(vocab_keys[0],      '<s>'	)
										self.assertEqual(vocab_keys[1],      '<pad>'	)
										self.assertEqual(vocab_keys[-1],      'j'	)
										self.assertEqual(len(SCREAMING_SNAKE_CASE_	),      1001	)
							def  snake_case_	(      self	)					->		List[Any]:
										self.assertEqual(self.get_tokenizer().vocab_size,      1001	)
							def  snake_case_	(      self	)					->		Union[str, Any]:
										UpperCamelCase   :  Optional[Any]						     =     SpeechaTextTokenizer.from_pretrained(self.tmpdirname	)

										UpperCamelCase   :  Optional[int]						     =     tokenizer.tokenize('This is a test'	)
										self.assertListEqual(SCREAMING_SNAKE_CASE_,      ['▁This', '▁is', '▁a', '▁t', 'est']	)

										self.assertListEqual(
										    tokenizer.convert_tokens_to_ids(SCREAMING_SNAKE_CASE_	),      [289, 50, 14, 174, 386],      )

										UpperCamelCase   :  Tuple						     =     tokenizer.tokenize('I was born in 92000, and this is falsé.'	)
										self.assertListEqual(
										    SCREAMING_SNAKE_CASE_,      [SPIECE_UNDERLINE + 'I', SPIECE_UNDERLINE + 'was', SPIECE_UNDERLINE + 'b', 'or', 'n', SPIECE_UNDERLINE + 'in', SPIECE_UNDERLINE + '', '9', '2', '0', '0', '0', ',', SPIECE_UNDERLINE + 'and', SPIECE_UNDERLINE + 'this', SPIECE_UNDERLINE + 'is', SPIECE_UNDERLINE + 'f', 'al', 's', 'é', '.'],      )
										UpperCamelCase   :  Optional[int]						     =     tokenizer.convert_tokens_to_ids(SCREAMING_SNAKE_CASE_	)
										self.assertListEqual(SCREAMING_SNAKE_CASE_,      [12, 25, 88, 59, 28, 23, 11, 4, 606, 351, 351, 351, 7, 16, 70, 50, 76, 84, 10, 4, 8]	)

										UpperCamelCase   :  Union[str, Any]						     =     tokenizer.convert_ids_to_tokens(SCREAMING_SNAKE_CASE_	)
										self.assertListEqual(
										    SCREAMING_SNAKE_CASE_,      [SPIECE_UNDERLINE + 'I', SPIECE_UNDERLINE + 'was', SPIECE_UNDERLINE + 'b', 'or', 'n', SPIECE_UNDERLINE + 'in', SPIECE_UNDERLINE + '', '<unk>', '2', '0', '0', '0', ',', SPIECE_UNDERLINE + 'and', SPIECE_UNDERLINE + 'this', SPIECE_UNDERLINE + 'is', SPIECE_UNDERLINE + 'f', 'al', 's', '<unk>', '.'],      )






							@slow
							def  snake_case_	(      self	)					->		List[Any]:
										# fmt: off
										UpperCamelCase   :  int						     =     {'input_ids': [[3791, 797, 31, 11, 64, 797, 31, 2429, 433, 12, 1176, 12, 20, 786, 915, 142, 2413, 240, 37, 3238, 797, 31, 11, 35, 93, 915, 142, 2413, 240, 37, 5540, 567, 1276, 93, 37, 610, 40, 62, 455, 657, 1042, 123, 780, 177, 37, 309, 241, 1298, 514, 20, 292, 2737, 114, 2469, 241, 85, 64, 302, 548, 528, 423, 4, 509, 406, 423, 37, 601, 4, 777, 302, 548, 528, 423, 284, 4, 3388, 511, 459, 4, 3555, 40, 321, 302, 705, 4, 3388, 511, 583, 326, 5, 5, 5, 62, 3310, 560, 177, 2680, 217, 1508, 32, 31, 853, 418, 64, 583, 511, 1605, 62, 35, 93, 560, 177, 2680, 217, 1508, 1521, 64, 583, 511, 519, 62, 20, 1515, 764, 20, 149, 261, 5625, 7972, 20, 5540, 567, 1276, 93, 3925, 1675, 11, 15, 802, 7972, 576, 217, 1508, 11, 35, 93, 1253, 2441, 15, 289, 652, 31, 416, 321, 3842, 115, 40, 911, 8, 476, 619, 4, 380, 142, 423, 335, 240, 35, 93, 264, 8, 11, 335, 569, 420, 163, 5, 2], [260, 548, 528, 423, 20, 451, 20, 2681, 1153, 3434, 20, 5540, 37, 567, 126, 1253, 2441, 3376, 449, 210, 431, 1563, 177, 767, 5540, 11, 1203, 472, 11, 2953, 685, 285, 364, 706, 1153, 20, 6799, 20, 2869, 20, 4464, 126, 40, 2429, 20, 1040, 866, 2664, 418, 20, 318, 20, 1726, 186, 20, 265, 522, 35, 93, 2191, 4634, 20, 1040, 12, 6799, 15, 228, 2356, 142, 31, 11, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [2575, 2666, 684, 1582, 1176, 12, 627, 149, 619, 20, 4902, 563, 11, 20, 149, 261, 3420, 2356, 174, 142, 4714, 131, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], 'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]}  # noqa: E501
										# fmt: on

										self.tokenizer_integration_test_util(
										    expected_encoding=SCREAMING_SNAKE_CASE_,      model_name='facebook/s2t-small-mustc-en-de-st',      revision='a14f04cf0776c02f62a8cb800cf7909e15ea23ad',      )






@require_sentencepiece
class     lowerCAmelCase_		(  unittest.TestCase							):
							UpperCAmelCase__    : int       					=  "valhalla/s2t_mustc_multilinguial_medium"

							UpperCAmelCase__    : int       					=  "C'est trop cool"
							UpperCAmelCase__    : List[str]       					=  "Esto es genial"
							@classmethod
							def  snake_case_	(      cls	)					->		List[str]:
										UpperCamelCase   :  SpeechaTextTokenizer						     =     SpeechaTextTokenizer.from_pretrained(cls.checkpoint_name	)
										return cls
							def  snake_case_	(      self	)					->		Optional[Any]:
										self.assertEqual(self.tokenizer.lang_code_to_id['pt'],      4	)
										self.assertEqual(self.tokenizer.lang_code_to_id['ru'],      6	)
										self.assertEqual(self.tokenizer.lang_code_to_id['it'],      9	)
										self.assertEqual(self.tokenizer.lang_code_to_id['de'],      11	)
							def  snake_case_	(      self	)					->		str:
										self.assertEqual(self.tokenizer.vocab_size,      1_0000	)
							def  snake_case_	(      self	)					->		str:
										self.assertIn(SCREAMING_SNAKE_CASE_,      self.tokenizer.all_special_ids	)
										UpperCamelCase   :  int						     =     [ES_CODE, 4, 1601, 47, 7647, 2]
										UpperCamelCase   :  List[Any]						     =     self.tokenizer.decode(SCREAMING_SNAKE_CASE_,      skip_special_tokens=SCREAMING_SNAKE_CASE_	)
										UpperCamelCase   :  str						     =     self.tokenizer.decode(generated_ids[1:],      skip_special_tokens=SCREAMING_SNAKE_CASE_	)
										self.assertEqual(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	)
										self.assertNotIn(self.tokenizer.eos_token,      SCREAMING_SNAKE_CASE_	)
							def  snake_case_	(      self	)					->		int:
										UpperCamelCase   :  List[str]						     =     'fr'
										UpperCamelCase   :  Dict						     =     self.tokenizer(self.french_text	).input_ids
										self.assertEqual(encoded[0],      SCREAMING_SNAKE_CASE_	)
										self.assertEqual(encoded[-1],      self.tokenizer.eos_token_id	)






							def  snake_case_	(      self	)					->		Any:
										UpperCamelCase   :  int						     =     'fr'
										self.assertListEqual(self.tokenizer.prefix_tokens,      [FR_CODE]	)

										UpperCamelCase   :  Tuple						     =     'es'
										self.assertListEqual(self.tokenizer.prefix_tokens,      [ES_CODE]	)








import unittest

import numpy as np

from transformers import is_flax_available
from transformers.testing_utils import require_flax

from ..test_modeling_flax_common import ids_tensor


if is_flax_available():
    import jax
    import jax.numpy as jnp

    from transformers.generation import (
        FlaxForcedBOSTokenLogitsProcessor,
        FlaxForcedEOSTokenLogitsProcessor,
        FlaxLogitsProcessorList,
        FlaxMinLengthLogitsProcessor,
        FlaxTemperatureLogitsWarper,
        FlaxTopKLogitsWarper,
        FlaxTopPLogitsWarper,
    )



@require_flax
class     lowerCAmelCase_		(  unittest.TestCase							):
       def  snake_case_	(      self,      SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	)					->		Union[str, Any]:
          UpperCamelCase   :  List[str]						     =     jnp.ones((batch_size, length)	) / length
          return scores
       def  snake_case_	(      self	)					->		Optional[Any]:
          UpperCamelCase   :  Optional[Any]						     =     None
          UpperCamelCase   :  Optional[int]						     =     20

          UpperCamelCase   :  Optional[Any]						     =     self._get_uniform_logits(batch_size=2,      length=SCREAMING_SNAKE_CASE_	)

          # tweak scores to not be uniform anymore
          UpperCamelCase   :  Dict						     =     scores.at[1, 5].set((1 / length) + 0.1	)  # peak, 1st batch
          UpperCamelCase   :  Any						     =     scores.at[1, 10].set((1 / length) - 0.4	)  # valley, 1st batch

          # compute softmax
          UpperCamelCase   :  List[str]						     =     jax.nn.softmax(SCREAMING_SNAKE_CASE_,      axis=-1	)

          UpperCamelCase   :  List[Any]						     =     FlaxTemperatureLogitsWarper(temperature=0.5	)
          UpperCamelCase   :  int						     =     FlaxTemperatureLogitsWarper(temperature=1.3	)

          UpperCamelCase   :  Tuple						     =     jax.nn.softmax(temp_dist_warper_sharper(SCREAMING_SNAKE_CASE_,      scores.copy(),      cur_len=SCREAMING_SNAKE_CASE_	),      axis=-1	)
          UpperCamelCase   :  Any						     =     jax.nn.softmax(temp_dist_warper_smoother(SCREAMING_SNAKE_CASE_,      scores.copy(),      cur_len=SCREAMING_SNAKE_CASE_	),      axis=-1	)

          # uniform distribution stays uniform
          self.assertTrue(jnp.allclose(probs[0, :],      warped_prob_sharp[0, :],      atol=1e-3	)	)
          self.assertTrue(jnp.allclose(probs[0, :],      warped_prob_smooth[0, :],      atol=1e-3	)	)

          # sharp peaks get higher, valleys get lower
          self.assertLess(probs[1, :].max(),      warped_prob_sharp[1, :].max()	)
          self.assertGreater(probs[1, :].min(),      warped_prob_sharp[1, :].min()	)

          # smooth peaks get lower, valleys get higher
          self.assertGreater(probs[1, :].max(),      warped_prob_smooth[1, :].max()	)
          self.assertLess(probs[1, :].min(),      warped_prob_smooth[1, :].min()	)
       def  snake_case_	(      self	)					->		Optional[Any]:
          UpperCamelCase   :  Dict						     =     None
          UpperCamelCase   :  Any						     =     10
          UpperCamelCase   :  Any						     =     2

          # create ramp distribution
          UpperCamelCase   :  List[Any]						     =     np.broadcast_to(np.arange(SCREAMING_SNAKE_CASE_	)[None, :],      (batch_size, vocab_size)	).copy()
          UpperCamelCase   :  Tuple						     =     ramp_logits[1:, : vocab_size // 2] + vocab_size

          UpperCamelCase   :  Dict						     =     FlaxTopKLogitsWarper(3	)

          UpperCamelCase   :  Tuple						     =     top_k_warp(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)

          # check that correct tokens are filtered
          self.assertListEqual(jnp.isinf(scores[0]	).tolist(),      7 * [True] + 3 * [False]	)
          self.assertListEqual(jnp.isinf(scores[1]	).tolist(),      2 * [True] + 3 * [False] + 5 * [True]	)

          # check special case
          UpperCamelCase   :  Optional[int]						     =     5
          UpperCamelCase   :  Optional[int]						     =     FlaxTopKLogitsWarper(top_k=1,      filter_value=0.0,      min_tokens_to_keep=3	)

          UpperCamelCase   :  Union[str, Any]						     =     np.broadcast_to(np.arange(SCREAMING_SNAKE_CASE_	)[None, :],      (batch_size, length)	).copy()
          UpperCamelCase   :  List[str]						     =     top_k_warp_safety_check(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)

          # min_tokens overwrites k: 3 tokens are kept => 2 tokens are nullified
          self.assertListEqual((scores == 0.0).sum(axis=-1	).tolist(),      [2, 2]	)
       def  snake_case_	(      self	)					->		Union[str, Any]:
          UpperCamelCase   :  int						     =     None
          UpperCamelCase   :  List[str]						     =     10
          UpperCamelCase   :  Optional[Any]						     =     2

          # create distribution and take log (inverse to Softmax as taken in TopPLogitsWarper)
          UpperCamelCase   :  Optional[int]						     =     np.log(np.array([[0.3, 0.1, 0.1, 0.5], [0.15, 0.3, 0.3, 0.25]]	)	)

          UpperCamelCase   :  Optional[Any]						     =     FlaxTopPLogitsWarper(0.8	)
          UpperCamelCase   :  int						     =     np.exp(top_p_warp(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)	)

          # dist should be filtered to keep min num values so that sum is >= top_p
          # exp (-inf) => 0
          UpperCamelCase   :  Any						     =     np.array([[0.3, 0.0, 0.0, 0.5], [0.0, 0.3, 0.3, 0.25]]	)
          self.assertTrue(np.allclose(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      atol=1e-3	)	)

          # check edge cases with negative and extreme logits
          UpperCamelCase   :  Optional[Any]						     =     np.broadcast_to(np.arange(SCREAMING_SNAKE_CASE_	)[None, :],      (batch_size, vocab_size)	).copy() - (
              vocab_size // 2
          )

          # make ramp_logits more extreme
          UpperCamelCase   :  Tuple						     =     ramp_logits[1] * 1_00.0

          # make sure at least 2 tokens are kept
          UpperCamelCase   :  int						     =     FlaxTopPLogitsWarper(0.9,      min_tokens_to_keep=2,      filter_value=0.0	)
          UpperCamelCase   :  List[str]						     =     top_p_warp(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)

          # first batch should keep three tokens, second batch would keep only 1, but due to `min_tokens_to_keep=2` keeps 2.
          self.assertListEqual((filtered_dist != 0.0).sum(axis=-1	).tolist(),      [3, 2]	)
       def  snake_case_	(      self	)					->		List[Any]:
          UpperCamelCase   :  Union[str, Any]						     =     20
          UpperCamelCase   :  Union[str, Any]						     =     4
          UpperCamelCase   :  Optional[int]						     =     0

          UpperCamelCase   :  Dict						     =     FlaxMinLengthLogitsProcessor(min_length=10,      eos_token_id=SCREAMING_SNAKE_CASE_	)

          # check that min length is applied at length 5
          UpperCamelCase   :  List[str]						     =     ids_tensor((batch_size, 20),      vocab_size=20	)
          UpperCamelCase   :  Any						     =     5
          UpperCamelCase   :  Tuple						     =     self._get_uniform_logits(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Tuple						     =     min_dist_processor(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
          self.assertListEqual(scores_before_min_length[:, eos_token_id].tolist(),      4 * [-float('inf'	)]	)

          # check that min length is not applied anymore at length 15
          UpperCamelCase   :  Any						     =     self._get_uniform_logits(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Union[str, Any]						     =     15
          UpperCamelCase   :  str						     =     min_dist_processor(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
          self.assertFalse(jnp.isinf(SCREAMING_SNAKE_CASE_	).any()	)
       def  snake_case_	(      self	)					->		Dict:
          UpperCamelCase   :  str						     =     20
          UpperCamelCase   :  List[Any]						     =     4
          UpperCamelCase   :  List[str]						     =     0

          UpperCamelCase   :  int						     =     FlaxForcedBOSTokenLogitsProcessor(bos_token_id=SCREAMING_SNAKE_CASE_	)

          # check that all scores are -inf except the bos_token_id score
          UpperCamelCase   :  Any						     =     ids_tensor((batch_size, 1),      vocab_size=20	)
          UpperCamelCase   :  List[Any]						     =     1
          UpperCamelCase   :  Tuple						     =     self._get_uniform_logits(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Optional[Any]						     =     logits_processor(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
          self.assertTrue(jnp.isneginf(scores[:, bos_token_id + 1 :]	).all()	)
          self.assertListEqual(scores[:, bos_token_id].tolist(),      4 * [0]	)  # score for bos_token_id shold be zero

          # check that bos_token_id is not forced if current length is greater than 1
          UpperCamelCase   :  Dict						     =     3
          UpperCamelCase   :  str						     =     self._get_uniform_logits(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  int						     =     logits_processor(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
          self.assertFalse(jnp.isinf(SCREAMING_SNAKE_CASE_	).any()	)
       def  snake_case_	(      self	)					->		List[str]:
          UpperCamelCase   :  Union[str, Any]						     =     20
          UpperCamelCase   :  Optional[Any]						     =     4
          UpperCamelCase   :  List[Any]						     =     0
          UpperCamelCase   :  int						     =     5

          UpperCamelCase   :  Tuple						     =     FlaxForcedEOSTokenLogitsProcessor(max_length=SCREAMING_SNAKE_CASE_,      eos_token_id=SCREAMING_SNAKE_CASE_	)

          # check that all scores are -inf except the eos_token_id when max_length is reached
          UpperCamelCase   :  str						     =     ids_tensor((batch_size, 4),      vocab_size=20	)
          UpperCamelCase   :  Tuple						     =     4
          UpperCamelCase   :  Union[str, Any]						     =     self._get_uniform_logits(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Any						     =     logits_processor(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
          self.assertTrue(jnp.isneginf(scores[:, eos_token_id + 1 :]	).all()	)
          self.assertListEqual(scores[:, eos_token_id].tolist(),      4 * [0]	)  # score for eos_token_id should be zero

          # check that eos_token_id is not forced if max_length is not reached
          UpperCamelCase   :  str						     =     3
          UpperCamelCase   :  List[Any]						     =     self._get_uniform_logits(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Union[str, Any]						     =     logits_processor(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
          self.assertFalse(jnp.isinf(SCREAMING_SNAKE_CASE_	).any()	)
       def  snake_case_	(      self	)					->		int:
          UpperCamelCase   :  int						     =     4
          UpperCamelCase   :  Tuple						     =     10
          UpperCamelCase   :  str						     =     15
          UpperCamelCase   :  List[str]						     =     2
          UpperCamelCase   :  Any						     =     1
          UpperCamelCase   :  List[str]						     =     15

          # dummy input_ids and scores
          UpperCamelCase   :  Dict						     =     ids_tensor((batch_size, sequence_length),      SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  List[Any]						     =     input_ids.copy()

          UpperCamelCase   :  Any						     =     self._get_uniform_logits(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Any						     =     scores.copy()

          # instantiate all dist processors
          UpperCamelCase   :  List[str]						     =     FlaxTemperatureLogitsWarper(temperature=0.5	)
          UpperCamelCase   :  Optional[Any]						     =     FlaxTopKLogitsWarper(3	)
          UpperCamelCase   :  Optional[int]						     =     FlaxTopPLogitsWarper(0.8	)

          # instantiate all logits processors
          UpperCamelCase   :  Optional[Any]						     =     FlaxMinLengthLogitsProcessor(min_length=10,      eos_token_id=SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Dict						     =     FlaxForcedBOSTokenLogitsProcessor(bos_token_id=SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  List[Any]						     =     FlaxForcedEOSTokenLogitsProcessor(max_length=SCREAMING_SNAKE_CASE_,      eos_token_id=SCREAMING_SNAKE_CASE_	)

          UpperCamelCase   :  List[str]						     =     10

          # no processor list
          UpperCamelCase   :  Any						     =     temp_dist_warp(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Dict						     =     top_k_warp(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Dict						     =     top_p_warp(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Dict						     =     min_dist_proc(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Union[str, Any]						     =     bos_dist_proc(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  List[str]						     =     eos_dist_proc(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)

          # with processor list
          UpperCamelCase   :  List[str]						     =     FlaxLogitsProcessorList(
              [temp_dist_warp, top_k_warp, top_p_warp, min_dist_proc, bos_dist_proc, eos_dist_proc]	)
          UpperCamelCase   :  Optional[Any]						     =     processor(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)

          # scores should be equal
          self.assertTrue(jnp.allclose(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      atol=1e-3	)	)

          # input_ids should never be changed
          self.assertListEqual(input_ids.tolist(),      input_ids_comp.tolist()	)






       def  snake_case_	(      self	)					->		int:
          UpperCamelCase   :  Optional[Any]						     =     4
          UpperCamelCase   :  Tuple						     =     10
          UpperCamelCase   :  Union[str, Any]						     =     15
          UpperCamelCase   :  Union[str, Any]						     =     2
          UpperCamelCase   :  Optional[Any]						     =     1
          UpperCamelCase   :  int						     =     15

          # dummy input_ids and scores
          UpperCamelCase   :  Dict						     =     ids_tensor((batch_size, sequence_length),      SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  str						     =     input_ids.copy()

          UpperCamelCase   :  Optional[int]						     =     self._get_uniform_logits(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Union[str, Any]						     =     scores.copy()

          # instantiate all dist processors
          UpperCamelCase   :  Dict						     =     FlaxTemperatureLogitsWarper(temperature=0.5	)
          UpperCamelCase   :  Optional[Any]						     =     FlaxTopKLogitsWarper(3	)
          UpperCamelCase   :  Union[str, Any]						     =     FlaxTopPLogitsWarper(0.8	)

          # instantiate all logits processors
          UpperCamelCase   :  str						     =     FlaxMinLengthLogitsProcessor(min_length=10,      eos_token_id=SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Any						     =     FlaxForcedBOSTokenLogitsProcessor(bos_token_id=SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  Optional[int]						     =     FlaxForcedEOSTokenLogitsProcessor(max_length=SCREAMING_SNAKE_CASE_,      eos_token_id=SCREAMING_SNAKE_CASE_	)

          UpperCamelCase   :  Any						     =     10

          # no processor list
          def run_no_processor_list(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	):
             UpperCamelCase   :  Optional[Any]						     =     temp_dist_warp(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
             UpperCamelCase   :  str						     =     top_k_warp(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
             UpperCamelCase   :  Any						     =     top_p_warp(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
             UpperCamelCase   :  List[str]						     =     min_dist_proc(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
             UpperCamelCase   :  List[str]						     =     bos_dist_proc(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
             UpperCamelCase   :  List[str]						     =     eos_dist_proc(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
             return scores

          # with processor list
          def run_processor_list(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	):
             UpperCamelCase   :  Tuple						     =     FlaxLogitsProcessorList(
                 [temp_dist_warp, top_k_warp, top_p_warp, min_dist_proc, bos_dist_proc, eos_dist_proc]	)
             UpperCamelCase   :  Union[str, Any]						     =     processor(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      cur_len=SCREAMING_SNAKE_CASE_	)
             return scores

          UpperCamelCase   :  Dict						     =     jax.jit(SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  List[str]						     =     jax.jit(SCREAMING_SNAKE_CASE_	)

          UpperCamelCase   :  int						     =     jitted_run_no_processor_list(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	)
          UpperCamelCase   :  int						     =     jitted_run_processor_list(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_	)

          # scores should be equal
          self.assertTrue(jnp.allclose(SCREAMING_SNAKE_CASE_,      SCREAMING_SNAKE_CASE_,      atol=1e-3	)	)

          # input_ids should never be changed
          self.assertListEqual(input_ids.tolist(),      input_ids_comp.tolist()	)



