"""simple docstring"""







import json
import os
import shutil
import tempfile
import unittest

from transformers import is_speech_available, is_torch_available
from transformers.models.speechta import SpeechTaTokenizer
from transformers.testing_utils import get_tests_dir, require_torch
from transformers.utils import FEATURE_EXTRACTOR_NAME


if is_speech_available() and is_torch_available():
     from transformers import SpeechTaFeatureExtractor, SpeechTaProcessor

     from .test_feature_extraction_speechta import floats_list


_SCREAMING_SNAKE_CASE	:		Optional[int]   =   get_tests_dir('''fixtures/test_sentencepiece_bpe_char.model''')






@require_torch
class      _SCREAMING_SNAKE_CASE							(			unittest.TestCase				):



   '''simple docstring'''



   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					tempfile.mkdtemp()

      __lowerCamelCase    		=					SpeechTaTokenizer(_SCREAMING_SNAKE_CASE	)
      tokenizer.save_pretrained(self.tmpdirname	)

      __lowerCamelCase    		=					{
          'feature_size': 1,
          'padding_value': 0.0,
          'sampling_rate': 16000,
          'do_normalize': False,
          'num_mel_bins': 80,
          'hop_length': 16,
          'win_length': 64,
          'win_function': 'hann_window',
          'fmin': 80,
          'fmax': 7600,
          'mel_floor': 1E-1_0,
          'reduction_factor': 2,
          'return_attention_mask': True,
      }

      __lowerCamelCase    		=					os.path.join(self.tmpdirname ,				_SCREAMING_SNAKE_CASE	)
      with open(self.feature_extraction_file ,				'w' ,				encoding='utf-8'	) as fp:
         fp.write(json.dumps(_SCREAMING_SNAKE_CASE	) + '\n'	)







   def    _A				(	self ,				**_SCREAMING_SNAKE_CASE	):


      '''simple docstring'''

      return SpeechTaTokenizer.from_pretrained(self.tmpdirname ,				**_SCREAMING_SNAKE_CASE	)







   def    _A				(	self ,				**_SCREAMING_SNAKE_CASE	):


      '''simple docstring'''

      return SpeechTaFeatureExtractor.from_pretrained(self.tmpdirname ,				**_SCREAMING_SNAKE_CASE	)







   def    _A				(	self	):


      '''simple docstring'''

      shutil.rmtree(self.tmpdirname	)







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					self.get_tokenizer()
      __lowerCamelCase    		=					self.get_feature_extractor()

      __lowerCamelCase    		=					SpeechTaProcessor(tokenizer=_SCREAMING_SNAKE_CASE ,				feature_extractor=_SCREAMING_SNAKE_CASE	)

      processor.save_pretrained(self.tmpdirname	)
      __lowerCamelCase    		=					SpeechTaProcessor.from_pretrained(self.tmpdirname	)

      self.assertEqual(processor.tokenizer.get_vocab() ,				tokenizer.get_vocab()	)
      self.assertIsInstance(processor.tokenizer ,				_SCREAMING_SNAKE_CASE	)

      self.assertEqual(processor.feature_extractor.to_json_string() ,				feature_extractor.to_json_string()	)
      self.assertIsInstance(processor.feature_extractor ,				_SCREAMING_SNAKE_CASE	)







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					SpeechTaProcessor(tokenizer=self.get_tokenizer() ,				feature_extractor=self.get_feature_extractor()	)
      processor.save_pretrained(self.tmpdirname	)

      __lowerCamelCase    		=					self.get_tokenizer(bos_token='(BOS)' ,				eos_token='(EOS)'	)
      __lowerCamelCase    		=					self.get_feature_extractor(do_normalize=_SCREAMING_SNAKE_CASE ,				padding_value=1.0	)

      __lowerCamelCase    		=					SpeechTaProcessor.from_pretrained(
          self.tmpdirname ,				bos_token='(BOS)' ,				eos_token='(EOS)' ,				do_normalize=_SCREAMING_SNAKE_CASE ,				padding_value=1.0	)

      self.assertEqual(processor.tokenizer.get_vocab() ,				tokenizer_add_kwargs.get_vocab()	)
      self.assertIsInstance(processor.tokenizer ,				_SCREAMING_SNAKE_CASE	)

      self.assertEqual(processor.feature_extractor.to_json_string() ,				feature_extractor_add_kwargs.to_json_string()	)
      self.assertIsInstance(processor.feature_extractor ,				_SCREAMING_SNAKE_CASE	)







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					self.get_feature_extractor()
      __lowerCamelCase    		=					self.get_tokenizer()

      __lowerCamelCase    		=					SpeechTaProcessor(tokenizer=_SCREAMING_SNAKE_CASE ,				feature_extractor=_SCREAMING_SNAKE_CASE	)

      __lowerCamelCase    		=					floats_list((3, 1000)	)

      __lowerCamelCase    		=					feature_extractor(audio=_SCREAMING_SNAKE_CASE ,				return_tensors='np'	)
      __lowerCamelCase    		=					processor(audio=_SCREAMING_SNAKE_CASE ,				return_tensors='np'	)

      for key in input_feat_extract.keys():
         self.assertAlmostEqual(input_feat_extract[key].sum() ,				input_processor[key].sum() ,				delta=1E-2	)







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					self.get_feature_extractor()
      __lowerCamelCase    		=					self.get_tokenizer()

      __lowerCamelCase    		=					SpeechTaProcessor(tokenizer=_SCREAMING_SNAKE_CASE ,				feature_extractor=_SCREAMING_SNAKE_CASE	)

      __lowerCamelCase    		=					floats_list((3, 1000)	)

      __lowerCamelCase    		=					feature_extractor(audio_target=_SCREAMING_SNAKE_CASE ,				return_tensors='np'	)
      __lowerCamelCase    		=					processor(audio_target=_SCREAMING_SNAKE_CASE ,				return_tensors='np'	)

      for key in input_feat_extract.keys():
         self.assertAlmostEqual(input_feat_extract[key].sum() ,				input_processor[key].sum() ,				delta=1E-2	)







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					self.get_feature_extractor()
      __lowerCamelCase    		=					self.get_tokenizer()

      __lowerCamelCase    		=					SpeechTaProcessor(tokenizer=_SCREAMING_SNAKE_CASE ,				feature_extractor=_SCREAMING_SNAKE_CASE	)

      __lowerCamelCase    		=					'This is a test string'

      __lowerCamelCase    		=					processor(text=_SCREAMING_SNAKE_CASE	)
      __lowerCamelCase    		=					tokenizer(_SCREAMING_SNAKE_CASE	)

      for key in encoded_tok.keys():
         self.assertListEqual(encoded_tok[key] ,				encoded_processor[key]	)







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					self.get_feature_extractor()
      __lowerCamelCase    		=					self.get_tokenizer()

      __lowerCamelCase    		=					SpeechTaProcessor(tokenizer=_SCREAMING_SNAKE_CASE ,				feature_extractor=_SCREAMING_SNAKE_CASE	)

      __lowerCamelCase    		=					'This is a test string'

      __lowerCamelCase    		=					processor(text_target=_SCREAMING_SNAKE_CASE	)
      __lowerCamelCase    		=					tokenizer(_SCREAMING_SNAKE_CASE	)

      for key in encoded_tok.keys():
         self.assertListEqual(encoded_tok[key] ,				encoded_processor[key]	)







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					self.get_feature_extractor()
      __lowerCamelCase    		=					self.get_tokenizer()

      __lowerCamelCase    		=					SpeechTaProcessor(tokenizer=_SCREAMING_SNAKE_CASE ,				feature_extractor=_SCREAMING_SNAKE_CASE	)

      __lowerCamelCase    		=					[[1, 4, 5, 8, 1, 0, 8], [3, 4, 3, 1, 1, 8, 9]]

      __lowerCamelCase    		=					processor.batch_decode(_SCREAMING_SNAKE_CASE	)
      __lowerCamelCase    		=					tokenizer.batch_decode(_SCREAMING_SNAKE_CASE	)

      self.assertListEqual(_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE	)







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					self.get_feature_extractor()
      __lowerCamelCase    		=					self.get_tokenizer()

      __lowerCamelCase    		=					SpeechTaProcessor(tokenizer=_SCREAMING_SNAKE_CASE ,				feature_extractor=_SCREAMING_SNAKE_CASE	)

      self.assertListEqual(
          processor.model_input_names ,				feature_extractor.model_input_names ,				msg='`processor` and `feature_extractor` model input names do not match' ,				)







