


"""simple docstring"""





from __future__ import annotations

import random
import unittest

from transformers import TransfoXLConfig, is_tf_available
from transformers.testing_utils import require_tf, slow

from ...test_configuration_common import ConfigTester
from ...test_modeling_tf_common import TFModelTesterMixin, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_tf_available():
 import tensorflow as tf

 from transformers import (
     TF_TRANSFO_XL_PRETRAINED_MODEL_ARCHIVE_LIST,
     TFTransfoXLForSequenceClassification,
     TFTransfoXLLMHeadModel,
     TFTransfoXLModel,
 )



class 		snake_case_:






     def __init__(	self  :					Optional[Any]					,				UpperCamelCase_  :					int					,				):
           lowerCAmelCase					:	Any       =   parent
           lowerCAmelCase					:	int       =   1_3
           lowerCAmelCase					:	List[str]       =   7
           lowerCAmelCase					:	int       =   3_0
           lowerCAmelCase					:	List[str]       =   self.seq_length + self.mem_len
           lowerCAmelCase					:	Union[str, Any]       =   1_5
           lowerCAmelCase					:	Dict       =   True
           lowerCAmelCase					:	Optional[int]       =   True
           lowerCAmelCase					:	Optional[int]       =   9_9
           lowerCAmelCase					:	Dict       =   [1_0, 5_0, 8_0]
           lowerCAmelCase					:	Dict       =   3_2
           lowerCAmelCase					:	Dict       =   3_2
           lowerCAmelCase					:	int       =   4
           lowerCAmelCase					:	int       =   8
           lowerCAmelCase					:	Any       =   1_2_8
           lowerCAmelCase					:	Dict       =   2
           lowerCAmelCase					:	Any       =   2
           lowerCAmelCase					:	Tuple       =   None
           lowerCAmelCase					:	str       =   1
           lowerCAmelCase					:	Union[str, Any]       =   0
           lowerCAmelCase					:	str       =   3
           lowerCAmelCase					:	List[Any]       =   self.vocab_size - 1
           lowerCAmelCase					:	Tuple       =   0.01






     def      lowerCamelCase__     (	self  :					Optional[int]				):
           lowerCAmelCase					:	str       =   ids_tensor([self.batch_size, self.seq_length]					,				self.vocab_size				)
           lowerCAmelCase					:	int       =   ids_tensor([self.batch_size, self.seq_length]					,				self.vocab_size				)

           lowerCAmelCase					:	Any       =   None
           if self.use_labels:
                 lowerCAmelCase					:	Any       =   ids_tensor([self.batch_size, self.seq_length]					,				self.vocab_size				)

           lowerCAmelCase					:	Dict       =   TransfoXLConfig(
               vocab_size=self.vocab_size					,				mem_len=self.mem_len					,				clamp_len=self.clamp_len					,				cutoffs=self.cutoffs					,				d_model=self.hidden_size					,				d_embed=self.d_embed					,				n_head=self.num_attention_heads					,				d_head=self.d_head					,				d_inner=self.d_inner					,				div_val=self.div_val					,				n_layer=self.num_hidden_layers					,				eos_token_id=self.eos_token_id					,				pad_token_id=self.vocab_size - 1					,				init_range=self.init_range					,				num_labels=self.num_labels					,				)

           return (config, input_ids_a, input_ids_a, lm_labels)






     def      lowerCamelCase__     (	self  :					List[Any]				):
           random.seed(self.seed				)
           tf.random.set_seed(self.seed				)






     def      lowerCamelCase__     (	self  :					List[Any]					,				UpperCamelCase_  :					Tuple					,				UpperCamelCase_  :					Dict					,				UpperCamelCase_  :					Tuple					,				UpperCamelCase_  :					Optional[Any]				):
           lowerCAmelCase					:	Union[str, Any]       =   TFTransfoXLModel(snake_case_				)

           lowerCAmelCase					:	Optional[int]       =   model(snake_case_				).to_tuple()

           lowerCAmelCase					:	Any       =   {"input_ids": input_ids_a, "mems": mems_a}

           lowerCAmelCase					:	Optional[int]       =   model(snake_case_				).to_tuple()

           self.parent.assertEqual(hidden_states_a.shape					,				(self.batch_size, self.seq_length, self.hidden_size)				)
           self.parent.assertEqual(hidden_states_a.shape					,				(self.batch_size, self.seq_length, self.hidden_size)				)
           self.parent.assertListEqual(
               [mem.shape for mem in mems_a]					,				[(self.mem_len, self.batch_size, self.hidden_size)] * self.num_hidden_layers					,				)
           self.parent.assertListEqual(
               [mem.shape for mem in mems_a]					,				[(self.mem_len, self.batch_size, self.hidden_size)] * self.num_hidden_layers					,				)






     def      lowerCamelCase__     (	self  :					List[str]					,				UpperCamelCase_  :					List[str]					,				UpperCamelCase_  :					str					,				UpperCamelCase_  :					Union[str, Any]					,				UpperCamelCase_  :					str				):
           lowerCAmelCase					:	Any       =   TFTransfoXLLMHeadModel(snake_case_				)

           lowerCAmelCase					:	str       =   model(snake_case_				).to_tuple()

           lowerCAmelCase					:	List[Any]       =   {"input_ids": input_ids_a, "labels": lm_labels}
           lowerCAmelCase					:	str       =   model(snake_case_				).to_tuple()

           lowerCAmelCase					:	Dict       =   model([input_ids_a, mems_a]				).to_tuple()

           lowerCAmelCase					:	Optional[Any]       =   {"input_ids": input_ids_a, "mems": mems_a, "labels": lm_labels}

           lowerCAmelCase					:	Optional[Any]       =   model(snake_case_				).to_tuple()

           self.parent.assertEqual(lm_logits_a.shape					,				(self.batch_size, self.seq_length, self.vocab_size)				)
           self.parent.assertListEqual(
               [mem.shape for mem in mems_a]					,				[(self.mem_len, self.batch_size, self.hidden_size)] * self.num_hidden_layers					,				)

           self.parent.assertEqual(lm_logits_a.shape					,				(self.batch_size, self.seq_length, self.vocab_size)				)
           self.parent.assertListEqual(
               [mem.shape for mem in mems_a]					,				[(self.mem_len, self.batch_size, self.hidden_size)] * self.num_hidden_layers					,				)






     def      lowerCamelCase__     (	self  :					List[str]					,				UpperCamelCase_  :					str					,				UpperCamelCase_  :					List[Any]					,				UpperCamelCase_  :					Dict					,				UpperCamelCase_  :					Dict				):
           lowerCAmelCase					:	int       =   TFTransfoXLForSequenceClassification(snake_case_				)
           lowerCAmelCase					:	Any       =   model(snake_case_				)
           self.parent.assertEqual(result.logits.shape					,				(self.batch_size, self.num_labels)				)






     def      lowerCamelCase__     (	self  :					Tuple				):
           lowerCAmelCase					:	Optional[int]       =   self.prepare_config_and_inputs()
           (lowerCAmelCase)					:	Optional[int]       =   config_and_inputs
           lowerCAmelCase					:	Union[str, Any]       =   {"input_ids": input_ids_a}
           return config, inputs_dict



