




'''simple docstring'''






from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_torch_available,
)


A_ 			=		{
    "configuration_unispeech_sat": ["UNISPEECH_SAT_PRETRAINED_CONFIG_ARCHIVE_MAP", "UniSpeechSatConfig"],
}

try:
      if not is_torch_available():
            raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
      pass
else:
      A_ 			=		[
          "UNISPEECH_SAT_PRETRAINED_MODEL_ARCHIVE_LIST",
          "UniSpeechSatForAudioFrameClassification",
          "UniSpeechSatForCTC",
          "UniSpeechSatForPreTraining",
          "UniSpeechSatForSequenceClassification",
          "UniSpeechSatForXVector",
          "UniSpeechSatModel",
          "UniSpeechSatPreTrainedModel",
      ]

if TYPE_CHECKING:
      from .configuration_unispeech_sat import UNISPEECH_SAT_PRETRAINED_CONFIG_ARCHIVE_MAP, UniSpeechSatConfig

      try:
            if not is_torch_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .modeling_unispeech_sat import (
                UNISPEECH_SAT_PRETRAINED_MODEL_ARCHIVE_LIST,
                UniSpeechSatForAudioFrameClassification,
                UniSpeechSatForCTC,
                UniSpeechSatForPreTraining,
                UniSpeechSatForSequenceClassification,
                UniSpeechSatForXVector,
                UniSpeechSatModel,
                UniSpeechSatPreTrainedModel,
            )

else:
      import sys

      A_ 			=		_LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)






'''simple docstring'''






import shutil
import tempfile
import unittest
from pathlib import Path
from shutil import copyfile

from transformers import SpeechaTextTokenizer, is_speech_available
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_torch, require_torchaudio
from transformers.utils import FEATURE_EXTRACTOR_NAME

from .test_feature_extraction_speech_to_text import floats_list


if is_speech_available():
      from transformers import SpeechaTextFeatureExtractor, SpeechaTextProcessor


A_ 			=		get_tests_dir("fixtures/test_sentencepiece.model")






