





"""simple docstring"""






import inspect
import unittest

from transformers import ViTHybridConfig
from transformers.testing_utils import require_accelerate, require_torch, require_vision, slow, torch_device
from transformers.utils import cached_property, is_torch_available, is_vision_available

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


if is_torch_available():
    import torch
    from torch import nn

    from transformers import ViTHybridForImageClassification, ViTHybridImageProcessor, ViTHybridModel
    from transformers.models.vit_hybrid.modeling_vit_hybrid import VIT_HYBRID_PRETRAINED_MODEL_ARCHIVE_LIST


if is_vision_available():
    from PIL import Image



class 	lowerCAmelCase					:






       def __init__(   self    ,  a__    ,  a__=13    ,  a__=64    ,  a__=2    ,  a__=3    ,  a__=True    ,  a__=True    ,  a__=32    ,  a__=5    ,  a__=4    ,  a__=37    ,  a__="gelu"    ,  a__=0.1    ,  a__=0.1    ,  a__=10    ,  a__=0.02    ,  a__=[1, 16, 4, 4]    ,  a__=None    ,  ):
              _UpperCAmelCase     =     parent
              _UpperCAmelCase     =     batch_size
              _UpperCAmelCase     =     image_size
              _UpperCAmelCase     =     patch_size
              _UpperCAmelCase     =     num_channels
              _UpperCAmelCase     =     is_training
              _UpperCAmelCase     =     use_labels
              _UpperCAmelCase     =     hidden_size
              _UpperCAmelCase     =     num_hidden_layers
              _UpperCAmelCase     =     num_attention_heads
              _UpperCAmelCase     =     intermediate_size
              _UpperCAmelCase     =     hidden_act
              _UpperCAmelCase     =     hidden_dropout_prob
              _UpperCAmelCase     =     attention_probs_dropout_prob
              _UpperCAmelCase     =     type_sequence_label_size
              _UpperCAmelCase     =     initializer_range
              _UpperCAmelCase     =     scope
              _UpperCAmelCase     =     backbone_featmap_shape

              # in ViT hybrid, the seq length equals the number of patches + 1 (we add 1 for the [CLS] token)
              # the number of patches is based on the feature map of the backbone, which by default uses an output stride
              # of 32, which means that the feature map has a spatial resolution of 1/32 of the input image size
              _UpperCAmelCase     =     (self.image_size // 32) ** 2
              _UpperCAmelCase     =     num_patches + 1






       def 							__A (   self     ):
              _UpperCAmelCase     =     floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]     )

              _UpperCAmelCase     =     None
              if self.use_labels:
                     _UpperCAmelCase     =     ids_tensor([self.batch_size]    ,  self.type_sequence_label_size     )

              _UpperCAmelCase     =     self.get_config()

              return config, pixel_values, labels






       def 							__A (   self     ):
              _UpperCAmelCase     =     {
                  'global_padding': 'same',
                  'layer_type': 'bottleneck',
                  'depths': [3, 4, 9],
                  'out_features': ['stage1', 'stage2', 'stage3'],
                  'embedding_dynamic_padding': True,
                  'hidden_sizes': [4, 8, 16, 32],
                  'num_groups': 2,
              }

              return ViTHybridConfig(
                  image_size=self.image_size    ,  patch_size=self.patch_size    ,  num_channels=self.num_channels    ,  hidden_size=self.hidden_size    ,  num_hidden_layers=self.num_hidden_layers    ,  num_attention_heads=self.num_attention_heads    ,  intermediate_size=self.intermediate_size    ,  hidden_act=self.hidden_act    ,  hidden_dropout_prob=self.hidden_dropout_prob    ,  attention_probs_dropout_prob=self.attention_probs_dropout_prob    ,  is_decoder=a__    ,  initializer_range=self.initializer_range    ,  backbone_featmap_shape=self.backbone_featmap_shape    ,  backbone_config=a__    ,  )






       def 							__A (   self    ,  a__    ,  a__    ,  a__     ):
              _UpperCAmelCase     =     ViTHybridModel(config=a__     )
              model.to(a__     )
              model.eval()
              _UpperCAmelCase     =     model(a__     )
              self.parent.assertEqual(result.last_hidden_state.shape    ,  (self.batch_size, self.seq_length, self.hidden_size)     )






       def 							__A (   self    ,  a__    ,  a__    ,  a__     ):
              _UpperCAmelCase     =     self.type_sequence_label_size
              _UpperCAmelCase     =     ViTHybridForImageClassification(a__     )
              model.to(a__     )
              model.eval()
              _UpperCAmelCase     =     model(a__    ,  labels=a__     )
              self.parent.assertEqual(result.logits.shape    ,  (self.batch_size, self.type_sequence_label_size)     )






       def 							__A (   self     ):
              _UpperCAmelCase     =     self.prepare_config_and_inputs()
              _UpperCAmelCase    ,							_UpperCAmelCase    ,							_UpperCAmelCase     =     config_and_inputs
              _UpperCAmelCase     =     {'pixel_values': pixel_values}
              return config, inputs_dict