@require_tf
class 		snake_case_(       _snake_case							,					_snake_case							,					unittest.TestCase			):
     __UpperCamelCase  =					(
         (TFTransfoXLModel, TFTransfoXLLMHeadModel, TFTransfoXLForSequenceClassification) if is_tf_available() else ()
     )
     __UpperCamelCase  =					() if is_tf_available() else ()
     __UpperCamelCase  =					(
         {
             """feature-extraction""": TFTransfoXLModel,
             """text-classification""": TFTransfoXLForSequenceClassification,
             """text-generation""": TFTransfoXLLMHeadModel,
             """zero-shot""": TFTransfoXLForSequenceClassification,
         }
         if is_tf_available()
         else {}
     )
     # TODO: add this test when TFTransfoXLLMHead has a linear output layer implemented
     __UpperCamelCase  =					False
     __UpperCamelCase  =					False
     __UpperCamelCase  =					False
     __UpperCamelCase  =					False






     def      lowerCamelCase__     (	self  :					str					,				UpperCamelCase_  :					List[str]					,				UpperCamelCase_  :					List[Any]					,				UpperCamelCase_  :					List[Any]					,				UpperCamelCase_  :					Union[str, Any]					,				UpperCamelCase_  :					List[Any]				):
           if pipeline_test_casse_name == "TextGenerationPipelineTests":
                 # Get `ValueError: AttributeError: 'NoneType' object has no attribute 'new_ones'` or `AssertionError`.
                 # `TransfoXLConfig` was never used in pipeline tests: cannot create a simple
                 # tokenizer.
                 return True

           return False






     def      lowerCamelCase__     (	self  :					Tuple				):
           lowerCAmelCase					:	Dict       =   TFTransfoXLModelTester(self				)
           lowerCAmelCase					:	Dict       =   ConfigTester(self					,				config_class=snake_case_					,				d_embed=3_7				)






     def      lowerCamelCase__     (	self  :					List[Any]				):
           self.config_tester.run_common_tests()






     def      lowerCamelCase__     (	self  :					List[Any]				):
           self.model_tester.set_seed()
           lowerCAmelCase					:	Union[str, Any]       =   self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_transfo_xl_model(*snake_case_				)






     def      lowerCamelCase__     (	self  :					int				):
           self.model_tester.set_seed()
           lowerCAmelCase					:	Optional[Any]       =   self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_transfo_xl_lm_head(*snake_case_				)






     def      lowerCamelCase__     (	self  :					str				):
           lowerCAmelCase					:	str       =   self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_transfo_xl_for_sequence_classification(*snake_case_				)






     def      lowerCamelCase__     (	self  :					Optional[Any]				):
           lowerCAmelCase					:	Optional[Any]       =   self.model_tester.prepare_config_and_inputs_for_common()
           lowerCAmelCase					:	Optional[int]       =   [TFTransfoXLForSequenceClassification]

           for model_class in self.all_model_classes:
                 lowerCAmelCase					:	Dict       =   model_class(snake_case_				)
                 assert isinstance(model.get_input_embeddings()					,				tf.keras.layers.Layer				)
                 if model_class in list_other_models_with_output_ebd:
                       lowerCAmelCase					:	Union[str, Any]       =   model.get_output_embeddings()
                       assert isinstance(snake_case_					,				tf.keras.layers.Layer				)
                       lowerCAmelCase					:	Dict       =   model.get_bias()
                       assert name is None
                 else:
                       lowerCAmelCase					:	str       =   model.get_output_embeddings()
                       assert x is None
                       lowerCAmelCase					:	Dict       =   model.get_bias()
                       assert name is None






     def      lowerCamelCase__     (	self  :					str				):
           # TODO JP: Make TransfoXL XLA compliant
           pass






     @slow
     def      lowerCamelCase__     (	self  :					int				):
           for model_name in TF_TRANSFO_XL_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
                 lowerCAmelCase					:	List[Any]       =   TFTransfoXLModel.from_pretrained(snake_case_				)
                 self.assertIsNotNone(snake_case_				)






     @unittest.skip(reason='''This model doesn\'t play well with fit() due to not returning a single loss.'''				)
     def      lowerCamelCase__     (	self  :					Optional[int]				):
           pass



