



import inspect
import os
import re

from transformers.configuration_utils import PretrainedConfig
from transformers.utils import direct_transformers_import


# All paths are set with the intent you should run this script from the root of the repo with the command
# python utils/check_config_docstrings.py
__UpperCAmelCase	       =	'''src/transformers'''


# This is to make sure the transformers module imported is the one in the repo.
__UpperCAmelCase	       =	direct_transformers_import(PATH_TO_TRANSFORMERS)

__UpperCAmelCase	       =	transformers.models.auto.configuration_auto.CONFIG_MAPPING

__UpperCAmelCase	       =	{
    # used to compute the property `self.chunk_length`
    '''EncodecConfig''': ['''overlap'''],
    # used as `self.bert_model = BertModel(config, ...)`
    '''DPRConfig''': True,
    # not used in modeling files, but it's an important information
    '''FSMTConfig''': ['''langs'''],
    # used internally in the configuration class file
    '''GPTNeoConfig''': ['''attention_types'''],
    # used internally in the configuration class file
    '''EsmConfig''': ['''is_folding_model'''],
    # used during training (despite we don't have training script for these models yet)
    '''Mask2FormerConfig''': ['''ignore_value'''],
    # `ignore_value` used during training (despite we don't have training script for these models yet)
    # `norm` used in conversion script (despite not using in the modeling file)
    '''OneFormerConfig''': ['''ignore_value''', '''norm'''],
    # used during preprocessing and collation, see `collating_graphormer.py`
    '''GraphormerConfig''': ['''spatial_pos_max'''],
    # used internally in the configuration class file
    '''T5Config''': ['''feed_forward_proj'''],
    # used internally in the configuration class file
    # `tokenizer_class` get default value `T5Tokenizer` intentionally
    '''MT5Config''': ['''feed_forward_proj''', '''tokenizer_class'''],
    '''UMT5Config''': ['''feed_forward_proj''', '''tokenizer_class'''],
    # used internally in the configuration class file
    '''LongT5Config''': ['''feed_forward_proj'''],
    # used internally in the configuration class file
    '''SwitchTransformersConfig''': ['''feed_forward_proj'''],
    # having default values other than `1e-5` - we can't fix them without breaking
    '''BioGptConfig''': ['''layer_norm_eps'''],
    # having default values other than `1e-5` - we can't fix them without breaking
    '''GLPNConfig''': ['''layer_norm_eps'''],
    # having default values other than `1e-5` - we can't fix them without breaking
    '''SegformerConfig''': ['''layer_norm_eps'''],
    # having default values other than `1e-5` - we can't fix them without breaking
    '''CvtConfig''': ['''layer_norm_eps'''],
    # having default values other than `1e-5` - we can't fix them without breaking
    '''PerceiverConfig''': ['''layer_norm_eps'''],
    # used internally to calculate the feature size
    '''InformerConfig''': ['''num_static_real_features''', '''num_time_features'''],
    # used internally to calculate the feature size
    '''TimeSeriesTransformerConfig''': ['''num_static_real_features''', '''num_time_features'''],
    # used internally to calculate the feature size
    '''AutoformerConfig''': ['''num_static_real_features''', '''num_time_features'''],
    # used internally to calculate `mlp_dim`
    '''SamVisionConfig''': ['''mlp_ratio'''],
    # For (head) training, but so far not implemented
    '''ClapAudioConfig''': ['''num_classes'''],
    # Not used, but providing useful information to users
    '''SpeechT5HifiGanConfig''': ['''sampling_rate'''],
}