@require_torch
class 	lowerCAmelCase					(      snake_case			,	snake_case			,	unittest.TestCase							):
       lowerCAmelCase__						 =  (ViTHybridModel, ViTHybridForImageClassification) if is_torch_available() else ()
       lowerCAmelCase__						 =  (
           {"""feature-extraction""": ViTHybridModel, """image-classification""": ViTHybridForImageClassification}
           if is_torch_available()
           else {}
       )
       lowerCAmelCase__						 =  False
       lowerCAmelCase__						 =  False
       lowerCAmelCase__						 =  False






       def 							__A (   self     ):
              _UpperCAmelCase     =     ViTHybridModelTester(self     )
              _UpperCAmelCase     =     ConfigTester(self    ,  config_class=a__    ,  has_text_modality=a__    ,  hidden_size=37     )






       def 							__A (   self     ):
              self.config_tester.run_common_tests()






       @unittest.skip(reason='ViT does not use inputs_embeds'     )
       def 							__A (   self     ):
              pass






       def 							__A (   self     ):
              _UpperCAmelCase    ,							_UpperCAmelCase     =     self.model_tester.prepare_config_and_inputs_for_common()

              for model_class in self.all_model_classes:
                     _UpperCAmelCase     =     model_class(a__     )
                     self.assertIsInstance(model.get_input_embeddings()    ,  (nn.Module)     )
                     _UpperCAmelCase     =     model.get_output_embeddings()
                     self.assertTrue(x is None or isinstance(a__    ,  nn.Linear     )     )






       def 							__A (   self     ):
              _UpperCAmelCase    ,							_UpperCAmelCase     =     self.model_tester.prepare_config_and_inputs_for_common()

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

                     _UpperCAmelCase     =     ['pixel_values']
                     self.assertListEqual(arg_names[:1]    ,  a__     )






       def 							__A (   self     ):
              _UpperCAmelCase     =     self.model_tester.prepare_config_and_inputs()
              self.model_tester.create_and_check_model(*a__     )






       def 							__A (   self     ):
              _UpperCAmelCase     =     self.model_tester.prepare_config_and_inputs()
              self.model_tester.create_and_check_for_image_classification(*a__     )






       def 							__A (   self     ):
              _UpperCAmelCase    ,							_UpperCAmelCase     =     self.model_tester.prepare_config_and_inputs_for_common()

              _UpperCAmelCase     =     _config_zero_init(a__     )
              for model_class in self.all_model_classes:
                     _UpperCAmelCase     =     model_class(config=a__     )
                     # Skip the check for the backbone
                     for name, module in model.named_modules():
                            if module.__class__.__name__ == "ViTHybridPatchEmbeddings":
                                   _UpperCAmelCase     =     [f"""{name}.{key}""" for key in module.state_dict().keys()]
                                   break

                     for name, param in model.named_parameters():
                            if param.requires_grad:
                                   if name in backbone_params:
                                          continue
                                   self.assertIn(
                                       ((param.data.mean() * 1E9).round() / 1E9).item()    ,  [0.0, 1.0]    ,  msg=f"""Parameter {name} of model {model_class} seems not properly initialized"""    ,  )






       @slow
       def 							__A (   self     ):
              for model_name in VIT_HYBRID_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
                     _UpperCAmelCase     =     ViTHybridModel.from_pretrained(a__     )
                     self.assertIsNotNone(a__     )


def       __lowerCamelCase    (       )		->       str:






       """simple docstring"""




       _UpperCAmelCase     =     Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png'							)
       return image