@require_tf
class 		snake_case_(       unittest.TestCase			):






     @unittest.skip('''Skip test until #12651 is resolved.'''				)
     @slow
     def      lowerCamelCase__     (	self  :					int				):
           lowerCAmelCase					:	Optional[int]       =   TFTransfoXLLMHeadModel.from_pretrained('''transfo-xl-wt103'''				)
           # fmt: off
           lowerCAmelCase					:	str       =   tf.convert_to_tensor([[3_3,1_2_9_7,2,1,1_0_0_9,4,1_1_0_9,1_1_7_3_9,4_7_6_2,3_5_8,5,2_5,2_4_5,2_2,1_7_0_6,1_7,2_0_0_9_8,5,3_2_1_5,2_1,3_7,1_1_1_0,3,1_3,1_0_4_1,4,2_4,6_0_3,4_9_0,2,7_1_4_7_7,2_0_0_9_8,1_0_4_4_4_7,2,2_0_9_6_1,1,2_6_0_4,4,1,3_2_9,3,6_2_2_4,8_3_1,1_6_0_0_2,2,8,6_0_3,7_8_9_6_7,2_9_5_4_6,2_3,8_0_3,2_0,2_5,4_1_6,5,8,2_3_2,4,2_7_7,6,1_8_5_5,4_6_0_1,3,2_9_5_4_6,5_4,8,3_6_0_9,5,5_7_2_1_1,4_9,4,1,2_7_7,1_8,8,1_7_5_5,1_5_6_9_1,3,3_4_1,2_5,4_1_6,6_9_3,4_2_5_7_3,7_1,1_7,4_0_1,9_4,3_1,1_7_9_1_9,2,2_9_5_4_6,7_8_7_3,1_8,1,4_3_5,2_3,1_1_0_1_1,7_5_5,5,5_1_6_7,3,7_9_8_3,9_8,8_4,2,2_9_5_4_6,3_2_6_7,8,3_6_0_9,4,1,4_8_6_5,1_0_7_5,2,6_0_8_7,7_1,6,3_4_6,8,5_8_5_4,3,2_9_5_4_6,8_2_4,1_4_0_0,1_8_6_8,2,1_9,1_6_0,2,3_1_1,8,5_4_9_6,2,2_0_9_2_0,1_7,2_5,1_5_0_9_7,3,2_4,2_4,0]]					,				dtype=tf.intaa				)  # noqa: E231
           # fmt: on
           #  In 1991 , the remains of Russian Tsar Nicholas II and his family
           #  ( except for Alexei and Maria ) are discovered .
           #  The voice of Nicholas's young son , Tsarevich Alexei Nikolaevich , narrates the
           #  remainder of the story . 1883 Western Siberia ,
           #  a young Grigori Rasputin is asked by his father and a group of men to perform magic .
           #  Rasputin has a vision and denounces one of the men as a horse thief . Although his
           #  father initially slaps him for making such an accusation , Rasputin watches as the
           #  man is chased outside and beaten . Twenty years later , Rasputin sees a vision of
           #  the Virgin Mary , prompting him to become a priest . Rasputin quickly becomes famous ,
           #  with people , even a bishop , begging for his blessing . <eod> </s> <eos>

           # fmt: off
           lowerCAmelCase					:	List[Any]       =   [3_3,1_2_9_7,2,1,1_0_0_9,4,1_1_0_9,1_1_7_3_9,4_7_6_2,3_5_8,5,2_5,2_4_5,2_2,1_7_0_6,1_7,2_0_0_9_8,5,3_2_1_5,2_1,3_7,1_1_1_0,3,1_3,1_0_4_1,4,2_4,6_0_3,4_9_0,2,7_1_4_7_7,2_0_0_9_8,1_0_4_4_4_7,2,2_0_9_6_1,1,2_6_0_4,4,1,3_2_9,3,6_2_2_4,8_3_1,1_6_0_0_2,2,8,6_0_3,7_8_9_6_7,2_9_5_4_6,2_3,8_0_3,2_0,2_5,4_1_6,5,8,2_3_2,4,2_7_7,6,1_8_5_5,4_6_0_1,3,2_9_5_4_6,5_4,8,3_6_0_9,5,5_7_2_1_1,4_9,4,1,2_7_7,1_8,8,1_7_5_5,1_5_6_9_1,3,3_4_1,2_5,4_1_6,6_9_3,4_2_5_7_3,7_1,1_7,4_0_1,9_4,3_1,1_7_9_1_9,2,2_9_5_4_6,7_8_7_3,1_8,1,4_3_5,2_3,1_1_0_1_1,7_5_5,5,5_1_6_7,3,7_9_8_3,9_8,8_4,2,2_9_5_4_6,3_2_6_7,8,3_6_0_9,4,1,4_8_6_5,1_0_7_5,2,6_0_8_7,7_1,6,3_4_6,8,5_8_5_4,3,2_9_5_4_6,8_2_4,1_4_0_0,1_8_6_8,2,1_9,1_6_0,2,3_1_1,8,5_4_9_6,2,2_0_9_2_0,1_7,2_5,1_5_0_9_7,3,2_4,2_4,0,3_3,1,1_8_5_7,2,1,1_0_0_9,4,1_1_0_9,1_1_7_3_9,4_7_6_2,3_5_8,5,2_5,2_4_5,2_8,1_1_1_0,3,1_3,1_0_4_1,4,2_4,6_0_3,4_9_0,2,7_1_4_7_7,2_0_0_9_8,1_0_4_4_4_7,2,2_0_9_6_1,1,2_6_0_4,4,1,3_2_9,3,0]  # noqa: E231
           # fmt: on
           #  In 1991, the remains of Russian Tsar Nicholas II and his family (
           #  except for Alexei and Maria ) are discovered. The voice of young son,
           #  Tsarevich Alexei Nikolaevich, narrates the remainder of the story.
           #  1883 Western Siberia, a young Grigori Rasputin is asked by his father
           #  and a group of men to perform magic. Rasputin has a vision and
           #  denounces one of the men as a horse thief. Although his father initially
           #  slaps him for making such an accusation, Rasputin watches as the man
           #  is chased outside and beaten. Twenty years later, Rasputin sees a vision
           #  of the Virgin Mary, prompting him to become a priest.
           #  Rasputin quickly becomes famous, with people, even a bishop, begging for
           #  his blessing. <unk> <unk> <eos> In the 1990s, the remains of Russian Tsar
           # Nicholas II and his family were discovered. The voice of <unk> young son,
           # Tsarevich Alexei Nikolaevich, narrates the remainder of the story.<eos>

           lowerCAmelCase					:	Dict       =   model.generate(snake_case_					,				max_length=2_0_0					,				do_sample=snake_case_				)
           self.assertListEqual(output_ids[0].numpy().tolist()					,				snake_case_				)






