


"""simple docstring"""


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__    :







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







						def __a    (				self :     Optional[int]		):
								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.type_sequence_label_size		)

								A       							=			self.get_config()

								return config, pixel_values, labels







						def __a    (				self :     List[Any]		):
								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 :     List[str]      ,      _lowercase :     Optional[Any]      ,      _lowercase :     str      ,      _lowercase :     Dict		):
								A       							=			SwinvaModel(config=lowercase__		)
								model.to(lowercase__		)
								model.eval()
								A       							=			model(lowercase__		)

								A       							=			((config.image_size // config.patch_size) ** 2) // (4 ** (len(config.depths		) - 1))
								A       							=			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 :     List[Any]      ,      _lowercase :     List[str]      ,      _lowercase :     Union[str, Any]      ,      _lowercase :     Union[str, Any]		):
								A       							=			SwinvaForMaskedImageModeling(config=lowercase__		)
								model.to(lowercase__		)
								model.eval()
								A       							=			model(lowercase__		)
								self.parent.assertEqual(
								    result.logits.shape      ,      (self.batch_size, self.num_channels, self.image_size, self.image_size)		)

								# test greyscale images
								A       							=			1
								A       							=			SwinvaForMaskedImageModeling(lowercase__		)
								model.to(lowercase__		)
								model.eval()

								A       							=			floats_tensor([self.batch_size, 1, self.image_size, self.image_size]		)
								A       							=			model(lowercase__		)
								self.parent.assertEqual(result.logits.shape      ,      (self.batch_size, 1, self.image_size, self.image_size)		)







						def __a    (				self :     Optional[Any]      ,      _lowercase :     Any      ,      _lowercase :     List[Any]      ,      _lowercase :     Optional[Any]		):
								A       							=			self.type_sequence_label_size
								A       							=			SwinvaForImageClassification(lowercase__		)
								model.to(lowercase__		)
								model.eval()
								A       							=			model(lowercase__      ,      labels=lowercase__		)
								self.parent.assertEqual(result.logits.shape      ,      (self.batch_size, self.type_sequence_label_size)		)







						def __a    (				self :     Any		):
								A       							=			self.prepare_config_and_inputs()
								A       							=			config_and_inputs
								A       							=			{"""pixel_values""": pixel_values}
								return config, inputs_dict



@require_torch
class       lowerCamelCase__    ( snake_case_				,     snake_case_				,     unittest.TestCase      ):
						lowerCAmelCase  	=  (
						    (SwinvaModel, SwinvaForImageClassification, SwinvaForMaskedImageModeling) if is_torch_available() else ()
						)
						lowerCAmelCase  	=  (
						    {'''feature-extraction''': SwinvaModel, '''image-classification''': SwinvaForImageClassification}
						    if is_torch_available()
						    else {}
						)

						lowerCAmelCase  	=  False
						lowerCAmelCase  	=  False
						lowerCAmelCase  	=  False
						lowerCAmelCase  	=  False







						def __a    (				self :     str		):
								A       							=			SwinvaModelTester(self		)
								A       							=			ConfigTester(self      ,      config_class=lowercase__      ,      embed_dim=37		)







						def __a    (				self :     Union[str, Any]		):
								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 :     Union[str, Any]		):
								A       							=			self.model_tester.prepare_config_and_inputs()
								self.model_tester.create_and_check_model(*lowercase__		)







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







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







						def __a    (				self :     Optional[Any]		):
								A       							=			self.model_tester.prepare_config_and_inputs_for_common()

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







						def __a    (				self :     int		):
								A       							=			self.model_tester.prepare_config_and_inputs_for_common()

								for model_class in self.all_model_classes:
										A       							=			model_class(lowercase__		)
										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]      ,      lowercase__		)







						def __a    (				self :     str		):
								A       							=			self.model_tester.prepare_config_and_inputs_for_common()
								A       							=			True

								for model_class in self.all_model_classes:
										A       							=			True
										A       							=			False
										A       							=			True
										A       							=			model_class(lowercase__		)
										model.to(lowercase__		)
										model.eval()
										with torch.no_grad():
												A       							=			model(**self._prepare_for_class(lowercase__      ,      lowercase__		)		)
										A       							=			outputs.attentions
										A       							=			len(self.model_tester.depths		)
										self.assertEqual(len(lowercase__		)      ,      lowercase__		)

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

										self.assertListEqual(
										    list(attentions[0].shape[-3:]		)      ,      [self.model_tester.num_heads[0], window_size_squared, window_size_squared]      ,      )
										A       							=			len(lowercase__		)

										# Check attention is always last and order is fine
										A       							=			True
										A       							=			True
										A       							=			model_class(lowercase__		)
										model.to(lowercase__		)
										model.eval()
										with torch.no_grad():
												A       							=			model(**self._prepare_for_class(lowercase__      ,      lowercase__		)		)

										if hasattr(self.model_tester      ,      'num_hidden_states_types'		):
												A       							=			self.model_tester.num_hidden_states_types
										else:
												# also another +1 for reshaped_hidden_states
												A       							=			2
										self.assertEqual(out_len + added_hidden_states      ,      len(lowercase__		)		)

										A       							=			outputs.attentions

										self.assertEqual(len(lowercase__		)      ,      lowercase__		)

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







						def __a    (				self :     str      ,      _lowercase :     List[Any]      ,      _lowercase :     str      ,      _lowercase :     Optional[Any]      ,      _lowercase :     int		):
								A       							=			model_class(lowercase__		)
								model.to(lowercase__		)
								model.eval()

								with torch.no_grad():
										A       							=			model(**self._prepare_for_class(lowercase__      ,      lowercase__		)		)

								A       							=			outputs.hidden_states

								A       							=			getattr(
								    self.model_tester      ,      'expected_num_hidden_layers'      ,      len(self.model_tester.depths		) + 1		)
								self.assertEqual(len(lowercase__		)      ,      lowercase__		)

								# Swinv2 has a different seq_length
								A       							=			(
								    config.patch_size
								    if isinstance(config.patch_size      ,      collections.abc.Iterable		)
								    else (config.patch_size, config.patch_size)
								)

								A       							=			(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]      ,      )

								A       							=			outputs.reshaped_hidden_states
								self.assertEqual(len(lowercase__		)      ,      lowercase__		)

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







						def __a    (				self :     Union[str, Any]		):
								A       							=			self.model_tester.prepare_config_and_inputs_for_common()

								A       							=			(
								    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:
										A       							=			True
										self.check_hidden_states_output(lowercase__      ,      lowercase__      ,      lowercase__      ,      lowercase__		)

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

										self.check_hidden_states_output(lowercase__      ,      lowercase__      ,      lowercase__      ,      lowercase__		)







						def __a    (				self :     Tuple		):
								A       							=			self.model_tester.prepare_config_and_inputs_for_common()
								A       							=			3

								A       							=			(
								    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)
								)
								A       							=			(
								    config.patch_size
								    if isinstance(config.patch_size      ,      collections.abc.Iterable		)
								    else (config.patch_size, config.patch_size)
								)

								A       							=			image_size[0] + patch_size[0] - (image_size[0] % patch_size[0])
								A       							=			image_size[1] + patch_size[1] - (image_size[1] % patch_size[1])

								for model_class in self.all_model_classes:
										A       							=			True
										self.check_hidden_states_output(lowercase__      ,      lowercase__      ,      lowercase__      ,      (padded_height, padded_width)		)

										# check that output_hidden_states also work using config
										del inputs_dict["output_hidden_states"]
										A       							=			True
										self.check_hidden_states_output(lowercase__      ,      lowercase__      ,      lowercase__      ,      (padded_height, padded_width)		)







						def __a    (				self :     str		):
								A       							=			self.model_tester.prepare_config_and_inputs()
								self.model_tester.create_and_check_for_masked_image_modeling(*lowercase__		)







						def __a    (				self :     Any		):
								A       							=			self.model_tester.prepare_config_and_inputs()
								self.model_tester.create_and_check_for_image_classification(*lowercase__		)







						@slow
						def __a    (				self :     Any		):

								for model_name in SWINV2_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
										A       							=			SwinvaModel.from_pretrained(lowercase__		)
										self.assertIsNotNone(lowercase__		)







						def __a    (				self :     Any		):
								A       							=			self.model_tester.prepare_config_and_inputs_for_common()

								A       							=			_config_zero_init(lowercase__		)
								for model_class in self.all_model_classes:
										A       							=			model_class(config=lowercase__		)
										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      ):







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







						@slow
						def __a    (				self :     Tuple		):
								A       							=			SwinvaForImageClassification.from_pretrained('microsoft/swinv2-tiny-patch4-window8-256'		).to(
								    lowercase__		)
								A       							=			self.default_image_processor

								A       							=			Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png'		)
								A       							=			image_processor(images=lowercase__      ,      return_tensors='pt'		).to(lowercase__		)

								# forward pass
								with torch.no_grad():
										A       							=			model(**lowercase__		)

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











'''simple docstring'''


from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_tokenizers_available, is_torch_available


lowerCAmelCase_      :  Dict				     =  {
    'configuration_graphormer': ['GRAPHORMER_PRETRAINED_CONFIG_ARCHIVE_MAP', 'GraphormerConfig'],
}

try:
 if not is_torch_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 lowerCAmelCase_      :  int				     =  [
     'GRAPHORMER_PRETRAINED_MODEL_ARCHIVE_LIST',
     'GraphormerForGraphClassification',
     'GraphormerModel',
     'GraphormerPreTrainedModel',
 ]


if TYPE_CHECKING:
 from .configuration_graphormer import GRAPHORMER_PRETRAINED_CONFIG_ARCHIVE_MAP, GraphormerConfig

 try:
  if not is_torch_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .modeling_graphormer import (
      GRAPHORMER_PRETRAINED_MODEL_ARCHIVE_LIST,
      GraphormerForGraphClassification,
      GraphormerModel,
      GraphormerPreTrainedModel,
  )


else:
 import sys

 lowerCAmelCase_      :  Tuple				     =  _LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)