@require_torch
@require_vision
class 	lowerCAmelCase					(      unittest.TestCase							):






       @cached_property
       def 							__A (   self     ):
              return (
                  ViTHybridImageProcessor.from_pretrained(VIT_HYBRID_PRETRAINED_MODEL_ARCHIVE_LIST[0]     )
                  if is_vision_available()
                  else None
              )






       @slow
       def 							__A (   self     ):
              _UpperCAmelCase     =     ViTHybridForImageClassification.from_pretrained(VIT_HYBRID_PRETRAINED_MODEL_ARCHIVE_LIST[0]     ).to(
                  a__     )

              _UpperCAmelCase     =     self.default_image_processor
              _UpperCAmelCase     =     prepare_img()
              _UpperCAmelCase     =     image_processor(images=a__    ,  return_tensors='pt'     ).to(a__     )

              # forward pass
              with torch.no_grad():
                     _UpperCAmelCase     =     model(**a__     )

              # verify the logits
              _UpperCAmelCase     =     torch.Size((1, 10_00)     )
              self.assertEqual(outputs.logits.shape    ,  a__     )

              _UpperCAmelCase     =     torch.tensor([-1.9_090, -0.4_993, -0.2_389]     ).to(a__     )

              self.assertTrue(torch.allclose(outputs.logits[0, :3]    ,  a__    ,  atol=1E-4     )     )






       @slow
       @require_accelerate
       def 							__A (   self     ):
              _UpperCAmelCase     =     ViTHybridImageProcessor.from_pretrained('google/vit-hybrid-base-bit-384'     )
              _UpperCAmelCase     =     ViTHybridForImageClassification.from_pretrained('google/vit-hybrid-base-bit-384'    ,  device_map='auto'     )

              _UpperCAmelCase     =     prepare_img()

              _UpperCAmelCase     =     image_processor(images=a__    ,  return_tensors='pt'     )
              _UpperCAmelCase     =     model(**a__     )
              _UpperCAmelCase     =     outputs.logits
              # model predicts one of the 1000 ImageNet classes
              _UpperCAmelCase     =     logits.argmax(-1     ).item()

              self.assertTrue(model.config.idalabel[predicted_class_idx]    ,  'tabby, tabby cat'     )













"""simple docstring"""






import unittest

import numpy as np

from transformers.testing_utils import require_torch, require_vision
from transformers.utils import is_torch_available, is_vision_available

from ...test_image_processing_common import ImageProcessingSavingTestMixin


if is_torch_available():
    import torch

if is_vision_available():
    from PIL import Image

    from transformers import ChineseCLIPImageProcessor



class 	lowerCAmelCase					(      unittest.TestCase							):






       def __init__(   self    ,  a__    ,  a__=7    ,  a__=3    ,  a__=18    ,  a__=30    ,  a__=4_00    ,  a__=True    ,  a__=None    ,  a__=True    ,  a__=None    ,  a__=True    ,  a__=[0.48_145_466, 0.4_578_275, 0.40_821_073]    ,  a__=[0.26_862_954, 0.26_130_258, 0.27_577_711]    ,  a__=True    ,  ):
              _UpperCAmelCase     =     size if size is not None else {'height': 2_24, 'width': 2_24}
              _UpperCAmelCase     =     crop_size if crop_size is not None else {'height': 18, 'width': 18}
              _UpperCAmelCase     =     parent
              _UpperCAmelCase     =     batch_size
              _UpperCAmelCase     =     num_channels
              _UpperCAmelCase     =     image_size
              _UpperCAmelCase     =     min_resolution
              _UpperCAmelCase     =     max_resolution
              _UpperCAmelCase     =     do_resize
              _UpperCAmelCase     =     size
              _UpperCAmelCase     =     do_center_crop
              _UpperCAmelCase     =     crop_size
              _UpperCAmelCase     =     do_normalize
              _UpperCAmelCase     =     image_mean
              _UpperCAmelCase     =     image_std
              _UpperCAmelCase     =     do_convert_rgb






       def 							__A (   self     ):
              return {
                  "do_resize": self.do_resize,
                  "size": self.size,
                  "do_center_crop": self.do_center_crop,
                  "crop_size": self.crop_size,
                  "do_normalize": self.do_normalize,
                  "image_mean": self.image_mean,
                  "image_std": self.image_std,
                  "do_convert_rgb": self.do_convert_rgb,
              }






       def 							__A (   self    ,  a__=False    ,  a__=False    ,  a__=False     ):
              assert not (numpify and torchify), "You cannot specify both numpy and PyTorch tensors at the same time"

              if equal_resolution:
                     _UpperCAmelCase     =     []
                     for i in range(self.batch_size     ):
                            image_inputs.append(
                                np.random.randint(
                                    2_55    ,  size=(self.num_channels, self.max_resolution, self.max_resolution)    ,  dtype=np.uinta     )     )
              else:
                     _UpperCAmelCase     =     []
                     for i in range(self.batch_size     ):
                            _UpperCAmelCase    ,							_UpperCAmelCase     =     np.random.choice(np.arange(self.min_resolution    ,  self.max_resolution     )    ,  2     )
                            image_inputs.append(np.random.randint(2_55    ,  size=(self.num_channels, width, height)    ,  dtype=np.uinta     )     )

              if not numpify and not torchify:
                     # PIL expects the channel dimension as last dimension
                     _UpperCAmelCase     =     [Image.fromarray(np.moveaxis(a__    ,  0    ,  -1     )     ) for x in image_inputs]

              if torchify:
                     _UpperCAmelCase     =     [torch.from_numpy(a__     ) for x in image_inputs]

              return image_inputs