"""simple docstring"""





import unittest

import numpy as np
import timeout_decorator  # noqa

from transformers import BlenderbotConfig, is_flax_available
from transformers.testing_utils import jax_device, require_flax, slow

from ...generation.test_flax_utils import FlaxGenerationTesterMixin
from ...test_modeling_flax_common import FlaxModelTesterMixin, ids_tensor


if is_flax_available():
 import os

 # The slow tests are often failing with OOM error on GPU
 # This makes JAX allocate exactly what is needed on demand, and deallocate memory that is no longer needed
 # but will be slower as stated here https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
 snake_case__		:     int    				=				'''platform'''

 import jax
 import jax.numpy as jnp

 from transformers import BlenderbotTokenizer
 from transformers.models.blenderbot.modeling_flax_blenderbot import (
     FlaxBlenderbotForConditionalGeneration,
     FlaxBlenderbotModel,
     shift_tokens_right,
 )


def      _snake_case						(						_snake_case				:			str ,   _snake_case				:			Any ,   _snake_case				:			str=None ,   _snake_case				:			str=None ,   _snake_case				:			Dict=None ,   _snake_case				:			Tuple=None ,   _snake_case				:			str=None ,   _snake_case				:			Any=None ,   ):
      if attention_mask is None:
            lowerCAmelCase					:	List[str]       =   np.where(input_ids != config.pad_token_id ,   1 ,   0			)
      if decoder_attention_mask is None:
            lowerCAmelCase					:	Optional[int]       =   np.where(decoder_input_ids != config.pad_token_id ,   1 ,   0			)
      if head_mask is None:
            lowerCAmelCase					:	Any       =   np.ones((config.encoder_layers, config.encoder_attention_heads)			)
      if decoder_head_mask is None:
            lowerCAmelCase					:	int       =   np.ones((config.decoder_layers, config.decoder_attention_heads)			)
      if cross_attn_head_mask is None:
            lowerCAmelCase					:	List[str]       =   np.ones((config.decoder_layers, config.decoder_attention_heads)			)
      return {
          "input_ids": input_ids,
          "decoder_input_ids": decoder_input_ids,
          "attention_mask": attention_mask,
          "decoder_attention_mask": attention_mask,
      }



