






import collections
import inspect
import unittest

from transformers import SwinvaConfig
from transformers.testing_utils import 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 SwinvaForImageClassification, SwinvaForMaskedImageModeling, SwinvaModel
   from transformers.models.swinva.modeling_swinva import SWINV2_PRETRAINED_MODEL_ARCHIVE_LIST

if is_vision_available():
   from PIL import Image

   from transformers import AutoImageProcessor




class     _lowerCAmelCase:





       """simple docstring"""







       def __init__( self  ,      _lowerCamelCase  ,      _lowerCamelCase=1_3  ,      _lowerCamelCase=3_2  ,      _lowerCamelCase=2  ,      _lowerCamelCase=3  ,      _lowerCamelCase=1_6  ,      _lowerCamelCase=[1, 2, 1]  ,      _lowerCamelCase=[2, 2, 4]  ,      _lowerCamelCase=2  ,      _lowerCamelCase=2.0  ,      _lowerCamelCase=True  ,      _lowerCamelCase=0.0  ,      _lowerCamelCase=0.0  ,      _lowerCamelCase=0.1  ,      _lowerCamelCase="gelu"  ,      _lowerCamelCase=False  ,      _lowerCamelCase=True  ,      _lowerCamelCase=0.0_2  ,      _lowerCamelCase=1e-5  ,      _lowerCamelCase=True  ,      _lowerCamelCase=None  ,      _lowerCamelCase=True  ,      _lowerCamelCase=1_0  ,      _lowerCamelCase=8  ,      ):
         UpperCamelCase_: str   				=    parent
         UpperCamelCase_: Optional[int]   				=    batch_size
         UpperCamelCase_: Tuple   				=    image_size
         UpperCamelCase_: Tuple   				=    patch_size
         UpperCamelCase_: List[Any]   				=    num_channels
         UpperCamelCase_: List[Any]   				=    embed_dim
         UpperCamelCase_: int   				=    depths
         UpperCamelCase_: List[Any]   				=    num_heads
         UpperCamelCase_: Any   				=    window_size
         UpperCamelCase_: Optional[Any]   				=    mlp_ratio
         UpperCamelCase_: Optional[Any]   				=    qkv_bias
         UpperCamelCase_: Dict   				=    hidden_dropout_prob
         UpperCamelCase_: str   				=    attention_probs_dropout_prob
         UpperCamelCase_: Tuple   				=    drop_path_rate
         UpperCamelCase_: Dict   				=    hidden_act
         UpperCamelCase_: str   				=    use_absolute_embeddings
         UpperCamelCase_: Optional[Any]   				=    patch_norm
         UpperCamelCase_: Optional[int]   				=    layer_norm_eps
         UpperCamelCase_: Any   				=    initializer_range
         UpperCamelCase_: Union[str, Any]   				=    is_training
         UpperCamelCase_: Union[str, Any]   				=    scope
         UpperCamelCase_: List[str]   				=    use_labels
         UpperCamelCase_: Optional[int]   				=    type_sequence_label_size
         UpperCamelCase_: Optional[int]   				=    encoder_stride





       def       _a   ( self							):
         UpperCamelCase_: List[Any]   				=    floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]							)

         UpperCamelCase_: Optional[int]   				=    None
         if self.use_labels:
           UpperCamelCase_: Dict   				=    ids_tensor([self.batch_size]  ,      self.type_sequence_label_size							)

         UpperCamelCase_: Optional[Any]   				=    self.get_config()

         return config, pixel_values, labels





       def       _a   ( self							):
         return SwinvaConfig(
             image_size=self.image_size  ,      patch_size=self.patch_size  ,      num_channels=self.num_channels  ,      embed_dim=self.embed_dim  ,      depths=self.depths  ,      num_heads=self.num_heads  ,      window_size=self.window_size  ,      mlp_ratio=self.mlp_ratio  ,      qkv_bias=self.qkv_bias  ,      hidden_dropout_prob=self.hidden_dropout_prob  ,      attention_probs_dropout_prob=self.attention_probs_dropout_prob  ,      drop_path_rate=self.drop_path_rate  ,      hidden_act=self.hidden_act  ,      use_absolute_embeddings=self.use_absolute_embeddings  ,      path_norm=self.patch_norm  ,      layer_norm_eps=self.layer_norm_eps  ,      initializer_range=self.initializer_range  ,      encoder_stride=self.encoder_stride  ,      )





       def       _a   ( self  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase							):
         UpperCamelCase_: Any   				=    SwinvaModel(config=_lowerCamelCase							)
         model.to(_lowerCamelCase							)
         model.eval()
         UpperCamelCase_: List[str]   				=    model(_lowerCamelCase							)

         UpperCamelCase_: Any   				=    ((config.image_size // config.patch_size) ** 2) // (4 ** (len(config.depths							) - 1))
         UpperCamelCase_: List[Any]   				=    int(config.embed_dim * 2 ** (len(config.depths							) - 1)							)

         self.parent.assertEqual(result.last_hidden_state.shape  ,      (self.batch_size, expected_seq_len, expected_dim)							)





       def       _a   ( self  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase							):
         UpperCamelCase_: List[Any]   				=    SwinvaForMaskedImageModeling(config=_lowerCamelCase							)
         model.to(_lowerCamelCase							)
         model.eval()
         UpperCamelCase_: Union[str, Any]   				=    model(_lowerCamelCase							)
         self.parent.assertEqual(
             result.logits.shape  ,      (self.batch_size, self.num_channels, self.image_size, self.image_size)							)

         # test greyscale images
         UpperCamelCase_: Union[str, Any]   				=    1
         UpperCamelCase_: Tuple   				=    SwinvaForMaskedImageModeling(_lowerCamelCase							)
         model.to(_lowerCamelCase							)
         model.eval()

         UpperCamelCase_: Optional[Any]   				=    floats_tensor([self.batch_size, 1, self.image_size, self.image_size]							)
         UpperCamelCase_: Optional[Any]   				=    model(_lowerCamelCase							)
         self.parent.assertEqual(result.logits.shape  ,      (self.batch_size, 1, self.image_size, self.image_size)							)





       def       _a   ( self  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase							):
         UpperCamelCase_: Union[str, Any]   				=    self.type_sequence_label_size
         UpperCamelCase_: Optional[Any]   				=    SwinvaForImageClassification(_lowerCamelCase							)
         model.to(_lowerCamelCase							)
         model.eval()
         UpperCamelCase_: List[Any]   				=    model(_lowerCamelCase  ,      labels=_lowerCamelCase							)
         self.parent.assertEqual(result.logits.shape  ,      (self.batch_size, self.type_sequence_label_size)							)





       def       _a   ( self							):
         UpperCamelCase_: str   				=    self.prepare_config_and_inputs()
         UpperCamelCase_				,UpperCamelCase_				,UpperCamelCase_: Dict   				=    config_and_inputs
         UpperCamelCase_: Optional[Any]   				=    {'pixel_values': pixel_values}
         return config, inputs_dict







@require_torch
class     _lowerCAmelCase(	UpperCAmelCase_							,     UpperCAmelCase_							,     unittest.TestCase ):





       """simple docstring"""







       a    :		List[Any]									=(
           (SwinvaModel, SwinvaForImageClassification, SwinvaForMaskedImageModeling) if is_torch_available() else ()
       )
       a    :		str									=(
           {'''feature-extraction''': SwinvaModel, '''image-classification''': SwinvaForImageClassification}
           if is_torch_available()
           else {}
       )

       a    :		Union[str, Any]									=False
       a    :		Tuple									=False
       a    :		str									=False
       a    :		List[str]									=False





       def       _a   ( self							):
         UpperCamelCase_: List[str]   				=    SwinvaModelTester(self							)
         UpperCamelCase_: List[Any]   				=    ConfigTester(self  ,      config_class=_lowerCamelCase  ,      embed_dim=3_7							)





       def       _a   ( self							):
         self.config_tester.create_and_test_config_to_json_string()
         self.config_tester.create_and_test_config_to_json_file()
         self.config_tester.create_and_test_config_from_and_save_pretrained()
         self.config_tester.create_and_test_config_with_num_labels()
         self.config_tester.check_config_can_be_init_without_params()
         self.config_tester.check_config_arguments_init()





       def       _a   ( self							):
         UpperCamelCase_: Tuple   				=    self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_model(*_lowerCamelCase							)





       @unittest.skip(reason='Got `CUDA error: misaligned address` with PyTorch 2.0.0.'							)
       def       _a   ( self							):
         pass





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





       def       _a   ( self							):
         UpperCamelCase_				,UpperCamelCase_: Optional[int]   				=    self.model_tester.prepare_config_and_inputs_for_common()

         for model_class in self.all_model_classes:
           UpperCamelCase_: List[str]   				=    model_class(_lowerCamelCase							)
           self.assertIsInstance(model.get_input_embeddings()  ,      (nn.Module)							)
           UpperCamelCase_: Optional[int]   				=    model.get_output_embeddings()
           self.assertTrue(x is None or isinstance(_lowerCamelCase  ,      nn.Linear							)							)





       def       _a   ( self							):
         UpperCamelCase_				,UpperCamelCase_: int   				=    self.model_tester.prepare_config_and_inputs_for_common()

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

           UpperCamelCase_: Tuple   				=    ['pixel_values']
           self.assertListEqual(arg_names[:1]  ,      _lowerCamelCase							)





       def       _a   ( self							):
         UpperCamelCase_				,UpperCamelCase_: Any   				=    self.model_tester.prepare_config_and_inputs_for_common()
         UpperCamelCase_: List[str]   				=    True

         for model_class in self.all_model_classes:
           UpperCamelCase_: Tuple   				=    True
           UpperCamelCase_: List[Any]   				=    False
           UpperCamelCase_: List[str]   				=    True
           UpperCamelCase_: List[str]   				=    model_class(_lowerCamelCase							)
           model.to(_lowerCamelCase							)
           model.eval()
           with torch.no_grad():
             UpperCamelCase_: Any   				=    model(**self._prepare_for_class(_lowerCamelCase  ,      _lowerCamelCase							)							)
           UpperCamelCase_: List[Any]   				=    outputs.attentions
           UpperCamelCase_: str   				=    len(self.model_tester.depths							)
           self.assertEqual(len(_lowerCamelCase							)  ,      _lowerCamelCase							)

           # check that output_attentions also work using config
           del inputs_dict["output_attentions"]
           UpperCamelCase_: Optional[Any]   				=    True
           UpperCamelCase_: Optional[int]   				=    config.window_size**2
           UpperCamelCase_: int   				=    model_class(_lowerCamelCase							)
           model.to(_lowerCamelCase							)
           model.eval()
           with torch.no_grad():
             UpperCamelCase_: List[Any]   				=    model(**self._prepare_for_class(_lowerCamelCase  ,      _lowerCamelCase							)							)
           UpperCamelCase_: Dict   				=    outputs.attentions
           self.assertEqual(len(_lowerCamelCase							)  ,      _lowerCamelCase							)

           self.assertListEqual(
               list(attentions[0].shape[-3:]							)  ,      [self.model_tester.num_heads[0], window_size_squared, window_size_squared]  ,      )
           UpperCamelCase_: List[Any]   				=    len(_lowerCamelCase							)

           # Check attention is always last and order is fine
           UpperCamelCase_: List[Any]   				=    True
           UpperCamelCase_: Dict   				=    True
           UpperCamelCase_: Optional[Any]   				=    model_class(_lowerCamelCase							)
           model.to(_lowerCamelCase							)
           model.eval()
           with torch.no_grad():
             UpperCamelCase_: List[str]   				=    model(**self._prepare_for_class(_lowerCamelCase  ,      _lowerCamelCase							)							)

           if hasattr(self.model_tester  ,      'num_hidden_states_types'							):
             UpperCamelCase_: Optional[int]   				=    self.model_tester.num_hidden_states_types
           else:
             # also another +1 for reshaped_hidden_states
             UpperCamelCase_: List[str]   				=    2
           self.assertEqual(out_len + added_hidden_states  ,      len(_lowerCamelCase							)							)

           UpperCamelCase_: str   				=    outputs.attentions

           self.assertEqual(len(_lowerCamelCase							)  ,      _lowerCamelCase							)

           self.assertListEqual(
               list(self_attentions[0].shape[-3:]							)  ,      [self.model_tester.num_heads[0], window_size_squared, window_size_squared]  ,      )





       def       _a   ( self  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase							):
         UpperCamelCase_: Any   				=    model_class(_lowerCamelCase							)
         model.to(_lowerCamelCase							)
         model.eval()

         with torch.no_grad():
           UpperCamelCase_: str   				=    model(**self._prepare_for_class(_lowerCamelCase  ,      _lowerCamelCase							)							)

         UpperCamelCase_: List[str]   				=    outputs.hidden_states

         UpperCamelCase_: int   				=    getattr(
             self.model_tester  ,      'expected_num_hidden_layers'  ,      len(self.model_tester.depths							) + 1							)
         self.assertEqual(len(_lowerCamelCase							)  ,      _lowerCamelCase							)

         # Swinv2 has a different seq_length
         UpperCamelCase_: Optional[Any]   				=    (
             config.patch_size
             if isinstance(config.patch_size  ,      collections.abc.Iterable							)
             else (config.patch_size, config.patch_size)
         )

         UpperCamelCase_: List[str]   				=    (image_size[1] // patch_size[1]) * (image_size[0] // patch_size[0])

         self.assertListEqual(
             list(hidden_states[0].shape[-2:]							)  ,      [num_patches, self.model_tester.embed_dim]  ,      )

         UpperCamelCase_: Union[str, Any]   				=    outputs.reshaped_hidden_states
         self.assertEqual(len(_lowerCamelCase							)  ,      _lowerCamelCase							)

         UpperCamelCase_				,UpperCamelCase_				,UpperCamelCase_				,UpperCamelCase_: str   				=    reshaped_hidden_states[0].shape
         UpperCamelCase_: List[str]   				=    (
             reshaped_hidden_states[0].view(_lowerCamelCase  ,      _lowerCamelCase  ,      height * width							).permute(0  ,      2  ,      1							)
         )
         self.assertListEqual(
             list(reshaped_hidden_states.shape[-2:]							)  ,      [num_patches, self.model_tester.embed_dim]  ,      )





       def       _a   ( self							):
         UpperCamelCase_				,UpperCamelCase_: Optional[int]   				=    self.model_tester.prepare_config_and_inputs_for_common()

         UpperCamelCase_: int   				=    (
             self.model_tester.image_size
             if isinstance(self.model_tester.image_size  ,      collections.abc.Iterable							)
             else (self.model_tester.image_size, self.model_tester.image_size)
         )

         for model_class in self.all_model_classes:
           UpperCamelCase_: Any   				=    True
           self.check_hidden_states_output(_lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase							)

           # check that output_hidden_states also work using config
           del inputs_dict["output_hidden_states"]
           UpperCamelCase_: Dict   				=    True

           self.check_hidden_states_output(_lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase							)





       def       _a   ( self							):
         UpperCamelCase_				,UpperCamelCase_: str   				=    self.model_tester.prepare_config_and_inputs_for_common()
         UpperCamelCase_: Optional[Any]   				=    3

         UpperCamelCase_: str   				=    (
             self.model_tester.image_size
             if isinstance(self.model_tester.image_size  ,      collections.abc.Iterable							)
             else (self.model_tester.image_size, self.model_tester.image_size)
         )
         UpperCamelCase_: Any   				=    (
             config.patch_size
             if isinstance(config.patch_size  ,      collections.abc.Iterable							)
             else (config.patch_size, config.patch_size)
         )

         UpperCamelCase_: int   				=    image_size[0] + patch_size[0] - (image_size[0] % patch_size[0])
         UpperCamelCase_: Optional[int]   				=    image_size[1] + patch_size[1] - (image_size[1] % patch_size[1])

         for model_class in self.all_model_classes:
           UpperCamelCase_: int   				=    True
           self.check_hidden_states_output(_lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      (padded_height, padded_width)							)

           # check that output_hidden_states also work using config
           del inputs_dict["output_hidden_states"]
           UpperCamelCase_: Tuple   				=    True
           self.check_hidden_states_output(_lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      (padded_height, padded_width)							)





       def       _a   ( self							):
         UpperCamelCase_: Any   				=    self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_for_masked_image_modeling(*_lowerCamelCase							)





       def       _a   ( self							):
         UpperCamelCase_: List[Any]   				=    self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_for_image_classification(*_lowerCamelCase							)





       @slow
       def       _a   ( self							):
         for model_name in SWINV2_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
           UpperCamelCase_: List[Any]   				=    SwinvaModel.from_pretrained(_lowerCamelCase							)
           self.assertIsNotNone(_lowerCamelCase							)





       def       _a   ( self							):
         UpperCamelCase_				,UpperCamelCase_: List[str]   				=    self.model_tester.prepare_config_and_inputs_for_common()

         UpperCamelCase_: Optional[Any]   				=    _config_zero_init(_lowerCamelCase							)
         for model_class in self.all_model_classes:
           UpperCamelCase_: str   				=    model_class(config=_lowerCamelCase							)
           for name, param in model.named_parameters():
             if "embeddings" not in name and "logit_scale" not in name and param.requires_grad:
               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'''  ,      )







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





       """simple docstring"""







       @cached_property
       def       _a   ( self							):
         return (
             AutoImageProcessor.from_pretrained('microsoft/swinv2-tiny-patch4-window8-256'							)
             if is_vision_available()
             else None
         )





       @slow
       def       _a   ( self							):
         UpperCamelCase_: str   				=    SwinvaForImageClassification.from_pretrained('microsoft/swinv2-tiny-patch4-window8-256'							).to(
             _lowerCamelCase							)
         UpperCamelCase_: List[Any]   				=    self.default_image_processor

         UpperCamelCase_: str   				=    Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png'							)
         UpperCamelCase_: Any   				=    image_processor(images=_lowerCamelCase  ,      return_tensors='pt'							).to(_lowerCamelCase							)

         # forward pass
         with torch.no_grad():
           UpperCamelCase_: str   				=    model(**_lowerCamelCase							)

         # verify the logits
         UpperCamelCase_: Tuple   				=    torch.Size((1, 1_0_0_0)							)
         self.assertEqual(outputs.logits.shape  ,      _lowerCamelCase							)
         UpperCamelCase_: Dict   				=    torch.tensor([-0.3_9_4_7, -0.4_3_0_6, 0.0_0_2_6]							).to(_lowerCamelCase							)
         self.assertTrue(torch.allclose(outputs.logits[0, :3]  ,      _lowerCamelCase  ,      atol=1e-4							)							)







from abc import ABC, abstractmethod
from argparse import ArgumentParser




class     _lowerCAmelCase(	UpperCAmelCase_ ):





       """simple docstring"""







       @staticmethod
       @abstractmethod
       def       _a   ( _lowerCamelCase							):
         raise NotImplementedError()





       @abstractmethod
       def       _a   ( self							):
         raise NotImplementedError()