"""simple docstring"""







from __future__ import annotations

import unittest

from transformers import CTRLConfig, 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, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_tf_available():
     import tensorflow as tf

     from transformers.models.ctrl.modeling_tf_ctrl import (
         TF_CTRL_PRETRAINED_MODEL_ARCHIVE_LIST,
         TFCTRLForSequenceClassification,
         TFCTRLLMHeadModel,
         TFCTRLModel,
     )






class      _SCREAMING_SNAKE_CASE							(			UpperCAmelCase				):



   '''simple docstring'''



   def __init__(	self ,				_SCREAMING_SNAKE_CASE ,				):


      '''simple docstring'''

      __lowerCamelCase    		=					parent
      __lowerCamelCase    		=					13
      __lowerCamelCase    		=					7
      __lowerCamelCase    		=					True
      __lowerCamelCase    		=					True
      __lowerCamelCase    		=					True
      __lowerCamelCase    		=					True
      __lowerCamelCase    		=					True
      __lowerCamelCase    		=					99
      __lowerCamelCase    		=					32
      __lowerCamelCase    		=					2
      __lowerCamelCase    		=					4
      __lowerCamelCase    		=					37
      __lowerCamelCase    		=					'gelu'
      __lowerCamelCase    		=					0.1
      __lowerCamelCase    		=					0.1
      __lowerCamelCase    		=					512
      __lowerCamelCase    		=					16
      __lowerCamelCase    		=					2
      __lowerCamelCase    		=					0.02
      __lowerCamelCase    		=					3
      __lowerCamelCase    		=					4
      __lowerCamelCase    		=					None
      __lowerCamelCase    		=					self.vocab_size - 1







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					ids_tensor([self.batch_size, self.seq_length] ,				self.vocab_size	)

      __lowerCamelCase    		=					None
      if self.use_input_mask:
         __lowerCamelCase    		=					random_attention_mask([self.batch_size, self.seq_length]	)

      __lowerCamelCase    		=					None
      if self.use_token_type_ids:
         __lowerCamelCase    		=					ids_tensor([self.batch_size, self.seq_length] ,				self.type_vocab_size	)

      __lowerCamelCase    		=					None
      if self.use_mc_token_ids:
         __lowerCamelCase    		=					ids_tensor([self.batch_size, self.num_choices] ,				self.seq_length	)

      __lowerCamelCase    		=					None
      __lowerCamelCase    		=					None
      __lowerCamelCase    		=					None
      if self.use_labels:
         __lowerCamelCase    		=					ids_tensor([self.batch_size] ,				self.type_sequence_label_size	)
         __lowerCamelCase    		=					ids_tensor([self.batch_size, self.seq_length] ,				self.num_labels	)
         __lowerCamelCase    		=					ids_tensor([self.batch_size] ,				self.num_choices	)

      __lowerCamelCase    		=					CTRLConfig(
          vocab_size=self.vocab_size ,				n_embd=self.hidden_size ,				n_layer=self.num_hidden_layers ,				n_head=self.num_attention_heads ,				n_positions=self.max_position_embeddings ,				pad_token_id=self.pad_token_id ,				)

      __lowerCamelCase    		=					ids_tensor([self.num_hidden_layers, self.num_attention_heads] ,				2	)

      return (
          config,
          input_ids,
          input_mask,
          head_mask,
          token_type_ids,
          mc_token_ids,
          sequence_labels,
          token_labels,
          choice_labels,
      )







   def    _A				(	self ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				*_SCREAMING_SNAKE_CASE	):


      '''simple docstring'''

      __lowerCamelCase    		=					TFCTRLModel(config=_SCREAMING_SNAKE_CASE	)
      __lowerCamelCase    		=					{'input_ids': input_ids, 'attention_mask': input_mask, 'token_type_ids': token_type_ids}
      __lowerCamelCase    		=					model(_SCREAMING_SNAKE_CASE	)

      __lowerCamelCase    		=					[input_ids, None, input_mask]  # None is the input for 'past'
      __lowerCamelCase    		=					model(_SCREAMING_SNAKE_CASE	)

      __lowerCamelCase    		=					model(_SCREAMING_SNAKE_CASE	)

      self.parent.assertEqual(result.last_hidden_state.shape ,				(self.batch_size, self.seq_length, self.hidden_size)	)







   def    _A				(	self ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				*_SCREAMING_SNAKE_CASE	):


      '''simple docstring'''

      __lowerCamelCase    		=					TFCTRLLMHeadModel(config=_SCREAMING_SNAKE_CASE	)
      __lowerCamelCase    		=					{'input_ids': input_ids, 'attention_mask': input_mask, 'token_type_ids': token_type_ids}
      __lowerCamelCase    		=					model(_SCREAMING_SNAKE_CASE	)
      self.parent.assertEqual(result.logits.shape ,				(self.batch_size, self.seq_length, self.vocab_size)	)







   def    _A				(	self ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				*_SCREAMING_SNAKE_CASE	):


      '''simple docstring'''

      __lowerCamelCase    		=					self.num_labels
      __lowerCamelCase    		=					ids_tensor([self.batch_size] ,				self.type_sequence_label_size	)
      __lowerCamelCase    		=					{
          'input_ids': input_ids,
          'token_type_ids': token_type_ids,
          'labels': sequence_labels,
      }
      __lowerCamelCase    		=					TFCTRLForSequenceClassification(_SCREAMING_SNAKE_CASE	)
      __lowerCamelCase    		=					model(_SCREAMING_SNAKE_CASE	)
      self.parent.assertEqual(result.logits.shape ,				(self.batch_size, self.num_labels)	)







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					self.prepare_config_and_inputs()

      (
          (
          __lowerCamelCase
      )		,(
          __lowerCamelCase
      )		,(
          __lowerCamelCase
      )		,(
          __lowerCamelCase
      )		,(
          __lowerCamelCase
      )		,(
          __lowerCamelCase
      )		,(
          __lowerCamelCase
      )		,(
          __lowerCamelCase
      )		,(
          __lowerCamelCase
      )		,
      )    		=					config_and_inputs

      __lowerCamelCase    		=					{'input_ids': input_ids, 'token_type_ids': token_type_ids, 'attention_mask': input_mask}
      return config, inputs_dict