class 		snake_case_:






     def __init__(	self  :					int					,				UpperCamelCase_  :					Tuple					,				UpperCamelCase_  :					int=1_3					,				UpperCamelCase_  :					Union[str, Any]=7					,				UpperCamelCase_  :					Union[str, Any]=True					,				UpperCamelCase_  :					List[Any]=False					,				UpperCamelCase_  :					Dict=9_9					,				UpperCamelCase_  :					Optional[int]=1_6					,				UpperCamelCase_  :					str=2					,				UpperCamelCase_  :					List[str]=4					,				UpperCamelCase_  :					List[Any]=4					,				UpperCamelCase_  :					int="gelu"					,				UpperCamelCase_  :					Optional[int]=0.1					,				UpperCamelCase_  :					Any=0.1					,				UpperCamelCase_  :					str=3_2					,				UpperCamelCase_  :					str=2					,				UpperCamelCase_  :					Tuple=1					,				UpperCamelCase_  :					List[Any]=0					,				UpperCamelCase_  :					Any=0.02					,				):
           lowerCAmelCase					:	Tuple       =   parent
           lowerCAmelCase					:	str       =   batch_size
           lowerCAmelCase					:	List[Any]       =   seq_length
           lowerCAmelCase					:	Optional[int]       =   is_training
           lowerCAmelCase					:	int       =   use_labels
           lowerCAmelCase					:	List[Any]       =   vocab_size
           lowerCAmelCase					:	str       =   hidden_size
           lowerCAmelCase					:	List[Any]       =   num_hidden_layers
           lowerCAmelCase					:	Any       =   num_attention_heads
           lowerCAmelCase					:	List[Any]       =   intermediate_size
           lowerCAmelCase					:	Optional[int]       =   hidden_act
           lowerCAmelCase					:	Dict       =   hidden_dropout_prob
           lowerCAmelCase					:	Optional[int]       =   attention_probs_dropout_prob
           lowerCAmelCase					:	List[Any]       =   max_position_embeddings
           lowerCAmelCase					:	Union[str, Any]       =   eos_token_id
           lowerCAmelCase					:	Dict       =   pad_token_id
           lowerCAmelCase					:	Optional[Any]       =   bos_token_id
           lowerCAmelCase					:	List[str]       =   initializer_range






     def      lowerCamelCase__     (	self  :					Dict				):
           lowerCAmelCase					:	List[Any]       =   np.clip(ids_tensor([self.batch_size, self.seq_length - 1]					,				self.vocab_size				)					,				3					,				self.vocab_size				)
           lowerCAmelCase					:	str       =   np.concatenate((input_ids, 2 * np.ones((self.batch_size, 1)					,				dtype=np.intaa				))					,				-1				)

           lowerCAmelCase					:	Tuple       =   shift_tokens_right(UpperCamelCase_					,				1					,				2				)

           lowerCAmelCase					:	Union[str, Any]       =   BlenderbotConfig(
               vocab_size=self.vocab_size					,				d_model=self.hidden_size					,				encoder_layers=self.num_hidden_layers					,				decoder_layers=self.num_hidden_layers					,				encoder_attention_heads=self.num_attention_heads					,				decoder_attention_heads=self.num_attention_heads					,				encoder_ffn_dim=self.intermediate_size					,				decoder_ffn_dim=self.intermediate_size					,				dropout=self.hidden_dropout_prob					,				attention_dropout=self.attention_probs_dropout_prob					,				max_position_embeddings=self.max_position_embeddings					,				eos_token_id=self.eos_token_id					,				bos_token_id=self.bos_token_id					,				pad_token_id=self.pad_token_id					,				initializer_range=self.initializer_range					,				use_cache=UpperCamelCase_					,				)
           lowerCAmelCase					:	Union[str, Any]       =   prepare_blenderbot_inputs_dict(UpperCamelCase_					,				UpperCamelCase_					,				UpperCamelCase_				)
           return config, inputs_dict






     def      lowerCamelCase__     (	self  :					str				):
           lowerCAmelCase,      lowerCAmelCase					:	Optional[int]       =   self.prepare_config_and_inputs()
           return config, inputs_dict






     def      lowerCamelCase__     (	self  :					List[str]					,				UpperCamelCase_  :					List[str]					,				UpperCamelCase_  :					str					,				UpperCamelCase_  :					Tuple				):
           lowerCAmelCase					:	int       =   2_0
           lowerCAmelCase					:	Tuple       =   model_class_name(UpperCamelCase_				)

           lowerCAmelCase					:	Optional[Any]       =   model.encode(inputs_dict['''input_ids''']				)

           lowerCAmelCase,      lowerCAmelCase					:	str       =   (
               inputs_dict['''decoder_input_ids'''],
               inputs_dict['''decoder_attention_mask'''],
           )

           lowerCAmelCase					:	str       =   model.init_cache(decoder_input_ids.shape[0]					,				UpperCamelCase_					,				UpperCamelCase_				)
           lowerCAmelCase					:	Union[str, Any]       =   jnp.ones((decoder_input_ids.shape[0], max_decoder_length)					,				dtype='''i4'''				)

           lowerCAmelCase					:	Tuple       =   jnp.broadcast_to(
               jnp.arange(decoder_input_ids.shape[-1] - 1				)[None, :]					,				(decoder_input_ids.shape[0], decoder_input_ids.shape[-1] - 1)					,				)
           lowerCAmelCase					:	List[Any]       =   model.decode(
               decoder_input_ids[:, :-1]					,				UpperCamelCase_					,				decoder_attention_mask=UpperCamelCase_					,				past_key_values=UpperCamelCase_					,				decoder_position_ids=UpperCamelCase_					,				)

           lowerCAmelCase					:	Any       =   jnp.array(decoder_input_ids.shape[0] * [[decoder_input_ids.shape[-1] - 1]]					,				dtype='''i4'''				)
           lowerCAmelCase					:	List[str]       =   model.decode(
               decoder_input_ids[:, -1:]					,				UpperCamelCase_					,				decoder_attention_mask=UpperCamelCase_					,				past_key_values=outputs_cache.past_key_values					,				decoder_position_ids=UpperCamelCase_					,				)

           lowerCAmelCase					:	Union[str, Any]       =   model.decode(UpperCamelCase_					,				UpperCamelCase_				)

           lowerCAmelCase					:	int       =   np.max(np.abs((outputs_cache_next[0][:, -1, :5] - outputs[0][:, -1, :5])				)				)
           self.parent.assertTrue(diff < 1E-3					,				msg=F'''Max diff is {diff}'''				)






     def      lowerCamelCase__     (	self  :					Union[str, Any]					,				UpperCamelCase_  :					Any					,				UpperCamelCase_  :					Any					,				UpperCamelCase_  :					List[str]				):
           lowerCAmelCase					:	Optional[int]       =   2_0
           lowerCAmelCase					:	List[Any]       =   model_class_name(UpperCamelCase_				)

           lowerCAmelCase					:	Union[str, Any]       =   model.encode(inputs_dict['''input_ids''']				)

           lowerCAmelCase,      lowerCAmelCase					:	Optional[int]       =   (
               inputs_dict['''decoder_input_ids'''],
               inputs_dict['''decoder_attention_mask'''],
           )

           lowerCAmelCase					:	str       =   jnp.concatenate(
               [
                   decoder_attention_mask,
                   jnp.zeros((decoder_attention_mask.shape[0], max_decoder_length - decoder_attention_mask.shape[1])				),
               ]					,				axis=-1					,				)

           lowerCAmelCase					:	Union[str, Any]       =   model.init_cache(decoder_input_ids.shape[0]					,				UpperCamelCase_					,				UpperCamelCase_				)
           lowerCAmelCase					:	str       =   jnp.broadcast_to(
               jnp.arange(decoder_input_ids.shape[-1] - 1				)[None, :]					,				(decoder_input_ids.shape[0], decoder_input_ids.shape[-1] - 1)					,				)

           lowerCAmelCase					:	Dict       =   model.decode(
               decoder_input_ids[:, :-1]					,				UpperCamelCase_					,				decoder_attention_mask=UpperCamelCase_					,				past_key_values=UpperCamelCase_					,				decoder_position_ids=UpperCamelCase_					,				)
           lowerCAmelCase					:	Any       =   jnp.array(decoder_input_ids.shape[0] * [[decoder_input_ids.shape[-1] - 1]]					,				dtype='''i4'''				)
           lowerCAmelCase					:	Union[str, Any]       =   model.decode(
               decoder_input_ids[:, -1:]					,				UpperCamelCase_					,				past_key_values=outputs_cache.past_key_values					,				decoder_attention_mask=UpperCamelCase_					,				decoder_position_ids=UpperCamelCase_					,				)

           lowerCAmelCase					:	Dict       =   model.decode(UpperCamelCase_					,				UpperCamelCase_					,				decoder_attention_mask=UpperCamelCase_				)

           lowerCAmelCase					:	Any       =   np.max(np.abs((outputs_cache_next[0][:, -1, :5] - outputs[0][:, -1, :5])				)				)
           self.parent.assertTrue(diff < 1E-3					,				msg=F'''Max diff is {diff}'''				)