@require_torch
@require_vision
class 	lowerCAmelCase					(      snake_case			,	unittest.TestCase							):
       lowerCAmelCase__						 =  ChineseCLIPImageProcessor if is_vision_available() else None






       def 							__A (   self     ):
              _UpperCAmelCase     =     ChineseCLIPImageProcessingTester(self    ,  do_center_crop=a__     )






       @property
       def 							__A (   self     ):
              return self.image_processor_tester.prepare_image_processor_dict()






       def 							__A (   self     ):
              _UpperCAmelCase     =     self.image_processing_class(**self.image_processor_dict     )
              self.assertTrue(hasattr(a__    ,  'do_resize'     )     )
              self.assertTrue(hasattr(a__    ,  'size'     )     )
              self.assertTrue(hasattr(a__    ,  'do_center_crop'     )     )
              self.assertTrue(hasattr(a__    ,  'center_crop'     )     )
              self.assertTrue(hasattr(a__    ,  'do_normalize'     )     )
              self.assertTrue(hasattr(a__    ,  'image_mean'     )     )
              self.assertTrue(hasattr(a__    ,  'image_std'     )     )
              self.assertTrue(hasattr(a__    ,  'do_convert_rgb'     )     )






       def 							__A (   self     ):
              _UpperCAmelCase     =     self.image_processing_class.from_dict(self.image_processor_dict     )
              self.assertEqual(image_processor.size    ,  {'height': 2_24, 'width': 2_24}     )
              self.assertEqual(image_processor.crop_size    ,  {'height': 18, 'width': 18}     )

              _UpperCAmelCase     =     self.image_processing_class.from_dict(self.image_processor_dict    ,  size=42    ,  crop_size=84     )
              self.assertEqual(image_processor.size    ,  {'shortest_edge': 42}     )
              self.assertEqual(image_processor.crop_size    ,  {'height': 84, 'width': 84}     )






       def 							__A (   self     ):
              pass






       def 							__A (   self     ):
              # Initialize image_processing
              _UpperCAmelCase     =     self.image_processing_class(**self.image_processor_dict     )
              # create random PIL images
              _UpperCAmelCase     =     self.image_processor_tester.prepare_inputs(equal_resolution=a__     )
              for image in image_inputs:
                     self.assertIsInstance(a__    ,  Image.Image     )

              # Test not batched input
              _UpperCAmelCase     =     image_processing(image_inputs[0]    ,  return_tensors='pt'     ).pixel_values
              self.assertEqual(
                  encoded_images.shape    ,  (
                      1,
                      self.image_processor_tester.num_channels,
                      self.image_processor_tester.crop_size['height'],
                      self.image_processor_tester.crop_size['width'],
                  )    ,  )

              # Test batched
              _UpperCAmelCase     =     image_processing(a__    ,  return_tensors='pt'     ).pixel_values
              self.assertEqual(
                  encoded_images.shape    ,  (
                      self.image_processor_tester.batch_size,
                      self.image_processor_tester.num_channels,
                      self.image_processor_tester.crop_size['height'],
                      self.image_processor_tester.crop_size['width'],
                  )    ,  )






       def 							__A (   self     ):
              # Initialize image_processing
              _UpperCAmelCase     =     self.image_processing_class(**self.image_processor_dict     )
              # create random numpy tensors
              _UpperCAmelCase     =     self.image_processor_tester.prepare_inputs(equal_resolution=a__    ,  numpify=a__     )
              for image in image_inputs:
                     self.assertIsInstance(a__    ,  np.ndarray     )

              # Test not batched input
              _UpperCAmelCase     =     image_processing(image_inputs[0]    ,  return_tensors='pt'     ).pixel_values
              self.assertEqual(
                  encoded_images.shape    ,  (
                      1,
                      self.image_processor_tester.num_channels,
                      self.image_processor_tester.crop_size['height'],
                      self.image_processor_tester.crop_size['width'],
                  )    ,  )

              # Test batched
              _UpperCAmelCase     =     image_processing(a__    ,  return_tensors='pt'     ).pixel_values
              self.assertEqual(
                  encoded_images.shape    ,  (
                      self.image_processor_tester.batch_size,
                      self.image_processor_tester.num_channels,
                      self.image_processor_tester.crop_size['height'],
                      self.image_processor_tester.crop_size['width'],
                  )    ,  )






       def 							__A (   self     ):
              # Initialize image_processing
              _UpperCAmelCase     =     self.image_processing_class(**self.image_processor_dict     )
              # create random PyTorch tensors
              _UpperCAmelCase     =     self.image_processor_tester.prepare_inputs(equal_resolution=a__    ,  torchify=a__     )
              for image in image_inputs:
                     self.assertIsInstance(a__    ,  torch.Tensor     )

              # Test not batched input
              _UpperCAmelCase     =     image_processing(image_inputs[0]    ,  return_tensors='pt'     ).pixel_values
              self.assertEqual(
                  encoded_images.shape    ,  (
                      1,
                      self.image_processor_tester.num_channels,
                      self.image_processor_tester.crop_size['height'],
                      self.image_processor_tester.crop_size['width'],
                  )    ,  )

              # Test batched
              _UpperCAmelCase     =     image_processing(a__    ,  return_tensors='pt'     ).pixel_values
              self.assertEqual(
                  encoded_images.shape    ,  (
                      self.image_processor_tester.batch_size,
                      self.image_processor_tester.num_channels,
                      self.image_processor_tester.crop_size['height'],
                      self.image_processor_tester.crop_size['width'],
                  )    ,  )



