

import collections
import inspect
import unittest
from typing import Dict, List, Tuple

from transformers import MaskFormerSwinConfig
from transformers.testing_utils import require_torch, require_torch_multi_gpu, torch_device
from transformers.utils import is_torch_available

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


if is_torch_available():
						import torch
						from torch import nn

						from transformers import MaskFormerSwinBackbone
						from transformers.models.maskformer import MaskFormerSwinModel



class   __lowercase				:




			"""simple docstring"""







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



			def        _SCREAMING_SNAKE_CASE			( self  :     int):
									SCREAMING_SNAKE_CASE_: Union[str, Any]  		=       floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size])

									SCREAMING_SNAKE_CASE_: List[str]  		=       None
									if self.use_labels:
															SCREAMING_SNAKE_CASE_: Tuple  		=       ids_tensor([self.batch_size]   ,						self.type_sequence_label_size)

									SCREAMING_SNAKE_CASE_: Optional[int]  		=       self.get_config()

									return config, pixel_values, labels



			def        _SCREAMING_SNAKE_CASE			( self  :     List[Any]):
									return MaskFormerSwinConfig(
									    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   ,						out_features=self.out_features   ,						out_indices=self.out_indices   ,						)



			def        _SCREAMING_SNAKE_CASE			( self  :     Any   ,						lowerCAmelCase__  :     Tuple   ,						lowerCAmelCase__  :     List[Any]   ,						lowerCAmelCase__  :     str):
									SCREAMING_SNAKE_CASE_: Optional[int]  		=       MaskFormerSwinModel(config=lowerCAmelCase__)
									model.to(lowerCAmelCase__)
									model.eval()
									SCREAMING_SNAKE_CASE_: Tuple  		=       model(lowerCAmelCase__)

									SCREAMING_SNAKE_CASE_: Any  		=       ((config.image_size // config.patch_size) ** 2) // (4 ** (len(config.depths) - 1))
									SCREAMING_SNAKE_CASE_: Dict  		=       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        _SCREAMING_SNAKE_CASE			( self  :     Union[str, Any]   ,						lowerCAmelCase__  :     Any   ,						lowerCAmelCase__  :     Tuple   ,						lowerCAmelCase__  :     str):
									SCREAMING_SNAKE_CASE_: List[Any]  		=       MaskFormerSwinBackbone(config=lowerCAmelCase__)
									model.to(lowerCAmelCase__)
									model.eval()
									SCREAMING_SNAKE_CASE_: List[Any]  		=       model(lowerCAmelCase__)

									# verify feature maps
									self.parent.assertEqual(len(result.feature_maps)   ,						len(config.out_features))
									self.parent.assertListEqual(list(result.feature_maps[0].shape)   ,						[13, 16, 16, 16])

									# verify channels
									self.parent.assertEqual(len(model.channels)   ,						len(config.out_features))
									self.parent.assertListEqual(model.channels   ,						[16, 32, 64])

									# verify ValueError
									with self.parent.assertRaises(lowerCAmelCase__):
															SCREAMING_SNAKE_CASE_: Optional[Any]  		=       ["stem"]
															SCREAMING_SNAKE_CASE_: Dict  		=       MaskFormerSwinBackbone(config=lowerCAmelCase__)




			def        _SCREAMING_SNAKE_CASE			( self  :     List[str]):
									SCREAMING_SNAKE_CASE_: Tuple  		=       self.prepare_config_and_inputs()
									SCREAMING_SNAKE_CASE_		,    SCREAMING_SNAKE_CASE_		,    SCREAMING_SNAKE_CASE_: Optional[int]  		=       config_and_inputs
									SCREAMING_SNAKE_CASE_: int  		=       {"pixel_values": pixel_values}
									return config, inputs_dict







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




			"""simple docstring"""







			_UpperCAmelCase   :							Optional[int]										=     (
			    (
			        MaskFormerSwinModel,
			        MaskFormerSwinBackbone,
			    )
			    if is_torch_available()
			    else ()
			)
			_UpperCAmelCase   :							List[Any]										=     {'''feature-extraction''': MaskFormerSwinModel} if is_torch_available() else {}
			_UpperCAmelCase   :							str										=     False
			_UpperCAmelCase   :							Optional[Any]										=     False
			_UpperCAmelCase   :							Union[str, Any]										=     False
			_UpperCAmelCase   :							Optional[Any]										=     False
			_UpperCAmelCase   :							Optional[int]										=     False



			def        _SCREAMING_SNAKE_CASE			( self  :     List[Any]):
									SCREAMING_SNAKE_CASE_: Dict  		=       MaskFormerSwinModelTester(self)
									SCREAMING_SNAKE_CASE_: Tuple  		=       ConfigTester(self   ,						config_class=lowerCAmelCase__   ,						embed_dim=37)



			@require_torch_multi_gpu
			@unittest.skip(
			    reason=(
			        "`MaskFormerSwinModel` outputs `hidden_states_spatial_dimensions` which doesn't work well with"
			        " `nn.DataParallel`"
			    ))
			def        _SCREAMING_SNAKE_CASE			( self  :     List[str]):
									pass



			def        _SCREAMING_SNAKE_CASE			( self  :     Any):
									self.create_and_test_config_common_properties()
									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        _SCREAMING_SNAKE_CASE			( self  :     Optional[Any]):
									return



			def        _SCREAMING_SNAKE_CASE			( self  :     Dict):
									SCREAMING_SNAKE_CASE_: List[str]  		=       self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_model(*lowerCAmelCase__)



			def        _SCREAMING_SNAKE_CASE			( self  :     List[Any]):
									SCREAMING_SNAKE_CASE_: List[str]  		=       self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_backbone(*lowerCAmelCase__)



			@unittest.skip("Swin does not use inputs_embeds")
			def        _SCREAMING_SNAKE_CASE			( self  :     Optional[int]):
									pass



			@unittest.skip("Swin does not support feedforward chunking")
			def        _SCREAMING_SNAKE_CASE			( self  :     List[str]):
									pass



			def        _SCREAMING_SNAKE_CASE			( self  :     Dict):
									SCREAMING_SNAKE_CASE_		,    SCREAMING_SNAKE_CASE_: Optional[Any]  		=       self.model_tester.prepare_config_and_inputs_for_common()

									for model_class in self.all_model_classes:
															SCREAMING_SNAKE_CASE_: List[Any]  		=       model_class(lowerCAmelCase__)
															self.assertIsInstance(model.get_input_embeddings()   ,						(nn.Module))
															SCREAMING_SNAKE_CASE_: Union[str, Any]  		=       model.get_output_embeddings()
															self.assertTrue(x is None or isinstance(lowerCAmelCase__   ,						nn.Linear))



			def        _SCREAMING_SNAKE_CASE			( self  :     int):
									SCREAMING_SNAKE_CASE_		,    SCREAMING_SNAKE_CASE_: Any  		=       self.model_tester.prepare_config_and_inputs_for_common()

									for model_class in self.all_model_classes:
															SCREAMING_SNAKE_CASE_: Tuple  		=       model_class(lowerCAmelCase__)
															SCREAMING_SNAKE_CASE_: Dict  		=       inspect.signature(model.forward)
															# signature.parameters is an OrderedDict => so arg_names order is deterministic
															SCREAMING_SNAKE_CASE_: List[Any]  		=       [*signature.parameters.keys()]

															SCREAMING_SNAKE_CASE_: Dict  		=       ["pixel_values"]
															self.assertListEqual(arg_names[:1]   ,						lowerCAmelCase__)



			@unittest.skip(reason="MaskFormerSwin is only used as backbone and doesn't support output_attentions")
			def        _SCREAMING_SNAKE_CASE			( self  :     List[Any]):
									pass



			@unittest.skip(reason="MaskFormerSwin is only used as an internal backbone")
			def        _SCREAMING_SNAKE_CASE			( self  :     Tuple):
									pass



			def        _SCREAMING_SNAKE_CASE			( self  :     Optional[Any]   ,						lowerCAmelCase__  :     List[Any]   ,						lowerCAmelCase__  :     Any   ,						lowerCAmelCase__  :     Optional[Any]   ,						lowerCAmelCase__  :     Optional[Any]):
									SCREAMING_SNAKE_CASE_: List[str]  		=       model_class(lowerCAmelCase__)
									model.to(lowerCAmelCase__)
									model.eval()

									with torch.no_grad():
															SCREAMING_SNAKE_CASE_: List[Any]  		=       model(**self._prepare_for_class(lowerCAmelCase__   ,						lowerCAmelCase__))

									SCREAMING_SNAKE_CASE_: List[Any]  		=       outputs.hidden_states

									SCREAMING_SNAKE_CASE_: int  		=       getattr(
									    self.model_tester   ,						"expected_num_hidden_layers"   ,						len(self.model_tester.depths) + 1)
									self.assertEqual(len(lowerCAmelCase__)   ,						lowerCAmelCase__)

									# Swin has a different seq_length
									SCREAMING_SNAKE_CASE_: Dict  		=       (
									    config.patch_size
									    if isinstance(config.patch_size   ,						collections.abc.Iterable)
									    else (config.patch_size, config.patch_size)
									)

									SCREAMING_SNAKE_CASE_: 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]   ,						)



			def        _SCREAMING_SNAKE_CASE			( self  :     str):
									SCREAMING_SNAKE_CASE_		,    SCREAMING_SNAKE_CASE_: List[Any]  		=       self.model_tester.prepare_config_and_inputs_for_common()

									SCREAMING_SNAKE_CASE_: List[Any]  		=       (
									    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:
															SCREAMING_SNAKE_CASE_: Optional[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"]
															SCREAMING_SNAKE_CASE_: Optional[Any]  		=       True

															self.check_hidden_states_output(lowerCAmelCase__   ,						lowerCAmelCase__   ,						lowerCAmelCase__   ,						lowerCAmelCase__)



			def        _SCREAMING_SNAKE_CASE			( self  :     int):
									SCREAMING_SNAKE_CASE_		,    SCREAMING_SNAKE_CASE_: Optional[Any]  		=       self.model_tester.prepare_config_and_inputs_for_common()
									SCREAMING_SNAKE_CASE_: int  		=       3

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

									SCREAMING_SNAKE_CASE_: Dict  		=       image_size[0] + patch_size[0] - (image_size[0] % patch_size[0])
									SCREAMING_SNAKE_CASE_: Union[str, Any]  		=       image_size[1] + patch_size[1] - (image_size[1] % patch_size[1])

									for model_class in self.all_model_classes:
															SCREAMING_SNAKE_CASE_: Optional[Any]  		=       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"]
															SCREAMING_SNAKE_CASE_: Optional[Any]  		=       True
															self.check_hidden_states_output(lowerCAmelCase__   ,						lowerCAmelCase__   ,						lowerCAmelCase__   ,						(padded_height, padded_width))



			@unittest.skip(reason="MaskFormerSwin doesn't have pretrained checkpoints")
			def        _SCREAMING_SNAKE_CASE			( self  :     Any):
									pass



			@unittest.skip(reason="This will be fixed once MaskFormerSwin is replaced by native Swin")
			def        _SCREAMING_SNAKE_CASE			( self  :     str):
									pass



			@unittest.skip(reason="This will be fixed once MaskFormerSwin is replaced by native Swin")
			def        _SCREAMING_SNAKE_CASE			( self  :     Any):
									pass




			def        _SCREAMING_SNAKE_CASE			( self  :     List[str]):
									SCREAMING_SNAKE_CASE_		,    SCREAMING_SNAKE_CASE_: Union[str, Any]  		=       self.model_tester.prepare_config_and_inputs_for_common()

									def set_nan_tensor_to_zero(lowerCAmelCase__  :     List[str]):
															SCREAMING_SNAKE_CASE_: Optional[int]  		=       0
															return t

									def check_equivalence(lowerCAmelCase__  :     Union[str, Any]   ,						lowerCAmelCase__  :     str   ,						lowerCAmelCase__  :     int   ,						lowerCAmelCase__  :     Union[str, Any]={}):
															with torch.no_grad():
																					SCREAMING_SNAKE_CASE_: Optional[Any]  		=       model(**lowerCAmelCase__   ,						return_dict=lowerCAmelCase__   ,						**lowerCAmelCase__)
																					SCREAMING_SNAKE_CASE_: Union[str, Any]  		=       model(**lowerCAmelCase__   ,						return_dict=lowerCAmelCase__   ,						**lowerCAmelCase__).to_tuple()

																					def recursive_check(lowerCAmelCase__  :     Tuple   ,						lowerCAmelCase__  :     Optional[int]):
																											if isinstance(lowerCAmelCase__   ,						(List, Tuple)):
																																	for tuple_iterable_value, dict_iterable_value in zip(lowerCAmelCase__   ,						lowerCAmelCase__):
																																							recursive_check(lowerCAmelCase__   ,						lowerCAmelCase__)
																											elif isinstance(lowerCAmelCase__   ,						lowerCAmelCase__):
																																	for tuple_iterable_value, dict_iterable_value in zip(
																																	    tuple_object.values()   ,						dict_object.values()):
																																							recursive_check(lowerCAmelCase__   ,						lowerCAmelCase__)
																											elif tuple_object is None:
																																	return
																											else:
																																	self.assertTrue(
																																	    torch.allclose(
																																	        set_nan_tensor_to_zero(lowerCAmelCase__)   ,						set_nan_tensor_to_zero(lowerCAmelCase__)   ,						atol=1E-5)   ,						msg=(
																																	        "Tuple and dict output are not equal. Difference:"
																																	        F" {torch.max(torch.abs(tuple_object - dict_object))}. Tuple has `nan`:"
																																	        F" {torch.isnan(lowerCAmelCase__).any()} and `inf`: {torch.isinf(lowerCAmelCase__)}. Dict has"
																																	        F" `nan`: {torch.isnan(lowerCAmelCase__).any()} and `inf`: {torch.isinf(lowerCAmelCase__)}."
																																	    )   ,						)

																					recursive_check(lowerCAmelCase__   ,						lowerCAmelCase__)

									for model_class in self.all_model_classes:
															SCREAMING_SNAKE_CASE_: Optional[int]  		=       model_class(lowerCAmelCase__)
															model.to(lowerCAmelCase__)
															model.eval()

															SCREAMING_SNAKE_CASE_: Optional[int]  		=       self._prepare_for_class(lowerCAmelCase__   ,						lowerCAmelCase__)
															SCREAMING_SNAKE_CASE_: str  		=       self._prepare_for_class(lowerCAmelCase__   ,						lowerCAmelCase__)
															check_equivalence(lowerCAmelCase__   ,						lowerCAmelCase__   ,						lowerCAmelCase__)

															SCREAMING_SNAKE_CASE_: Any  		=       self._prepare_for_class(lowerCAmelCase__   ,						lowerCAmelCase__   ,						return_labels=lowerCAmelCase__)
															SCREAMING_SNAKE_CASE_: str  		=       self._prepare_for_class(lowerCAmelCase__   ,						lowerCAmelCase__   ,						return_labels=lowerCAmelCase__)
															check_equivalence(lowerCAmelCase__   ,						lowerCAmelCase__   ,						lowerCAmelCase__)

															SCREAMING_SNAKE_CASE_: Optional[Any]  		=       self._prepare_for_class(lowerCAmelCase__   ,						lowerCAmelCase__)
															SCREAMING_SNAKE_CASE_: Dict  		=       self._prepare_for_class(lowerCAmelCase__   ,						lowerCAmelCase__)
															check_equivalence(lowerCAmelCase__   ,						lowerCAmelCase__   ,						lowerCAmelCase__   ,						{"output_hidden_states": True})

															SCREAMING_SNAKE_CASE_: List[Any]  		=       self._prepare_for_class(lowerCAmelCase__   ,						lowerCAmelCase__   ,						return_labels=lowerCAmelCase__)
															SCREAMING_SNAKE_CASE_: Any  		=       self._prepare_for_class(lowerCAmelCase__   ,						lowerCAmelCase__   ,						return_labels=lowerCAmelCase__)
															check_equivalence(lowerCAmelCase__   ,						lowerCAmelCase__   ,						lowerCAmelCase__   ,						{"output_hidden_states": True})







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




			"""simple docstring"""







			_UpperCAmelCase   :							Union[str, Any]										=     (MaskFormerSwinBackbone,) if is_torch_available() else ()
			_UpperCAmelCase   :							str										=     MaskFormerSwinConfig



			def        _SCREAMING_SNAKE_CASE			( self  :     Any):
									SCREAMING_SNAKE_CASE_: List[Any]  		=       MaskFormerSwinModelTester(self)




			def        _SCREAMING_SNAKE_CASE			( self  :     Optional[Any]):
									SCREAMING_SNAKE_CASE_		,    SCREAMING_SNAKE_CASE_: Tuple  		=       self.model_tester.prepare_config_and_inputs_for_common()
									SCREAMING_SNAKE_CASE_: Any  		=       inputs_dict["pixel_values"].shape[0]

									for backbone_class in self.all_model_classes:
															SCREAMING_SNAKE_CASE_: List[str]  		=       backbone_class(lowerCAmelCase__)
															backbone.to(lowerCAmelCase__)
															backbone.eval()

															SCREAMING_SNAKE_CASE_: Any  		=       backbone(**lowerCAmelCase__)

															# Test default outputs and verify feature maps
															self.assertIsInstance(outputs.feature_maps   ,						lowerCAmelCase__)
															self.assertTrue(len(outputs.feature_maps) == len(backbone.channels))
															for feature_map, n_channels in zip(outputs.feature_maps   ,						backbone.channels):
																					self.assertTrue(feature_map.shape[:2]   ,						(batch_size, n_channels))
															self.assertIsNone(outputs.hidden_states)
															self.assertIsNone(outputs.attentions)

															# Test output_hidden_states=True
															SCREAMING_SNAKE_CASE_: str  		=       backbone(**lowerCAmelCase__   ,						output_hidden_states=lowerCAmelCase__)
															self.assertIsNotNone(outputs.hidden_states)
															self.assertTrue(len(outputs.hidden_states)   ,						len(backbone.stage_names))
															# We skip the stem layer
															for hidden_states, n_channels in zip(outputs.hidden_states[1:]   ,						backbone.channels):
																					for hidden_state in hidden_states:
																											# Hidden states are in the format (batch_size, (height * width), n_channels)
																											SCREAMING_SNAKE_CASE_		,    SCREAMING_SNAKE_CASE_		,    SCREAMING_SNAKE_CASE_: List[Any]  		=       hidden_state.shape
																											self.assertTrue((h_batch_size, h_n_channels)   ,						(batch_size, n_channels))

            # Test output_attentions=True
															if self.has_attentions:
																					SCREAMING_SNAKE_CASE_: Dict  		=       backbone(**lowerCAmelCase__   ,						output_attentions=lowerCAmelCase__)
																					self.assertIsNotNone(outputs.attentions)









import gc
import unittest

import numpy as np
import torch
from transformers import CLIPTextConfig, CLIPTextModelWithProjection, CLIPTokenizer

from diffusers import HeunDiscreteScheduler, PriorTransformer, ShapEPipeline
from diffusers.pipelines.shap_e import ShapERenderer
from diffusers.utils import load_numpy, slow
from diffusers.utils.testing_utils import require_torch_gpu, torch_device

from ..test_pipelines_common import PipelineTesterMixin, assert_mean_pixel_difference



class   __lowercase				( UpperCAmelCase_		,       unittest.TestCase	):




			"""simple docstring"""







			_UpperCAmelCase   :							List[str]										=     ShapEPipeline
			_UpperCAmelCase   :							Tuple										=     ['''prompt''']
			_UpperCAmelCase   :							Dict										=     ['''prompt''']
			_UpperCAmelCase   :							Any										=     [
			    '''num_images_per_prompt''',
			    '''num_inference_steps''',
			    '''generator''',
			    '''latents''',
			    '''guidance_scale''',
			    '''frame_size''',
			    '''output_type''',
			    '''return_dict''',
			]
			_UpperCAmelCase   :							Optional[int]										=     False



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     List[str]):
									return 32



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     List[str]):
									return 32



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     int):
									return self.time_input_dim * 4



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     Optional[int]):
									return 8



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     int):
									SCREAMING_SNAKE_CASE_: str  		=       CLIPTokenizer.from_pretrained("hf-internal-testing/tiny-random-clip")
									return tokenizer



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     Union[str, Any]):
									torch.manual_seed(0)
									SCREAMING_SNAKE_CASE_: Optional[int]  		=       CLIPTextConfig(
									    bos_token_id=0   ,						eos_token_id=2   ,						hidden_size=self.text_embedder_hidden_size   ,						projection_dim=self.text_embedder_hidden_size   ,						intermediate_size=37   ,						layer_norm_eps=1E-05   ,						num_attention_heads=4   ,						num_hidden_layers=5   ,						pad_token_id=1   ,						vocab_size=1000   ,						)
									return CLIPTextModelWithProjection(lowerCAmelCase__)



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     Optional[Any]):
									torch.manual_seed(0)

									SCREAMING_SNAKE_CASE_: Tuple  		=       {
									    "num_attention_heads": 2,
									    "attention_head_dim": 16,
									    "embedding_dim": self.time_input_dim,
									    "num_embeddings": 32,
									    "embedding_proj_dim": self.text_embedder_hidden_size,
									    "time_embed_dim": self.time_embed_dim,
									    "num_layers": 1,
									    "clip_embed_dim": self.time_input_dim * 2,
									    "additional_embeddings": 0,
									    "time_embed_act_fn": "gelu",
									    "norm_in_type": "layer",
									    "encoder_hid_proj_type": None,
									    "added_emb_type": None,
									}

									SCREAMING_SNAKE_CASE_: Any  		=       PriorTransformer(**lowerCAmelCase__)
									return model



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     Dict):
									torch.manual_seed(0)

									SCREAMING_SNAKE_CASE_: Union[str, Any]  		=       {
									    "param_shapes": (
									        (self.renderer_dim, 93),
									        (self.renderer_dim, 8),
									        (self.renderer_dim, 8),
									        (self.renderer_dim, 8),
									    ),
									    "d_latent": self.time_input_dim,
									    "d_hidden": self.renderer_dim,
									    "n_output": 12,
									    "background": (
									        0.1,
									        0.1,
									        0.1,
									    ),
									}
									SCREAMING_SNAKE_CASE_: Optional[int]  		=       ShapERenderer(**lowerCAmelCase__)
									return model



			def        _SCREAMING_SNAKE_CASE			( self  :     List[str]):
									SCREAMING_SNAKE_CASE_: Dict  		=       self.dummy_prior
									SCREAMING_SNAKE_CASE_: Optional[Any]  		=       self.dummy_text_encoder
									SCREAMING_SNAKE_CASE_: Union[str, Any]  		=       self.dummy_tokenizer
									SCREAMING_SNAKE_CASE_: List[str]  		=       self.dummy_renderer

									SCREAMING_SNAKE_CASE_: Any  		=       HeunDiscreteScheduler(
									    beta_schedule="exp"   ,						num_train_timesteps=1024   ,						prediction_type="sample"   ,						use_karras_sigmas=lowerCAmelCase__   ,						clip_sample=lowerCAmelCase__   ,						clip_sample_range=1.0   ,						)
									SCREAMING_SNAKE_CASE_: Optional[int]  		=       {
									    "prior": prior,
									    "text_encoder": text_encoder,
									    "tokenizer": tokenizer,
									    "renderer": renderer,
									    "scheduler": scheduler,
									}

									return components



			def        _SCREAMING_SNAKE_CASE			( self  :     Any   ,						lowerCAmelCase__  :     Optional[int]   ,						lowerCAmelCase__  :     List[Any]=0):
									if str(lowerCAmelCase__).startswith("mps"):
															SCREAMING_SNAKE_CASE_: Optional[Any]  		=       torch.manual_seed(lowerCAmelCase__)
									else:
															SCREAMING_SNAKE_CASE_: Any  		=       torch.Generator(device=lowerCAmelCase__).manual_seed(lowerCAmelCase__)
									SCREAMING_SNAKE_CASE_: Union[str, Any]  		=       {
									    "prompt": "horse",
									    "generator": generator,
									    "num_inference_steps": 1,
									    "frame_size": 32,
									    "output_type": "np",
									}
									return inputs



			def        _SCREAMING_SNAKE_CASE			( self  :     Dict):
									SCREAMING_SNAKE_CASE_: str  		=       "cpu"

									SCREAMING_SNAKE_CASE_: Tuple  		=       self.get_dummy_components()

									SCREAMING_SNAKE_CASE_: Dict  		=       self.pipeline_class(**lowerCAmelCase__)
									SCREAMING_SNAKE_CASE_: Any  		=       pipe.to(lowerCAmelCase__)

									pipe.set_progress_bar_config(disable=lowerCAmelCase__)

									SCREAMING_SNAKE_CASE_: Optional[int]  		=       pipe(**self.get_dummy_inputs(lowerCAmelCase__))
									SCREAMING_SNAKE_CASE_: Optional[Any]  		=       output.images[0]
									SCREAMING_SNAKE_CASE_: Any  		=       image[0, -3:, -3:, -1]

									assert image.shape == (20, 32, 32, 3)

									SCREAMING_SNAKE_CASE_: Union[str, Any]  		=       np.array(
									    [
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									    ])

									assert np.abs(image_slice.flatten() - expected_slice).max() < 1E-2



			def        _SCREAMING_SNAKE_CASE			( self  :     Union[str, Any]):
									# NOTE: Larger batch sizes cause this test to timeout, only test on smaller batches
									self._test_inference_batch_consistent(batch_sizes=[1, 2])



			def        _SCREAMING_SNAKE_CASE			( self  :     Any):
									SCREAMING_SNAKE_CASE_: Dict  		=       torch_device == "cpu"
									SCREAMING_SNAKE_CASE_: List[Any]  		=       True

									self._test_inference_batch_single_identical(
									    batch_size=2   ,						test_max_difference=lowerCAmelCase__   ,						relax_max_difference=lowerCAmelCase__   ,						)




			def        _SCREAMING_SNAKE_CASE			( self  :     int):
									SCREAMING_SNAKE_CASE_: Dict  		=       self.get_dummy_components()
									SCREAMING_SNAKE_CASE_: str  		=       self.pipeline_class(**lowerCAmelCase__)
									SCREAMING_SNAKE_CASE_: Tuple  		=       pipe.to(lowerCAmelCase__)
									pipe.set_progress_bar_config(disable=lowerCAmelCase__)

									SCREAMING_SNAKE_CASE_: List[Any]  		=       1
									SCREAMING_SNAKE_CASE_: Any  		=       2

									SCREAMING_SNAKE_CASE_: Dict  		=       self.get_dummy_inputs(lowerCAmelCase__)

									for key in inputs.keys():
															if key in self.batch_params:
																					SCREAMING_SNAKE_CASE_: List[Any]  		=       batch_size * [inputs[key]]

									SCREAMING_SNAKE_CASE_: Tuple  		=       pipe(**lowerCAmelCase__   ,						num_images_per_prompt=lowerCAmelCase__)[0]

									assert images.shape[0] == batch_size * num_images_per_prompt