@require_flax
class 		snake_case_(       unittest.TestCase			):
     __UpperCamelCase  =					99






     def      lowerCamelCase__     (	self  :					str				):
           lowerCAmelCase					:	List[Any]       =   np.array(
               [
                   [7_1, 8_2, 1_8, 3_3, 4_6, 9_1, 2],
                   [6_8, 3_4, 2_6, 5_8, 3_0, 8_2, 2],
                   [5, 9_7, 1_7, 3_9, 9_4, 4_0, 2],
                   [7_6, 8_3, 9_4, 2_5, 7_0, 7_8, 2],
                   [8_7, 5_9, 4_1, 3_5, 4_8, 6_6, 2],
                   [5_5, 1_3, 1_6, 5_8, 5, 2, 1],  # note padding
                   [6_4, 2_7, 3_1, 5_1, 1_2, 7_5, 2],
                   [5_2, 6_4, 8_6, 1_7, 8_3, 3_9, 2],
                   [4_8, 6_1, 9, 2_4, 7_1, 8_2, 2],
                   [2_6, 1, 6_0, 4_8, 2_2, 1_3, 2],
                   [2_1, 5, 6_2, 2_8, 1_4, 7_6, 2],
                   [4_5, 9_8, 3_7, 8_6, 5_9, 4_8, 2],
                   [7_0, 7_0, 5_0, 9, 2_8, 0, 2],
               ]					,				dtype=np.intaa					,				)

           lowerCAmelCase					:	List[Any]       =   input_ids.shape[0]
           lowerCAmelCase					:	Optional[Any]       =   BlenderbotConfig(
               vocab_size=self.vocab_size					,				d_model=2_4					,				encoder_layers=2					,				decoder_layers=2					,				encoder_attention_heads=2					,				decoder_attention_heads=2					,				encoder_ffn_dim=3_2					,				decoder_ffn_dim=3_2					,				max_position_embeddings=4_8					,				eos_token_id=2					,				pad_token_id=1					,				bos_token_id=0					,				)
           return config, input_ids, batch_size






     def      lowerCamelCase__     (	self  :					List[str]				):
           lowerCAmelCase,      lowerCAmelCase,      lowerCAmelCase					:	Any       =   self._get_config_and_data()
           lowerCAmelCase					:	Any       =   FlaxBlenderbotForConditionalGeneration(UpperCamelCase_				)
           lowerCAmelCase					:	Optional[int]       =   lm_model(input_ids=UpperCamelCase_				)
           lowerCAmelCase					:	Tuple       =   (batch_size, input_ids.shape[1], config.vocab_size)
           self.assertEqual(outputs['''logits'''].shape					,				UpperCamelCase_				)






     def      lowerCamelCase__     (	self  :					Any				):
           lowerCAmelCase					:	Any       =   BlenderbotConfig(
               vocab_size=self.vocab_size					,				d_model=1_4					,				encoder_layers=2					,				decoder_layers=2					,				encoder_attention_heads=2					,				decoder_attention_heads=2					,				encoder_ffn_dim=8					,				decoder_ffn_dim=8					,				max_position_embeddings=4_8					,				)
           lowerCAmelCase					:	int       =   FlaxBlenderbotForConditionalGeneration(UpperCamelCase_				)
           lowerCAmelCase					:	Optional[Any]       =   np.array([[7_1, 8_2, 1_8, 3_3, 4_6, 9_1, 2], [6_8, 3_4, 2_6, 5_8, 3_0, 2, 1]]					,				dtype=np.intaa				)
           lowerCAmelCase					:	List[str]       =   np.array([[8_2, 7_1, 8_2, 1_8, 2], [5_8, 6_8, 2, 1, 1]]					,				dtype=np.intaa				)
           lowerCAmelCase					:	List[Any]       =   lm_model(input_ids=UpperCamelCase_					,				decoder_input_ids=UpperCamelCase_				)
           lowerCAmelCase					:	str       =   (*summary.shape, config.vocab_size)
           self.assertEqual(outputs['''logits'''].shape					,				UpperCamelCase_				)






     def      lowerCamelCase__     (	self  :					int				):
           lowerCAmelCase					:	Any       =   np.array([[7_1, 8_2, 1_8, 3_3, 2, 1, 1], [6_8, 3_4, 2_6, 5_8, 3_0, 8_2, 2]]					,				dtype=np.intaa				)
           lowerCAmelCase					:	Tuple       =   shift_tokens_right(UpperCamelCase_					,				1					,				2				)
           lowerCAmelCase					:	Optional[int]       =   np.equal(UpperCamelCase_					,				1				).astype(np.floataa				).sum()
           lowerCAmelCase					:	str       =   np.equal(UpperCamelCase_					,				1				).astype(np.floataa				).sum()
           self.assertEqual(shifted.shape					,				input_ids.shape				)
           self.assertEqual(UpperCamelCase_					,				n_pad_before - 1				)
           self.assertTrue(np.equal(shifted[:, 0]					,				2				).all()				)