# TODO (ydshieh): Check the failing cases, try to fix them or move some cases to the above block once we are sure
SPECIAL_CASES_TO_ALLOW.update(
    {
        '''CLIPSegConfig''': True,
        '''DeformableDetrConfig''': True,
        '''DetaConfig''': True,
        '''DinatConfig''': True,
        '''DonutSwinConfig''': True,
        '''EfficientFormerConfig''': True,
        '''FSMTConfig''': True,
        '''JukeboxConfig''': True,
        '''LayoutLMv2Config''': True,
        '''MaskFormerSwinConfig''': True,
        '''MT5Config''': True,
        '''NatConfig''': True,
        '''OneFormerConfig''': True,
        '''PerceiverConfig''': True,
        '''RagConfig''': True,
        '''SpeechT5Config''': True,
        '''SwinConfig''': True,
        '''Swin2SRConfig''': True,
        '''Swinv2Config''': True,
        '''SwitchTransformersConfig''': True,
        '''TableTransformerConfig''': True,
        '''TapasConfig''': True,
        '''TransfoXLConfig''': True,
        '''UniSpeechConfig''': True,
        '''UniSpeechSatConfig''': True,
        '''WavLMConfig''': True,
        '''WhisperConfig''': True,
        # TODO: @Arthur (for `alignment_head` and `alignment_layer`)
        '''JukeboxPriorConfig''': True,
        # TODO: @Younes (for `is_decoder`)
        '''Pix2StructTextConfig''': True,
    }
)
def 		UpperCamelCase     (       snake_case__	:   Optional[Any]	,					snake_case__	:   List[Any]	,					snake_case__	:   Union[str, Any]	,					snake_case__	:   Optional[Any]     )     ->					Tuple:
   UpperCamelCase   :  str						     =     False
   for attribute in attributes:
      for modeling_source in source_strings:
         # check if we can find `config.xxx`, `getattr(config, "xxx", ...)` or `getattr(self.config, "xxx", ...)`
         if (
             F"""config.{attribute}""" in modeling_source
             or F"""getattr(config, \"{attribute}\"""" in modeling_source
             or F"""getattr(self.config, \"{attribute}\"""" in modeling_source
         ):
            UpperCamelCase   :  Dict						     =     True
         # Deal with multi-line cases
         elif (
             re.search(
                 RF"""getattr[ \t\v\n\r\f]*\([ \t\v\n\r\f]*(self\.)?config,[ \t\v\n\r\f]*\"{attribute}\""""	,					snake_case__	,					)
             is not None
         ):
            UpperCamelCase   :  Dict						     =     True
         # `SequenceSummary` is called with `SequenceSummary(config)`
         elif attribute in [
             "summary_type",
             "summary_use_proj",
             "summary_activation",
             "summary_last_dropout",
             "summary_proj_to_labels",
             "summary_first_dropout",
         ]:
            if "SequenceSummary" in modeling_source:
               UpperCamelCase   :  Tuple						     =     True
         if attribute_used:
            break
      if attribute_used:
         break

    # common and important attributes, even if they do not always appear in the modeling files
   UpperCamelCase   :  Tuple						     =     [
       'bos_index',
       'eos_index',
       'pad_index',
       'unk_index',
       'mask_index',
       'image_size',
       'use_cache',
       'out_features',
       'out_indices',
   ]
   UpperCamelCase   :  Union[str, Any]						     =     ['encoder_no_repeat_ngram_size']

   # Special cases to be allowed
   UpperCamelCase   :  int						     =     True
   if not attribute_used:
      UpperCamelCase   :  Dict						     =     False
      for attribute in attributes:
         # Allow if the default value in the configuration class is different from the one in `PretrainedConfig`
         if attribute in ["is_encoder_decoder"] and default_value is True:
            UpperCamelCase   :  Dict						     =     True
         elif attribute in ["tie_word_embeddings"] and default_value is False:
            UpperCamelCase   :  List[str]						     =     True

         # Allow cases without checking the default value in the configuration class
         elif attribute in attributes_to_allow + attributes_used_in_generation:
            UpperCamelCase   :  Dict						     =     True
         elif attribute.endswith('_token_id'     ):
            UpperCamelCase   :  int						     =     True

         # configuration class specific cases
         if not case_allowed:
            UpperCamelCase   :  Tuple						     =     SPECIAL_CASES_TO_ALLOW.get(config_class.__name__	,					[]     )
            UpperCamelCase   :  Tuple						     =     allowed_cases is True or attribute in allowed_cases

   return attribute_used or case_allowed
