






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





							"""simple docstring"""





							def __init__(   self:     Tuple				,		__A:     Any				,		__A:     Optional[Any]=13				,		__A:     Any=32				,		__A:     Tuple=2				,		__A:     List[Any]=3				,		__A:     Optional[Any]=16				,		__A:     List[Any]=[1, 2, 1]				,		__A:     Tuple=[2, 2, 4]				,		__A:     Any=2				,		__A:     int=2.0				,		__A:     int=True				,		__A:     Optional[int]=0.0				,		__A:     List[Any]=0.0				,		__A:     List[str]=0.1				,		__A:     Optional[int]="gelu"				,		__A:     Tuple=False				,		__A:     int=True				,		__A:     Optional[int]=0.0_2				,		__A:     Tuple=1e-5				,		__A:     Any=True				,		__A:     Any=None				,		__A:     int=True				,		__A:     Dict=10				,		__A:     Tuple=8				,		):

												'''simple docstring'''

												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  lowercase		(   self:     Any    ):

												'''simple docstring'''

												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  lowercase		(   self:     Optional[int]    ):

												'''simple docstring'''

												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  lowercase		(   self:     Any				,		__A:     int				,		__A:     Optional[Any]				,		__A:     List[Any]    ):

												'''simple docstring'''

												a__          =  SwinvaModel(config=__A    )
												model.to(__A    )
												model.eval()
												a__          =  model(__A    )

												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  lowercase		(   self:     Any				,		__A:     List[str]				,		__A:     int				,		__A:     int    ):

												'''simple docstring'''

												a__          =  SwinvaForMaskedImageModeling(config=__A    )
												model.to(__A    )
												model.eval()
												a__          =  model(__A    )
												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(__A    )
												model.to(__A    )
												model.eval()

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




							def  lowercase		(   self:     Union[str, Any]				,		__A:     List[Any]				,		__A:     List[Any]				,		__A:     Optional[Any]    ):

												'''simple docstring'''

												a__          =  self.type_sequence_label_size
												a__          =  SwinvaForImageClassification(__A    )
												model.to(__A    )
												model.eval()
												a__          =  model(__A				,		labels=__A    )
												self.parent.assertEqual(result.logits.shape				,		(self.batch_size, self.type_sequence_label_size)    )





							def  lowercase		(   self:     Optional[int]    ):

												'''simple docstring'''

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