@require_flax
class 		snake_case_(       a__							,					unittest.TestCase							,					a__			):
     __UpperCamelCase  =					True
     __UpperCamelCase  =					(
         (
             FlaxBlenderbotModel,
             FlaxBlenderbotForConditionalGeneration,
         )
         if is_flax_available()
         else ()
     )
     __UpperCamelCase  =					(FlaxBlenderbotForConditionalGeneration,) if is_flax_available() else ()






     def      lowerCamelCase__     (	self  :					Dict				):
           lowerCAmelCase					:	Any       =   FlaxBlenderbotModelTester(self				)






     def      lowerCamelCase__     (	self  :					Tuple				):
           lowerCAmelCase,      lowerCAmelCase					:	List[str]       =   self.model_tester.prepare_config_and_inputs()
           for model_class in self.all_model_classes:
                 self.model_tester.check_use_cache_forward(UpperCamelCase_					,				UpperCamelCase_					,				UpperCamelCase_				)






     def      lowerCamelCase__     (	self  :					List[str]				):
           lowerCAmelCase,      lowerCAmelCase					:	Union[str, Any]       =   self.model_tester.prepare_config_and_inputs()
           for model_class in self.all_model_classes:
                 self.model_tester.check_use_cache_forward_with_attn_mask(UpperCamelCase_					,				UpperCamelCase_					,				UpperCamelCase_				)






     def      lowerCamelCase__     (	self  :					Tuple				):
           lowerCAmelCase,      lowerCAmelCase					:	str       =   self.model_tester.prepare_config_and_inputs_for_common()

           for model_class in self.all_model_classes:
                 with self.subTest(model_class.__name__				):
                       lowerCAmelCase					:	Optional[int]       =   self._prepare_for_class(UpperCamelCase_					,				UpperCamelCase_				)
                       lowerCAmelCase					:	Optional[Any]       =   model_class(UpperCamelCase_				)

                       @jax.jit
                       def encode_jitted(UpperCamelCase_  :					List[str]					,				UpperCamelCase_  :					Optional[Any]=None					,				**UpperCamelCase_  :					List[str]				):
                             return model.encode(input_ids=UpperCamelCase_					,				attention_mask=UpperCamelCase_				)

                       with self.subTest('''JIT Enabled'''				):
                             lowerCAmelCase					:	List[str]       =   encode_jitted(**UpperCamelCase_				).to_tuple()

                       with self.subTest('''JIT Disabled'''				):
                             with jax.disable_jit():
                                   lowerCAmelCase					:	int       =   encode_jitted(**UpperCamelCase_				).to_tuple()

                       self.assertEqual(len(UpperCamelCase_				)					,				len(UpperCamelCase_				)				)
                       for jitted_output, output in zip(UpperCamelCase_					,				UpperCamelCase_				):
                             self.assertEqual(jitted_output.shape					,				output.shape				)






     def      lowerCamelCase__     (	self  :					Union[str, Any]				):
           lowerCAmelCase,      lowerCAmelCase					:	Any       =   self.model_tester.prepare_config_and_inputs_for_common()

           for model_class in self.all_model_classes:
                 with self.subTest(model_class.__name__				):
                       lowerCAmelCase					:	Tuple       =   model_class(UpperCamelCase_				)
                       lowerCAmelCase					:	int       =   model.encode(inputs_dict['''input_ids''']					,				inputs_dict['''attention_mask''']				)

                       lowerCAmelCase					:	List[Any]       =   {
                           '''decoder_input_ids''': inputs_dict['''decoder_input_ids'''],
                           '''decoder_attention_mask''': inputs_dict['''decoder_attention_mask'''],
                           '''encoder_outputs''': encoder_outputs,
                       }

                       @jax.jit
                       def decode_jitted(UpperCamelCase_  :					Union[str, Any]					,				UpperCamelCase_  :					Dict					,				UpperCamelCase_  :					int				):
                             return model.decode(
                                 decoder_input_ids=UpperCamelCase_					,				decoder_attention_mask=UpperCamelCase_					,				encoder_outputs=UpperCamelCase_					,				)

                       with self.subTest('''JIT Enabled'''				):
                             lowerCAmelCase					:	str       =   decode_jitted(**UpperCamelCase_				).to_tuple()

                       with self.subTest('''JIT Disabled'''				):
                             with jax.disable_jit():
                                   lowerCAmelCase					:	Union[str, Any]       =   decode_jitted(**UpperCamelCase_				).to_tuple()

                       self.assertEqual(len(UpperCamelCase_				)					,				len(UpperCamelCase_				)				)
                       for jitted_output, output in zip(UpperCamelCase_					,				UpperCamelCase_				):
                             self.assertEqual(jitted_output.shape					,				output.shape				)






     @slow
     def      lowerCamelCase__     (	self  :					Optional[int]				):
           for model_class_name in self.all_model_classes:
                 lowerCAmelCase					:	Optional[int]       =   model_class_name.from_pretrained('''facebook/blenderbot-400M-distill'''				)
                 # FlaxBlenderbotForSequenceClassification expects eos token in input_ids
                 lowerCAmelCase					:	int       =   np.ones((1, 1)				) * model.config.eos_token_id
                 lowerCAmelCase					:	List[str]       =   model(UpperCamelCase_				)
                 self.assertIsNotNone(UpperCamelCase_				)






     @unittest.skipUnless(jax_device != '''cpu'''					,				'''3B test too slow on CPU.'''				)
     @slow
     def      lowerCamelCase__     (	self  :					Union[str, Any]				):
           lowerCAmelCase					:	Dict       =   {'''num_beams''': 1, '''early_stopping''': True, '''min_length''': 1_5, '''max_length''': 2_5}
           lowerCAmelCase					:	List[str]       =   {'''skip_special_tokens''': True, '''clean_up_tokenization_spaces''': True}

           lowerCAmelCase					:	Tuple       =   FlaxBlenderbotForConditionalGeneration.from_pretrained('''facebook/blenderbot-3B'''					,				from_pt=UpperCamelCase_				)
           lowerCAmelCase					:	Union[str, Any]       =   BlenderbotTokenizer.from_pretrained('''facebook/blenderbot-3B'''				)

           lowerCAmelCase					:	List[Any]       =   ['''Sam''']
           lowerCAmelCase					:	str       =   tokenizer(UpperCamelCase_					,				return_tensors='''jax'''				)

           lowerCAmelCase					:	Union[str, Any]       =   model.generate(**UpperCamelCase_					,				**UpperCamelCase_				)
           lowerCAmelCase					:	Tuple       =   '''Sam is a great name. It means "sun" in Gaelic.'''

           lowerCAmelCase					:	Union[str, Any]       =   tokenizer.batch_decode(UpperCamelCase_					,				**UpperCamelCase_				)
           assert generated_txt[0].strip() == tgt_text