@require_torch
@require_torchaudio
@require_sentencepiece
class 					lowercase_			(	unittest.TestCase       ):





     def  _lowerCAmelCase			(    self    :				List[str] ):
           snake_case__					:      Dict  			=						tempfile.mkdtemp()

           snake_case__					:      Union[str, Any]  			=						['<s>', '<pad>', '</s>', '<unk>', '▁This', '▁is', '▁a', '▁t', 'est']
           snake_case__					:      str  			=						dict(zip(__lowerCamelCase    ,       range(len(__lowerCamelCase ) ) ) )
           snake_case__					:      Union[str, Any]  			=						Path(self.tmpdirname )
           save_json(__lowerCamelCase    ,       save_dir / VOCAB_FILES_NAMES['vocab_file'] )
           if not (save_dir / VOCAB_FILES_NAMES["spm_file"]).exists():
                 copyfile(__lowerCamelCase    ,       save_dir / VOCAB_FILES_NAMES['spm_file'] )

           snake_case__					:      Optional[Any]  			=						SpeechaTextTokenizer.from_pretrained(self.tmpdirname )
           tokenizer.save_pretrained(self.tmpdirname )

           snake_case__					:      str  			=						{
               'feature_size': 24,
               'num_mel_bins': 24,
               'padding_value': 0.0,
               'sampling_rate': 16000,
               'return_attention_mask': False,
               'do_normalize': True,
           }
           save_json(__lowerCamelCase    ,       save_dir / FEATURE_EXTRACTOR_NAME )





     def  _lowerCAmelCase			(    self    :				str    ,       **__lowerCamelCase    :				int ):
           return SpeechaTextTokenizer.from_pretrained(self.tmpdirname    ,       **__lowerCamelCase )





     def  _lowerCAmelCase			(    self    :				int    ,       **__lowerCamelCase    :				List[Any] ):
           return SpeechaTextFeatureExtractor.from_pretrained(self.tmpdirname    ,       **__lowerCamelCase )





     def  _lowerCAmelCase			(    self    :				List[Any] ):
           shutil.rmtree(self.tmpdirname )





     def  _lowerCAmelCase			(    self    :				Dict ):
           snake_case__					:      Dict  			=						self.get_tokenizer()
           snake_case__					:      Any  			=						self.get_feature_extractor()

           snake_case__					:      Tuple  			=						SpeechaTextProcessor(tokenizer=__lowerCamelCase    ,       feature_extractor=__lowerCamelCase )

           processor.save_pretrained(self.tmpdirname )
           snake_case__					:      Any  			=						SpeechaTextProcessor.from_pretrained(self.tmpdirname )

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

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





     def  _lowerCAmelCase			(    self    :				List[Any] ):
           snake_case__					:      Any  			=						SpeechaTextProcessor(
               tokenizer=self.get_tokenizer()    ,       feature_extractor=self.get_feature_extractor() )
           processor.save_pretrained(self.tmpdirname )

           snake_case__					:      Tuple  			=						self.get_tokenizer(bos_token='(BOS)'    ,       eos_token='(EOS)' )
           snake_case__					:      int  			=						self.get_feature_extractor(do_normalize=__lowerCamelCase    ,       padding_value=1.0 )

           snake_case__					:      Any  			=						SpeechaTextProcessor.from_pretrained(
               self.tmpdirname    ,       bos_token='(BOS)'    ,       eos_token='(EOS)'    ,       do_normalize=__lowerCamelCase    ,       padding_value=1.0 )

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

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





     def  _lowerCAmelCase			(    self    :				Any ):
           snake_case__					:      int  			=						self.get_feature_extractor()
           snake_case__					:      Optional[Any]  			=						self.get_tokenizer()

           snake_case__					:      List[str]  			=						SpeechaTextProcessor(tokenizer=__lowerCamelCase    ,       feature_extractor=__lowerCamelCase )

           snake_case__					:      List[str]  			=						floats_list((3, 1000) )

           snake_case__					:      Tuple  			=						feature_extractor(__lowerCamelCase    ,       return_tensors='np' )
           snake_case__					:      str  			=						processor(__lowerCamelCase    ,       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  _lowerCAmelCase			(    self    :				Dict ):
           snake_case__					:      Optional[int]  			=						self.get_feature_extractor()
           snake_case__					:      Optional[Any]  			=						self.get_tokenizer()

           snake_case__					:      Tuple  			=						SpeechaTextProcessor(tokenizer=__lowerCamelCase    ,       feature_extractor=__lowerCamelCase )

           snake_case__					:      Optional[int]  			=						'This is a test string'

           snake_case__					:      int  			=						processor(text=__lowerCamelCase )

           snake_case__					:      Tuple  			=						tokenizer(__lowerCamelCase )

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





     def  _lowerCAmelCase			(    self    :				int ):
           snake_case__					:      Optional[int]  			=						self.get_feature_extractor()
           snake_case__					:      int  			=						self.get_tokenizer()

           snake_case__					:      str  			=						SpeechaTextProcessor(tokenizer=__lowerCamelCase    ,       feature_extractor=__lowerCamelCase )

           snake_case__					:      str  			=						[[1, 4, 5, 8, 1, 0, 8], [3, 4, 3, 1, 1, 8, 9]]

           snake_case__					:      List[str]  			=						processor.batch_decode(__lowerCamelCase )
           snake_case__					:      Optional[int]  			=						tokenizer.batch_decode(__lowerCamelCase )

           self.assertListEqual(__lowerCamelCase    ,       __lowerCamelCase )





     def  _lowerCAmelCase			(    self    :				str ):
           snake_case__					:      List[str]  			=						self.get_feature_extractor()
           snake_case__					:      int  			=						self.get_tokenizer()

           snake_case__					:      int  			=						SpeechaTextProcessor(tokenizer=__lowerCamelCase    ,       feature_extractor=__lowerCamelCase )

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