"""simple docstring"""


import shutil
import tempfile
import unittest

import numpy as np
import pytest

from transformers import is_speech_available, is_vision_available
from transformers.testing_utils import require_torch


if is_vision_available():
    from transformers import TvltImageProcessor

if is_speech_available():
    from transformers import TvltFeatureExtractor

from transformers import TvltProcessor


@require_torch
class 							a					(		unittest.TestCase ):


    def   lowerCAmelCase_	(       self						:	List[str]       ):
      _UpperCAmelCase    			=   """ZinengTang/tvlt-base"""
      _UpperCAmelCase    			=   tempfile.mkdtemp()


    def   lowerCAmelCase_	(       self						:	int ,					**__lowerCAmelCase						:	List[Any]       ):
      return TvltImageProcessor.from_pretrained(self.checkpoint ,					**__lowerCAmelCase       )


    def   lowerCAmelCase_	(       self						:	List[Any] ,					**__lowerCAmelCase						:	Dict       ):
      return TvltFeatureExtractor.from_pretrained(self.checkpoint ,					**__lowerCAmelCase       )


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


    def   lowerCAmelCase_	(       self						:	Optional[int]       ):
      _UpperCAmelCase    			=   self.get_image_processor()
      _UpperCAmelCase    			=   self.get_feature_extractor()

      _UpperCAmelCase    			=   TvltProcessor(image_processor=__lowerCAmelCase ,					feature_extractor=__lowerCAmelCase       )
      processor.save_pretrained(self.tmpdirname       )
      _UpperCAmelCase    			=   TvltProcessor.from_pretrained(self.tmpdirname       )

      self.assertIsInstance(processor.feature_extractor ,					__lowerCAmelCase       )
      self.assertIsInstance(processor.image_processor ,					__lowerCAmelCase       )


    def   lowerCAmelCase_	(       self						:	Optional[int]       ):
      _UpperCAmelCase    			=   self.get_image_processor()
      _UpperCAmelCase    			=   self.get_feature_extractor()

      _UpperCAmelCase    			=   TvltProcessor(image_processor=__lowerCAmelCase ,					feature_extractor=__lowerCAmelCase       )

      _UpperCAmelCase    			=   np.ones([1_2000]       )

      _UpperCAmelCase    			=   feature_extractor(__lowerCAmelCase ,					return_tensors="""np"""       )
      _UpperCAmelCase    			=   processor(audio=__lowerCAmelCase ,					return_tensors="""np"""       )

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


    def   lowerCAmelCase_	(       self						:	Tuple       ):
      _UpperCAmelCase    			=   self.get_image_processor()
      _UpperCAmelCase    			=   self.get_feature_extractor()

      _UpperCAmelCase    			=   TvltProcessor(image_processor=__lowerCAmelCase ,					feature_extractor=__lowerCAmelCase       )

      _UpperCAmelCase    			=   np.ones([3, 224, 224]       )

      _UpperCAmelCase    			=   image_processor(__lowerCAmelCase ,					return_tensors="""np"""       )
      _UpperCAmelCase    			=   processor(images=__lowerCAmelCase ,					return_tensors="""np"""       )

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


    def   lowerCAmelCase_	(       self						:	Optional[Any]       ):
      _UpperCAmelCase    			=   self.get_image_processor()
      _UpperCAmelCase    			=   self.get_feature_extractor()

      _UpperCAmelCase    			=   TvltProcessor(image_processor=__lowerCAmelCase ,					feature_extractor=__lowerCAmelCase       )

      _UpperCAmelCase    			=   np.ones([1_2000]       )
      _UpperCAmelCase    			=   np.ones([3, 224, 224]       )

      _UpperCAmelCase    			=   processor(audio=__lowerCAmelCase ,					images=__lowerCAmelCase       )

      self.assertListEqual(list(inputs.keys()       ) ,					["""audio_values""", """audio_mask""", """pixel_values""", """pixel_mask"""]       )

      # test if it raises when no input is passed
      with pytest.raises(__lowerCAmelCase       ):
        processor()


    def   lowerCAmelCase_	(       self						:	Dict       ):
      _UpperCAmelCase    			=   self.get_image_processor()
      _UpperCAmelCase    			=   self.get_feature_extractor()

      _UpperCAmelCase    			=   TvltProcessor(image_processor=__lowerCAmelCase ,					feature_extractor=__lowerCAmelCase       )

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

"""simple docstring"""


import copy
import json
import os
import tempfile

from transformers import is_torch_available

from .test_configuration_utils import config_common_kwargs