@require_tf
class      _SCREAMING_SNAKE_CASE							(			UpperCAmelCase    ,				UpperCAmelCase    ,				unittest.TestCase				):



   '''simple docstring'''



   __UpperCAmelCase	:							Union[str, Any]    =    (TFCTRLModel, TFCTRLLMHeadModel, TFCTRLForSequenceClassification) if is_tf_available() else ()
   __UpperCAmelCase	:							List[str]    =    (TFCTRLLMHeadModel,) if is_tf_available() else ()
   __UpperCAmelCase	:							Dict    =    (
       {
           "feature-extraction": TFCTRLModel,
           "text-classification": TFCTRLForSequenceClassification,
           "text-generation": TFCTRLLMHeadModel,
           "zero-shot": TFCTRLForSequenceClassification,
       }
       if is_tf_available()
       else {}
   )
   __UpperCAmelCase	:							str    =    False
   __UpperCAmelCase	:							Tuple    =    False







   def    _A				(	self ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE	):


      '''simple docstring'''

      if pipeline_test_casse_name == "ZeroShotClassificationPipelineTests":
         # Get `tokenizer does not have a padding token` error for both fast/slow tokenizers.
         # `CTRLConfig` was never used in pipeline tests, either because of a missing checkpoint or because a tiny
         # config could not be created.
         return True

      return False







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					TFCTRLModelTester(self	)
      __lowerCamelCase    		=					ConfigTester(self ,				config_class=_SCREAMING_SNAKE_CASE ,				n_embd=37	)







   def    _A				(	self	):


      '''simple docstring'''

      self.config_tester.run_common_tests()







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_ctrl_model(*_SCREAMING_SNAKE_CASE	)







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_ctrl_lm_head(*_SCREAMING_SNAKE_CASE	)







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_ctrl_for_sequence_classification(*_SCREAMING_SNAKE_CASE	)







   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase		,__lowerCamelCase    		=					self.model_tester.prepare_config_and_inputs_for_common()
      __lowerCamelCase    		=					[TFCTRLLMHeadModel]
      __lowerCamelCase    		=					[TFCTRLForSequenceClassification]

      for model_class in self.all_model_classes:
         __lowerCamelCase    		=					model_class(_SCREAMING_SNAKE_CASE	)
         model.build()  # may be needed for the get_bias() call below
         assert isinstance(model.get_input_embeddings() ,				tf.keras.layers.Layer	)

         if model_class in list_lm_models:
            __lowerCamelCase    		=					model.get_output_embeddings()
            assert isinstance(_SCREAMING_SNAKE_CASE ,				tf.keras.layers.Layer	)
            __lowerCamelCase    		=					model.get_bias()
            assert isinstance(_SCREAMING_SNAKE_CASE ,				_SCREAMING_SNAKE_CASE	)
            for k, v in name.items():
               assert isinstance(_SCREAMING_SNAKE_CASE ,				tf.Variable	)
         elif model_class in list_other_models_with_output_ebd:
            __lowerCamelCase    		=					model.get_output_embeddings()
            assert isinstance(_SCREAMING_SNAKE_CASE ,				tf.keras.layers.Layer	)
            __lowerCamelCase    		=					model.get_bias()
            assert name is None
         else:
            __lowerCamelCase    		=					model.get_output_embeddings()
            assert x is None
            __lowerCamelCase    		=					model.get_bias()
            assert name is None







   @slow
   def    _A				(	self	):


      '''simple docstring'''

      for model_name in TF_CTRL_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
         __lowerCamelCase    		=					TFCTRLModel.from_pretrained(_SCREAMING_SNAKE_CASE	)
         self.assertIsNotNone(_SCREAMING_SNAKE_CASE	)






@require_tf
class      _SCREAMING_SNAKE_CASE							(			unittest.TestCase				):



   '''simple docstring'''



   @slow
   def    _A				(	self	):


      '''simple docstring'''

      __lowerCamelCase    		=					TFCTRLLMHeadModel.from_pretrained('ctrl'	)
      __lowerCamelCase    		=					tf.convert_to_tensor([[11859, 0, 1611, 8]] ,				dtype=tf.intaa	)  # Legal the president is
      __lowerCamelCase    		=					[
          11859,
          0,
          1611,
          8,
          5,
          150,
          26449,
          2,
          19,
          348,
          469,
          3,
          2595,
          48,
          20740,
          246533,
          246533,
          19,
          30,
          5,
      ]  # Legal the president is a good guy and I don't want to lose my job. \n \n I have a

      __lowerCamelCase    		=					model.generate(_SCREAMING_SNAKE_CASE ,				do_sample=_SCREAMING_SNAKE_CASE	)
      self.assertListEqual(output_ids[0].numpy().tolist() ,				_SCREAMING_SNAKE_CASE	)