@slow
@require_torch_gpu
class   __lowercase				( unittest.TestCase	):




			"""simple docstring"""







			def        _SCREAMING_SNAKE_CASE			( self  :     Any):
									# clean up the VRAM after each test
									super().tearDown()
									gc.collect()
									torch.cuda.empty_cache()




			def        _SCREAMING_SNAKE_CASE			( self  :     str):
									SCREAMING_SNAKE_CASE_: List[str]  		=       load_numpy(
									    "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main"
									    "/shap_e/test_shap_e_np_out.npy")
									SCREAMING_SNAKE_CASE_: List[str]  		=       ShapEPipeline.from_pretrained("openai/shap-e")
									SCREAMING_SNAKE_CASE_: Optional[int]  		=       pipe.to(lowerCAmelCase__)
									pipe.set_progress_bar_config(disable=lowerCAmelCase__)

									SCREAMING_SNAKE_CASE_: int  		=       torch.Generator(device=lowerCAmelCase__).manual_seed(0)

									SCREAMING_SNAKE_CASE_: int  		=       pipe(
									    "a shark"   ,						generator=lowerCAmelCase__   ,						guidance_scale=15.0   ,						num_inference_steps=64   ,						frame_size=64   ,						output_type="np"   ,						).images[0]

									assert images.shape == (20, 64, 64, 3)

									assert_mean_pixel_difference(lowerCAmelCase__   ,						lowerCAmelCase__)