@require_torch
@require_vision
class 	lowerCAmelCase					(      snake_case			,	unittest.TestCase							):
       lowerCAmelCase__						 =  ChineseCLIPImageProcessor if is_vision_available() else None






       def 							__A (   self     ):
              _UpperCAmelCase     =     ChineseCLIPImageProcessingTester(self    ,  num_channels=4    ,  do_center_crop=a__     )
              _UpperCAmelCase     =     3






       @property
       def 							__A (   self     ):
              return self.image_processor_tester.prepare_image_processor_dict()






       def 							__A (   self     ):
              _UpperCAmelCase     =     self.image_processing_class(**self.image_processor_dict     )
              self.assertTrue(hasattr(a__    ,  'do_resize'     )     )
              self.assertTrue(hasattr(a__    ,  'size'     )     )
              self.assertTrue(hasattr(a__    ,  'do_center_crop'     )     )
              self.assertTrue(hasattr(a__    ,  'center_crop'     )     )
              self.assertTrue(hasattr(a__    ,  'do_normalize'     )     )
              self.assertTrue(hasattr(a__    ,  'image_mean'     )     )
              self.assertTrue(hasattr(a__    ,  'image_std'     )     )
              self.assertTrue(hasattr(a__    ,  'do_convert_rgb'     )     )






       def 							__A (   self     ):
              pass






       def 							__A (   self     ):
              # Initialize image_processing
              _UpperCAmelCase     =     self.image_processing_class(**self.image_processor_dict     )
              # create random PIL images
              _UpperCAmelCase     =     self.image_processor_tester.prepare_inputs(equal_resolution=a__     )
              for image in image_inputs:
                     self.assertIsInstance(a__    ,  Image.Image     )

              # Test not batched input
              _UpperCAmelCase     =     image_processing(image_inputs[0]    ,  return_tensors='pt'     ).pixel_values
              self.assertEqual(
                  encoded_images.shape    ,  (
                      1,
                      self.expected_encoded_image_num_channels,
                      self.image_processor_tester.crop_size['height'],
                      self.image_processor_tester.crop_size['width'],
                  )    ,  )

              # Test batched
              _UpperCAmelCase     =     image_processing(a__    ,  return_tensors='pt'     ).pixel_values
              self.assertEqual(
                  encoded_images.shape    ,  (
                      self.image_processor_tester.batch_size,
                      self.expected_encoded_image_num_channels,
                      self.image_processor_tester.crop_size['height'],
                      self.image_processor_tester.crop_size['width'],
                  )    ,  )