@require_torch
class        _SCREAMING_SNAKE_CASE						(  __snake_case       , __snake_case       , unittest.TestCase							):





							"""simple docstring"""





							_SCREAMING_SNAKE_CASE    =(
							    (SwinvaModel, SwinvaForImageClassification, SwinvaForMaskedImageModeling) if is_torch_available() else ()
							)
							_SCREAMING_SNAKE_CASE    =(
							    {'feature-extraction': SwinvaModel, 'image-classification': SwinvaForImageClassification}
							    if is_torch_available()
							    else {}
							)

							_SCREAMING_SNAKE_CASE    =False
							_SCREAMING_SNAKE_CASE    =False
							_SCREAMING_SNAKE_CASE    =False
							_SCREAMING_SNAKE_CASE    =False




							def  lowercase		(   self:     int    ):

												'''simple docstring'''

												a__          =  SwinvaModelTester(self    )
												a__          =  ConfigTester(self				,		config_class=__A				,		embed_dim=37    )




							def  lowercase		(   self:     List[str]    ):

												'''simple docstring'''

												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  lowercase		(   self:     Dict    ):

												'''simple docstring'''

												a__          =  self.model_tester.prepare_config_and_inputs()
												self.model_tester.create_and_check_model(*__A    )




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

												'''simple docstring'''

												pass




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

												'''simple docstring'''

												pass




							def  lowercase		(   self:     Union[str, Any]    ):

												'''simple docstring'''

												a__       ,a__          =  self.model_tester.prepare_config_and_inputs_for_common()

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




							def  lowercase		(   self:     str    ):

												'''simple docstring'''

												a__       ,a__          =  self.model_tester.prepare_config_and_inputs_for_common()

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




							def  lowercase		(   self:     List[str]    ):

												'''simple docstring'''

												a__       ,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(__A    )
																	model.to(__A    )
																	model.eval()
																	with torch.no_grad():
																						a__          =  model(**self._prepare_for_class(__A				,		__A    )    )
																	a__          =  outputs.attentions
																	a__          =  len(self.model_tester.depths    )
																	self.assertEqual(len(__A    )				,		__A    )

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

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

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

																	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(__A    )    )

																	a__          =  outputs.attentions

																	self.assertEqual(len(__A    )				,		__A    )

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




							def  lowercase		(   self:     Union[str, Any]				,		__A:     Dict				,		__A:     int				,		__A:     List[str]				,		__A:     Tuple    ):

												'''simple docstring'''

												a__          =  model_class(__A    )
												model.to(__A    )
												model.eval()

												with torch.no_grad():
																	a__          =  model(**self._prepare_for_class(__A				,		__A    )    )

												a__          =  outputs.hidden_states

												a__          =  getattr(
												    self.model_tester				,		'''expected_num_hidden_layers'''				,		len(self.model_tester.depths    ) + 1    )
												self.assertEqual(len(__A    )				,		__A    )

												# 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(__A    )				,		__A    )

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




							def  lowercase		(   self:     int    ):

												'''simple docstring'''

												a__       ,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(__A				,		__A				,		__A				,		__A    )

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

																	self.check_hidden_states_output(__A				,		__A				,		__A				,		__A    )




							def  lowercase		(   self:     List[Any]    ):

												'''simple docstring'''

												a__       ,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(__A				,		__A				,		__A				,		(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(__A				,		__A				,		__A				,		(padded_height, padded_width)    )




							def  lowercase		(   self:     Optional[Any]    ):

												'''simple docstring'''

												a__          =  self.model_tester.prepare_config_and_inputs()
												self.model_tester.create_and_check_for_masked_image_modeling(*__A    )




							def  lowercase		(   self:     str    ):

												'''simple docstring'''

												a__          =  self.model_tester.prepare_config_and_inputs()
												self.model_tester.create_and_check_for_image_classification(*__A    )




							@slow
							def  lowercase		(   self:     str    ):

												'''simple docstring'''

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





							def  lowercase		(   self:     Dict    ):

												'''simple docstring'''

												a__       ,a__          =  self.model_tester.prepare_config_and_inputs_for_common()

												a__          =  _config_zero_init(__A    )
												for model_class in self.all_model_classes:
																	a__          =  model_class(config=__A    )
																	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        _SCREAMING_SNAKE_CASE						(  unittest.TestCase							):





							"""simple docstring"""





							@cached_property
							def  lowercase		(   self:     Dict    ):

												'''simple docstring'''

												return (
												    AutoImageProcessor.from_pretrained('''microsoft/swinv2-tiny-patch4-window8-256'''    )
												    if is_vision_available()
												    else None
												)





							@slow
							def  lowercase		(   self:     Tuple    ):

												'''simple docstring'''

												a__          =  SwinvaForImageClassification.from_pretrained('''microsoft/swinv2-tiny-patch4-window8-256'''    ).to(
												    __A    )
												a__          =  self.default_image_processor

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

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

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










"""simple docstring"""







from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_tf_available,
    is_torch_available,
    is_vision_available,
)


__a       :	Tuple             = {'configuration_deit': ['DEIT_PRETRAINED_CONFIG_ARCHIVE_MAP', 'DeiTConfig', 'DeiTOnnxConfig']}

try:
	if not is_vision_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	__a       :	Tuple             = ['DeiTFeatureExtractor']
	__a       :	Optional[Any]             = ['DeiTImageProcessor']

try:
	if not is_torch_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	__a       :	Optional[int]             = [
	    'DEIT_PRETRAINED_MODEL_ARCHIVE_LIST',
	    'DeiTForImageClassification',
	    'DeiTForImageClassificationWithTeacher',
	    'DeiTForMaskedImageModeling',
	    'DeiTModel',
	    'DeiTPreTrainedModel',
	]

try:
	if not is_tf_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	__a       :	Dict             = [
	    'TF_DEIT_PRETRAINED_MODEL_ARCHIVE_LIST',
	    'TFDeiTForImageClassification',
	    'TFDeiTForImageClassificationWithTeacher',
	    'TFDeiTForMaskedImageModeling',
	    'TFDeiTModel',
	    'TFDeiTPreTrainedModel',
	]


if TYPE_CHECKING:
	from .configuration_deit import DEIT_PRETRAINED_CONFIG_ARCHIVE_MAP, DeiTConfig, DeiTOnnxConfig

	try:
		if not is_vision_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .feature_extraction_deit import DeiTFeatureExtractor
		from .image_processing_deit import DeiTImageProcessor

	try:
		if not is_torch_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_deit import (
		    DEIT_PRETRAINED_MODEL_ARCHIVE_LIST,
		    DeiTForImageClassification,
		    DeiTForImageClassificationWithTeacher,
		    DeiTForMaskedImageModeling,
		    DeiTModel,
		    DeiTPreTrainedModel,
		)

	try:
		if not is_tf_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_tf_deit import (
		    TF_DEIT_PRETRAINED_MODEL_ARCHIVE_LIST,
		    TFDeiTForImageClassification,
		    TFDeiTForImageClassificationWithTeacher,
		    TFDeiTForMaskedImageModeling,
		    TFDeiTModel,
		    TFDeiTPreTrainedModel,
		)


else:
	import sys

	__a       :	List[Any]             = _LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)