def 		UpperCamelCase     (       snake_case__	:   Any     )     ->					Any:
   UpperCamelCase   :  List[Any]						     =     dict(inspect.signature(config_class.__init__     ).parameters     )
   UpperCamelCase   :  str						     =     [x for x in list(signature.keys()     ) if x not in ['self', 'kwargs']]
   UpperCamelCase   :  int						     =     [signature[param].default for param in parameter_names]

   # If `attribute_map` exists, an attribute can have different names to be used in the modeling files, and as long
   # as one variant is used, the test should pass
   UpperCamelCase   :  Tuple						     =     {}
   if len(config_class.attribute_map     ) > 0:
      UpperCamelCase   :  List[str]						     =     {v: k for k, v in config_class.attribute_map.items()}

   # Get the path to modeling source files
   UpperCamelCase   :  Optional[int]						     =     inspect.getsourcefile(snake_case__     )
   UpperCamelCase   :  List[str]						     =     os.path.dirname(snake_case__     )
   # Let's check against all frameworks: as long as one framework uses an attribute, we are good.
   UpperCamelCase   :  List[str]						     =     [os.path.join(snake_case__	,					snake_case__     ) for fn in os.listdir(snake_case__     ) if fn.startswith('modeling_'     )]

   # Get the source code strings
   UpperCamelCase   :  Optional[Any]						     =     []
   for path in modeling_paths:
      if os.path.isfile(snake_case__     ):
         with open(snake_case__     ) as fp:
            modeling_sources.append(fp.read()     )

   UpperCamelCase   :  List[Any]						     =     []
   for config_param, default_value in zip(snake_case__	,					snake_case__     ):
      # `attributes` here is all the variant names for `config_param`
      UpperCamelCase   :  Tuple						     =     [config_param]
      # some configuration classes have non-empty `attribute_map`, and both names could be used in the
      # corresponding modeling files. As long as one of them appears, it is fine.
      if config_param in reversed_attribute_map:
         attributes.append(reversed_attribute_map[config_param]     )

      if not check_attribute_being_used(snake_case__	,					snake_case__	,					snake_case__	,					snake_case__     ):
         unused_attributes.append(attributes[0]     )

   return sorted(snake_case__     )
def 		UpperCamelCase     (       )     ->					str:
   UpperCamelCase   :  List[str]						     =     {}
   for _config_class in list(CONFIG_MAPPING.values()     ):
      # Skip deprecated models
      if "models.deprecated" in _config_class.__module__:
         continue
      # Some config classes are not in `CONFIG_MAPPING` (e.g. `CLIPVisionConfig`, `Blip2VisionConfig`, etc.)
      UpperCamelCase   :  List[str]						     =     [
          cls
          for name, cls in inspect.getmembers(
              inspect.getmodule(_config_class     )	,					lambda snake_case__     : inspect.isclass(snake_case__     )
              and issubclass(snake_case__	,					snake_case__     )
              and inspect.getmodule(snake_case__     ) == inspect.getmodule(_config_class     )	,					)
      ]
      for config_class in config_classes_in_module:
         UpperCamelCase   :  List[Any]						     =     check_config_attributes_being_used(snake_case__     )
         if len(snake_case__     ) > 0:
            UpperCamelCase   :  List[Any]						     =     unused_attributes

   if len(snake_case__     ) > 0:
      UpperCamelCase   :  Optional[Any]						     =     'The following configuration classes contain unused attributes in the corresponding modeling files:\n'
      for name, attributes in configs_with_unused_attributes.items():
         error += F"""{name}: {attributes}\n"""

      raise ValueError(snake_case__     )


if __name__ == "__main__":
    check_config_attributes()








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()	)