class 							a					(		lowerCAmelCase_ ):


    def __init__(       self						:	Union[str, Any] ,					__lowerCAmelCase						:	Union[str, Any] ,					__lowerCAmelCase						:	str=None ,					__lowerCAmelCase						:	List[Any]=True ,					__lowerCAmelCase						:	Union[str, Any]=None ,					**__lowerCAmelCase						:	Dict       ):
      _UpperCAmelCase    			=   parent
      _UpperCAmelCase    			=   config_class
      _UpperCAmelCase    			=   has_text_modality
      _UpperCAmelCase    			=   kwargs
      _UpperCAmelCase    			=   common_properties


    def   lowerCAmelCase_	(       self						:	Dict       ):
      _UpperCAmelCase    			=   self.config_class(**self.inputs_dict       )
      _UpperCAmelCase    			=   (
          ["""hidden_size""", """num_attention_heads""", """num_hidden_layers"""]
          if self.common_properties is None
          else self.common_properties
      )

      # Add common fields for text models
      if self.has_text_modality:
        common_properties.extend(["""vocab_size"""]       )

      # Test that config has the common properties as getters
      for prop in common_properties:
        self.parent.assertTrue(hasattr(__lowerCAmelCase ,					__lowerCAmelCase       ) ,					msg=f'''`{prop}` does not exist'''       )

      # Test that config has the common properties as setter
      for idx, name in enumerate(__lowerCAmelCase       ):
        try:
          setattr(__lowerCAmelCase ,					__lowerCAmelCase ,					__lowerCAmelCase       )
          self.parent.assertEqual(
              getattr(__lowerCAmelCase ,					__lowerCAmelCase       ) ,					__lowerCAmelCase ,					msg=f'''`{name} value {idx} expected, but was {getattr(__lowerCAmelCase ,					__lowerCAmelCase       )}'''       )
        except NotImplementedError:
          # Some models might not be able to implement setters for common_properties
          # In that case, a NotImplementedError is raised
          pass

        # Test if config class can be called with Config(prop_name=..)
      for idx, name in enumerate(__lowerCAmelCase       ):
        try:
          _UpperCAmelCase    			=   self.config_class(**{name: idx}       )
          self.parent.assertEqual(
              getattr(__lowerCAmelCase ,					__lowerCAmelCase       ) ,					__lowerCAmelCase ,					msg=f'''`{name} value {idx} expected, but was {getattr(__lowerCAmelCase ,					__lowerCAmelCase       )}'''       )
        except NotImplementedError:
          # Some models might not be able to implement setters for common_properties
          # In that case, a NotImplementedError is raised
          pass


    def   lowerCAmelCase_	(       self						:	Optional[Any]       ):
      _UpperCAmelCase    			=   self.config_class(**self.inputs_dict       )
      _UpperCAmelCase    			=   json.loads(config.to_json_string()       )
      for key, value in self.inputs_dict.items():
        self.parent.assertEqual(obj[key] ,					__lowerCAmelCase       )


    def   lowerCAmelCase_	(       self						:	Union[str, Any]       ):
      _UpperCAmelCase    			=   self.config_class(**self.inputs_dict       )

      with tempfile.TemporaryDirectory() as tmpdirname:
        _UpperCAmelCase    			=   os.path.join(__lowerCAmelCase ,					"""config.json"""       )
        config_first.to_json_file(__lowerCAmelCase       )
        _UpperCAmelCase    			=   self.config_class.from_json_file(__lowerCAmelCase       )

      self.parent.assertEqual(config_second.to_dict() ,					config_first.to_dict()       )


    def   lowerCAmelCase_	(       self						:	List[str]       ):
      _UpperCAmelCase    			=   self.config_class(**self.inputs_dict       )

      with tempfile.TemporaryDirectory() as tmpdirname:
        config_first.save_pretrained(__lowerCAmelCase       )
        _UpperCAmelCase    			=   self.config_class.from_pretrained(__lowerCAmelCase       )

      self.parent.assertEqual(config_second.to_dict() ,					config_first.to_dict()       )


    def   lowerCAmelCase_	(       self						:	Optional[Any]       ):
      _UpperCAmelCase    			=   self.config_class(**self.inputs_dict       )

      _UpperCAmelCase    			=   """test"""
      with tempfile.TemporaryDirectory() as tmpdirname:
        _UpperCAmelCase    			=   os.path.join(__lowerCAmelCase ,					__lowerCAmelCase       )
        config_first.save_pretrained(__lowerCAmelCase       )
        _UpperCAmelCase    			=   self.config_class.from_pretrained(__lowerCAmelCase ,					subfolder=__lowerCAmelCase       )

      self.parent.assertEqual(config_second.to_dict() ,					config_first.to_dict()       )


    def   lowerCAmelCase_	(       self						:	List[str]       ):
      _UpperCAmelCase    			=   self.config_class(**self.inputs_dict ,					num_labels=5       )
      self.parent.assertEqual(len(config.idalabel       ) ,					5       )
      self.parent.assertEqual(len(config.labelaid       ) ,					5       )

      _UpperCAmelCase    			=   3
      self.parent.assertEqual(len(config.idalabel       ) ,					3       )
      self.parent.assertEqual(len(config.labelaid       ) ,					3       )


    def   lowerCAmelCase_	(       self						:	List[str]       ):
      if self.config_class.is_composition:
        return
      _UpperCAmelCase    			=   self.config_class()
      self.parent.assertIsNotNone(__lowerCAmelCase       )


    def   lowerCAmelCase_	(       self						:	Any       ):
      _UpperCAmelCase    			=   copy.deepcopy(__lowerCAmelCase       )
      _UpperCAmelCase    			=   self.config_class(**__lowerCAmelCase       )
      _UpperCAmelCase    			=   []
      for key, value in config_common_kwargs.items():
        if key == "torch_dtype":
          if not is_torch_available():
            continue
          else:
            import torch

            if config.torch_dtype != torch.floataa:
              wrong_values.append(("""torch_dtype""", config.torch_dtype, torch.floataa)       )
        elif getattr(__lowerCAmelCase ,					__lowerCAmelCase       ) != value:
          wrong_values.append((key, getattr(__lowerCAmelCase ,					__lowerCAmelCase       ), value)       )

      if len(__lowerCAmelCase       ) > 0:
        _UpperCAmelCase    			=   """\n""".join([f'''- {v[0]}: got {v[1]} instead of {v[2]}''' for v in wrong_values]       )
        raise ValueError(f'''The following keys were not properly set in the config:\n{errors}'''       )


    def   lowerCAmelCase_	(       self						:	Optional[Any]       ):
      self.create_and_test_config_common_properties()
      self.create_and_test_config_to_json_string()
      self.create_and_test_config_to_json_file()
      self.create_and_test_config_from_and_save_pretrained()
      self.create_and_test_config_from_and_save_pretrained_subfolder()
      self.create_and_test_config_with_num_labels()
      self.check_config_can_be_init_without_params()
      self.check_config_arguments_init()
