






"""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


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







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





   '''simple docstring'''






   def __lowercase							(       self)			->   List[str]:




          '''simple docstring'''




          lowercase__:							Tuple         =     tempfile.mkdtemp()

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

          lowercase__:							List[Any]         =     SpeechaTextTokenizer.from_pretrained(self.tmpdirname)
          tokenizer.save_pretrained(self.tmpdirname)

          lowercase__:							int         =     {
              "feature_size": 24,
              "num_mel_bins": 24,
              "padding_value": 0.0,
              "sampling_rate": 16_000,
              "return_attention_mask": False,
              "do_normalize": True,
          }
          save_json(UpperCAmelCase_					, save_dir / FEATURE_EXTRACTOR_NAME)





   def __lowercase							(       self					, **UpperCAmelCase_)			->   List[str]:




          '''simple docstring'''




          return SpeechaTextTokenizer.from_pretrained(self.tmpdirname					, **UpperCAmelCase_)





   def __lowercase							(       self					, **UpperCAmelCase_)			->   Dict:




          '''simple docstring'''




          return SpeechaTextFeatureExtractor.from_pretrained(self.tmpdirname					, **UpperCAmelCase_)





   def __lowercase							(       self)			->   Optional[int]:




          '''simple docstring'''




          shutil.rmtree(self.tmpdirname)





   def __lowercase							(       self)			->   str:




          '''simple docstring'''




          lowercase__:							Union[str, Any]         =     self.get_tokenizer()
          lowercase__:							Union[str, Any]         =     self.get_feature_extractor()

          lowercase__:							str         =     SpeechaTextProcessor(tokenizer=UpperCAmelCase_					, feature_extractor=UpperCAmelCase_)

          processor.save_pretrained(self.tmpdirname)
          lowercase__:							List[Any]         =     SpeechaTextProcessor.from_pretrained(self.tmpdirname)

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

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





   def __lowercase							(       self)			->   Tuple:




          '''simple docstring'''




          lowercase__:							Dict         =     SpeechaTextProcessor(
              tokenizer=self.get_tokenizer()					, feature_extractor=self.get_feature_extractor())
          processor.save_pretrained(self.tmpdirname)

          lowercase__:							Tuple         =     self.get_tokenizer(bos_token="(BOS)"					, eos_token="(EOS)")
          lowercase__:							List[str]         =     self.get_feature_extractor(do_normalize=UpperCAmelCase_					, padding_value=1.0)

          lowercase__:							str         =     SpeechaTextProcessor.from_pretrained(
              self.tmpdirname					, bos_token="(BOS)"					, eos_token="(EOS)"					, do_normalize=UpperCAmelCase_					, padding_value=1.0)

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

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





   def __lowercase							(       self)			->   Any:




          '''simple docstring'''




          lowercase__:							Optional[int]         =     self.get_feature_extractor()
          lowercase__:							str         =     self.get_tokenizer()

          lowercase__:							List[Any]         =     SpeechaTextProcessor(tokenizer=UpperCAmelCase_					, feature_extractor=UpperCAmelCase_)

          lowercase__:							Any         =     floats_list((3, 1_000))

          lowercase__:							List[Any]         =     feature_extractor(UpperCAmelCase_					, return_tensors="np")
          lowercase__:							Optional[Any]         =     processor(UpperCAmelCase_					, 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 __lowercase							(       self)			->   Tuple:




          '''simple docstring'''




          lowercase__:							Optional[Any]         =     self.get_feature_extractor()
          lowercase__:							Optional[int]         =     self.get_tokenizer()

          lowercase__:							Dict         =     SpeechaTextProcessor(tokenizer=UpperCAmelCase_					, feature_extractor=UpperCAmelCase_)

          lowercase__:							int         =     "This is a test string"

          lowercase__:							List[Any]         =     processor(text=UpperCAmelCase_)

          lowercase__:							Optional[Any]         =     tokenizer(UpperCAmelCase_)

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





   def __lowercase							(       self)			->   List[Any]:




          '''simple docstring'''




          lowercase__:							Optional[Any]         =     self.get_feature_extractor()
          lowercase__:							Optional[Any]         =     self.get_tokenizer()

          lowercase__:							Tuple         =     SpeechaTextProcessor(tokenizer=UpperCAmelCase_					, feature_extractor=UpperCAmelCase_)

          lowercase__:							Union[str, Any]         =     [[1, 4, 5, 8, 1, 0, 8], [3, 4, 3, 1, 1, 8, 9]]

          lowercase__:							List[Any]         =     processor.batch_decode(UpperCAmelCase_)
          lowercase__:							Any         =     tokenizer.batch_decode(UpperCAmelCase_)

          self.assertListEqual(UpperCAmelCase_					, UpperCAmelCase_)





   def __lowercase							(       self)			->   Tuple:




          '''simple docstring'''




          lowercase__:							str         =     self.get_feature_extractor()
          lowercase__:							Union[str, Any]         =     self.get_tokenizer()

          lowercase__:							List[str]         =     SpeechaTextProcessor(tokenizer=UpperCAmelCase_					, feature_extractor=UpperCAmelCase_)

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












import inspect
import unittest

from transformers import is_torch_available, is_vision_available
from transformers.models.auto import get_values
from transformers.testing_utils import require_torch, slow, torch_device

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, floats_tensor, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
    import torch

    from transformers import MODEL_MAPPING, PoolFormerConfig, PoolFormerForImageClassification, PoolFormerModel
    from transformers.models.poolformer.modeling_poolformer import POOLFORMER_PRETRAINED_MODEL_ARCHIVE_LIST


if is_vision_available():
    from PIL import Image

    from transformers import PoolFormerImageProcessor


class        UpperCAmelCase__				(							UpperCAmelCase__				):



     '''simple docstring'''
     def        lowerCAmelCase__  (				self	):
            a			   =self.config_class(**self.inputs_dict	)
            self.parent.assertTrue(hasattr(_lowerCAmelCase ,    """hidden_sizes"""	)	)
            self.parent.assertTrue(hasattr(_lowerCAmelCase ,    """num_encoder_blocks"""	)	)



class        UpperCAmelCase__				:



     '''simple docstring'''
     def __init__(				self ,    _lowerCAmelCase ,    _lowerCAmelCase=13 ,    _lowerCAmelCase=64 ,    _lowerCAmelCase=3 ,    _lowerCAmelCase=4 ,    _lowerCAmelCase=[2, 2, 2, 2] ,    _lowerCAmelCase=[8, 4, 2, 1] ,    _lowerCAmelCase=[16, 32, 64, 128] ,    _lowerCAmelCase=[1, 4, 8, 16] ,    _lowerCAmelCase=False ,    _lowerCAmelCase=True ,    _lowerCAmelCase="gelu" ,    _lowerCAmelCase=0.1 ,    _lowerCAmelCase=0.02 ,    _lowerCAmelCase=3 ,    _lowerCAmelCase=None ,    ):
            a			   =parent
            a			   =batch_size
            a			   =image_size
            a			   =num_channels
            a			   =num_encoder_blocks
            a			   =sr_ratios
            a			   =depths
            a			   =hidden_sizes
            a			   =downsampling_rates
            a			   =is_training
            a			   =use_labels
            a			   =hidden_act
            a			   =hidden_dropout_prob
            a			   =initializer_range
            a			   =num_labels
            a			   =scope
     def        lowerCAmelCase__  (				self	):
            a			   =floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]	)

            a			   =None
            if self.use_labels:
                   a			   =ids_tensor([self.batch_size, self.image_size, self.image_size] ,    self.num_labels	)

            a			   =PoolFormerConfig(
                image_size=self.image_size ,    num_channels=self.num_channels ,    num_encoder_blocks=self.num_encoder_blocks ,    depths=self.depths ,    hidden_sizes=self.hidden_sizes ,    hidden_act=self.hidden_act ,    hidden_dropout_prob=self.hidden_dropout_prob ,    initializer_range=self.initializer_range ,    )

            return config, pixel_values, labels
     def        lowerCAmelCase__  (				self ,    _lowerCAmelCase ,    _lowerCAmelCase ,    _lowerCAmelCase	):
            a			   =PoolFormerModel(config=_lowerCAmelCase	)
            model.to(_lowerCAmelCase	)
            model.eval()
            a			   =model(_lowerCAmelCase	)
            a			   =a			   =self.image_size // 32.0
            self.parent.assertEqual(
                result.last_hidden_state.shape ,    (self.batch_size, self.hidden_sizes[-1], expected_height, expected_width)	)






     def        lowerCAmelCase__  (				self	):
            a			   =self.prepare_config_and_inputs()
            a   ,      a   ,      a			   =config_and_inputs
            a			   ={"""pixel_values""": pixel_values}
            return config, inputs_dict



@require_torch
class        UpperCAmelCase__				(							UpperCAmelCase__      ,		UpperCAmelCase__      ,		unittest.TestCase				):



     '''simple docstring'''
     _SCREAMING_SNAKE_CASE      :					Tuple     					=    (PoolFormerModel, PoolFormerForImageClassification) if is_torch_available() else ()
     _SCREAMING_SNAKE_CASE      :					Any     					=    (
         {"feature-extraction": PoolFormerModel, "image-classification": PoolFormerForImageClassification}
         if is_torch_available()
         else {}
     )

     _SCREAMING_SNAKE_CASE      :					Union[str, Any]     					=    False
     _SCREAMING_SNAKE_CASE      :					Tuple     					=    False
     _SCREAMING_SNAKE_CASE      :					str     					=    False
     _SCREAMING_SNAKE_CASE      :					Optional[int]     					=    False
     _SCREAMING_SNAKE_CASE      :					Optional[int]     					=    False
     def        lowerCAmelCase__  (				self	):
            a			   =PoolFormerModelTester(self	)
            a			   =PoolFormerConfigTester(self ,    config_class=_lowerCAmelCase	)
     def        lowerCAmelCase__  (				self	):
            self.config_tester.run_common_tests()
     def        lowerCAmelCase__  (				self	):
            a			   =self.model_tester.prepare_config_and_inputs()
            self.model_tester.create_and_check_model(*_lowerCAmelCase	)
     @unittest.skip("""PoolFormer does not use inputs_embeds"""	)
     def        lowerCAmelCase__  (				self	):
            pass
     @unittest.skip("""PoolFormer does not have get_input_embeddings method and get_output_embeddings methods"""	)
     def        lowerCAmelCase__  (				self	):
            pass
     def        lowerCAmelCase__  (				self	):
            def check_hidden_states_output(_lowerCAmelCase ,    _lowerCAmelCase ,    _lowerCAmelCase	):
                   a			   =model_class(_lowerCAmelCase	)
                   model.to(_lowerCAmelCase	)
                   model.eval()

                   with torch.no_grad():
                          a			   =model(**self._prepare_for_class(_lowerCAmelCase ,    _lowerCAmelCase	)	)

                   a			   =outputs.hidden_states

                   a			   =self.model_tester.num_encoder_blocks
                   self.assertEqual(len(_lowerCAmelCase	) ,    _lowerCAmelCase	)

                   # verify the first hidden states (first block)
                   self.assertListEqual(
                       list(hidden_states[0].shape[-3:]	) ,    [
                           self.model_tester.hidden_sizes[0],
                           self.model_tester.image_size // 4,
                           self.model_tester.image_size // 4,
                       ] ,    )

            a   ,      a			   =self.model_tester.prepare_config_and_inputs_for_common()

            for model_class in self.all_model_classes:
                   a			   =True
                   check_hidden_states_output(_lowerCAmelCase ,    _lowerCAmelCase ,    _lowerCAmelCase	)

                   # check that output_hidden_states also work using config
                   del inputs_dict["output_hidden_states"]
                   a			   =True

                   check_hidden_states_output(_lowerCAmelCase ,    _lowerCAmelCase ,    _lowerCAmelCase	)
     def        lowerCAmelCase__  (				self	):
            if not self.model_tester.is_training:
                   return

            a   ,      a			   =self.model_tester.prepare_config_and_inputs_for_common()
            a			   =True

            for model_class in self.all_model_classes:
                   if model_class in get_values(_lowerCAmelCase	):
                          continue
                   a			   =model_class(_lowerCAmelCase	)
                   model.to(_lowerCAmelCase	)
                   model.train()
                   a			   =self._prepare_for_class(_lowerCAmelCase ,    _lowerCAmelCase ,    return_labels=_lowerCAmelCase	)
                   a			   =model(**_lowerCAmelCase	).loss
                   loss.backward()
     def        lowerCAmelCase__  (				self	):
            a   ,      a			   =self.model_tester.prepare_config_and_inputs_for_common()

            for model_class in self.all_model_classes:
                   a			   =model_class(_lowerCAmelCase	)
                   a			   =inspect.signature(model.forward	)
                   # signature.parameters is an OrderedDict => so arg_names order is deterministic
                   a			   =[*signature.parameters.keys()]

                   a			   =["""pixel_values"""]
                   self.assertListEqual(arg_names[:1] ,    _lowerCAmelCase	)






     @slow
     def        lowerCAmelCase__  (				self	):
            for model_name in POOLFORMER_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
                   a			   =PoolFormerModel.from_pretrained(_lowerCAmelCase	)
                   self.assertIsNotNone(_lowerCAmelCase	)





def 							lowerCamelCase    (							)->			Tuple:

       """simple docstring"""




       a			   =Image.open("""./tests/fixtures/tests_samples/COCO/000000039769.png"""      )
       return image






@require_torch
class        UpperCAmelCase__				(							unittest.TestCase				):



     '''simple docstring'''
     @slow
     def        lowerCAmelCase__  (				self	):
            a			   =PoolFormerImageProcessor()
            a			   =PoolFormerForImageClassification.from_pretrained("""sail/poolformer_s12"""	).to(_lowerCAmelCase	)

            a			   =image_processor(images=prepare_img() ,    return_tensors="""pt"""	).to(_lowerCAmelCase	)

            # forward pass
            with torch.no_grad():
                   a			   =model(**_lowerCAmelCase	)

            # verify the logits
            a			   =torch.Size((1, 1_000)	)
            self.assertEqual(outputs.logits.shape ,    _lowerCAmelCase	)

            a			   =torch.tensor([-0.61_13, 0.16_85, -0.04_92]	).to(_lowerCAmelCase	)
            self.assertTrue(torch.allclose(outputs.logits[0, :3] ,    _lowerCAmelCase ,    atol=1E-4	)	)
