"""simple docstring"""




import inspect
import unittest
import warnings
from math import ceil, floor

from transformers import LevitConfig
from transformers.file_utils import cached_property, is_torch_available, is_vision_available
from transformers.models.auto import get_values
from transformers.testing_utils import require_torch, require_vision, slow, torch_device

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 transformers import (
			    MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING,
			    MODEL_MAPPING,
			    LevitForImageClassification,
			    LevitForImageClassificationWithTeacher,
			    LevitModel,
			)
			from transformers.models.levit.modeling_levit import LEVIT_PRETRAINED_MODEL_ARCHIVE_LIST


if is_vision_available():
			from PIL import Image

			from transformers import LevitImageProcessor

class       a_      (     __UpperCamelCase			):




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Dict     ):
							lowerCAmelCase__        =   self.config_class(**self.inputs_dict     )
							self.parent.assertTrue(hasattr(snake_case__  ,						"""hidden_sizes"""     )     )
							self.parent.assertTrue(hasattr(snake_case__  ,						"""num_attention_heads"""     )     )

class       a_      :




					def __init__(	self						:     str  ,						snake_case__						:     Dict  ,						snake_case__						:     int=13  ,						snake_case__						:     List[str]=64  ,						snake_case__						:     List[Any]=3  ,						snake_case__						:     Tuple=3  ,						snake_case__						:     Any=2  ,						snake_case__						:     Optional[Any]=1  ,						snake_case__						:     Optional[int]=16  ,						snake_case__						:     Optional[int]=[128, 256, 384]  ,						snake_case__						:     str=[4, 6, 8]  ,						snake_case__						:     Union[str, Any]=[2, 3, 4]  ,						snake_case__						:     str=[16, 16, 16]  ,						snake_case__						:     Dict=0  ,						snake_case__						:     List[Any]=[2, 2, 2]  ,						snake_case__						:     List[Any]=[2, 2, 2]  ,						snake_case__						:     List[str]=0.02  ,						snake_case__						:     List[str]=True  ,						snake_case__						:     Tuple=True  ,						snake_case__						:     Optional[int]=2  ,						):
							lowerCAmelCase__        =   parent
							lowerCAmelCase__        =   batch_size
							lowerCAmelCase__        =   image_size
							lowerCAmelCase__        =   num_channels
							lowerCAmelCase__        =   kernel_size
							lowerCAmelCase__        =   stride
							lowerCAmelCase__        =   padding
							lowerCAmelCase__        =   hidden_sizes
							lowerCAmelCase__        =   num_attention_heads
							lowerCAmelCase__        =   depths
							lowerCAmelCase__        =   key_dim
							lowerCAmelCase__        =   drop_path_rate
							lowerCAmelCase__        =   patch_size
							lowerCAmelCase__        =   attention_ratio
							lowerCAmelCase__        =   mlp_ratio
							lowerCAmelCase__        =   initializer_range
							lowerCAmelCase__        =   [
							    ["""Subsample""", key_dim[0], hidden_sizes[0] // key_dim[0], 4, 2, 2],
							    ["""Subsample""", key_dim[0], hidden_sizes[1] // key_dim[0], 4, 2, 2],
							]
							lowerCAmelCase__        =   is_training
							lowerCAmelCase__        =   use_labels
							lowerCAmelCase__        =   num_labels
							lowerCAmelCase__        =   initializer_range




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Optional[Any]     ):
							lowerCAmelCase__        =   floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]     )

							lowerCAmelCase__        =   None
							if self.use_labels:
									lowerCAmelCase__        =   ids_tensor([self.batch_size]  ,						self.num_labels     )

							lowerCAmelCase__        =   self.get_config()
							return config, pixel_values, labels




					def 						_SCREAMING_SNAKE_CASE						(	self						:     str     ):
							return LevitConfig(
							    image_size=self.image_size  ,						num_channels=self.num_channels  ,						kernel_size=self.kernel_size  ,						stride=self.stride  ,						padding=self.padding  ,						patch_size=self.patch_size  ,						hidden_sizes=self.hidden_sizes  ,						num_attention_heads=self.num_attention_heads  ,						depths=self.depths  ,						key_dim=self.key_dim  ,						drop_path_rate=self.drop_path_rate  ,						mlp_ratio=self.mlp_ratio  ,						attention_ratio=self.attention_ratio  ,						initializer_range=self.initializer_range  ,						down_ops=self.down_ops  ,						)




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Dict  ,						snake_case__						:     Tuple  ,						snake_case__						:     Tuple  ,						snake_case__						:     Optional[int]     ):
							lowerCAmelCase__        =   LevitModel(config=snake_case__     )
							model.to(snake_case__     )
							model.eval()
							lowerCAmelCase__        =   model(snake_case__     )
							lowerCAmelCase__        =   (self.image_size, self.image_size)
							lowerCAmelCase__   ,					lowerCAmelCase__        =   image_size[0], image_size[1]
							for _ in range(4     ):
									lowerCAmelCase__        =   floor(((height + 2 * self.padding - self.kernel_size) / self.stride) + 1     )
									lowerCAmelCase__        =   floor(((width + 2 * self.padding - self.kernel_size) / self.stride) + 1     )
							self.parent.assertEqual(
							    result.last_hidden_state.shape  ,						(self.batch_size, ceil(height / 4     ) * ceil(width / 4     ), self.hidden_sizes[-1])  ,						)




					def 						_SCREAMING_SNAKE_CASE						(	self						:     List[str]  ,						snake_case__						:     Optional[int]  ,						snake_case__						:     Tuple  ,						snake_case__						:     Any     ):
							lowerCAmelCase__        =   self.num_labels
							lowerCAmelCase__        =   LevitForImageClassification(snake_case__     )
							model.to(snake_case__     )
							model.eval()
							lowerCAmelCase__        =   model(snake_case__  ,						labels=snake_case__     )
							self.parent.assertEqual(result.logits.shape  ,						(self.batch_size, self.num_labels)     )




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

@require_torch
class       a_      (     __UpperCamelCase ,		__UpperCamelCase ,		unittest.TestCase			):
					UpperCamelCase_ :	Optional[Any]			=    (
					    (LevitModel, LevitForImageClassification, LevitForImageClassificationWithTeacher)
					    if is_torch_available()
					    else ()
					)
					UpperCamelCase_ :	Union[str, Any]			=    (
					    {
					        "feature-extraction": LevitModel,
					        "image-classification": (LevitForImageClassification, LevitForImageClassificationWithTeacher),
					    }
					    if is_torch_available()
					    else {}
					)

					UpperCamelCase_ :	Optional[int]			=    False
					UpperCamelCase_ :	Dict			=    False
					UpperCamelCase_ :	str			=    False
					UpperCamelCase_ :	List[str]			=    False
					UpperCamelCase_ :	List[Any]			=    False




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Optional[int]     ):
							lowerCAmelCase__        =   LevitModelTester(self     )
							lowerCAmelCase__        =   ConfigTester(self  ,						config_class=snake_case__  ,						has_text_modality=snake_case__  ,						hidden_size=37     )




					def 						_SCREAMING_SNAKE_CASE						(	self						:     List[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						:     int     ):
							return




					@unittest.skip(reason="""Levit does not use inputs_embeds"""     )
					def 						_SCREAMING_SNAKE_CASE						(	self						:     Optional[Any]     ):
							pass




					@unittest.skip(reason="""Levit does not support input and output embeddings"""     )
					def 						_SCREAMING_SNAKE_CASE						(	self						:     Any     ):
							pass




					@unittest.skip(reason="""Levit does not output attentions"""     )
					def 						_SCREAMING_SNAKE_CASE						(	self						:     Tuple     ):
							pass




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

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

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




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Tuple     ):
							def check_hidden_states_output(snake_case__						:     str  ,						snake_case__						:     int  ,						snake_case__						:     Any     ):
									lowerCAmelCase__        =   model_class(snake_case__     )
									model.to(snake_case__     )
									model.eval()

									with torch.no_grad():
											lowerCAmelCase__        =   model(**self._prepare_for_class(snake_case__  ,						snake_case__     )     )

									lowerCAmelCase__        =   outputs.hidden_states

									lowerCAmelCase__        =   len(self.model_tester.depths     ) + 1
									self.assertEqual(len(snake_case__     )  ,						snake_case__     )

									lowerCAmelCase__        =   (self.model_tester.image_size, self.model_tester.image_size)
									lowerCAmelCase__   ,					lowerCAmelCase__        =   image_size[0], image_size[1]
									for _ in range(4     ):
											lowerCAmelCase__        =   floor(
											    (
											        (height + 2 * self.model_tester.padding - self.model_tester.kernel_size)
											        / self.model_tester.stride
											    )
											    + 1     )
											lowerCAmelCase__        =   floor(
											    (
											        (width + 2 * self.model_tester.padding - self.model_tester.kernel_size)
											        / self.model_tester.stride
											    )
											    + 1     )
									# verify the first hidden states (first block)
									self.assertListEqual(
									    list(hidden_states[0].shape[-2:]     )  ,						[
									        height * width,
									        self.model_tester.hidden_sizes[0],
									    ]  ,						)

							lowerCAmelCase__   ,					lowerCAmelCase__        =   self.model_tester.prepare_config_and_inputs_for_common()

							for model_class in self.all_model_classes:
									lowerCAmelCase__        =   True
									check_hidden_states_output(snake_case__  ,						snake_case__  ,						snake_case__     )

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

									check_hidden_states_output(snake_case__  ,						snake_case__  ,						snake_case__     )




					@unittest.skip("""Will be fixed soon by reducing the size of the model used for common tests."""     )
					def 						_SCREAMING_SNAKE_CASE						(	self						:     str     ):
							pass




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Any  ,						snake_case__						:     List[Any]  ,						snake_case__						:     Tuple  ,						snake_case__						:     Union[str, Any]=False     ):
							lowerCAmelCase__        =   super()._prepare_for_class(snake_case__  ,						snake_case__  ,						return_labels=snake_case__     )

							if return_labels:
									if model_class.__name__ == "LevitForImageClassificationWithTeacher":
											del inputs_dict["labels"]

							return inputs_dict




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Optional[Any]     ):
							lowerCAmelCase__        =   self.model_tester.prepare_config_and_inputs()
							self.model_tester.create_and_check_model(*snake_case__     )




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Union[str, Any]     ):
							lowerCAmelCase__        =   self.model_tester.prepare_config_and_inputs()
							self.model_tester.create_and_check_for_image_classification(*snake_case__     )




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Optional[Any]     ):
							if not self.model_tester.is_training:
									return

							lowerCAmelCase__   ,					lowerCAmelCase__        =   self.model_tester.prepare_config_and_inputs_for_common()
							lowerCAmelCase__        =   True

							for model_class in self.all_model_classes:
									# LevitForImageClassificationWithTeacher supports inference-only
									if (
									    model_class in get_values(snake_case__     )
									    or model_class.__name__ == "LevitForImageClassificationWithTeacher"
									):
											continue
									lowerCAmelCase__        =   model_class(snake_case__     )
									model.to(snake_case__     )
									model.train()
									lowerCAmelCase__        =   self._prepare_for_class(snake_case__  ,						snake_case__  ,						return_labels=snake_case__     )
									lowerCAmelCase__        =   model(**snake_case__     ).loss
									loss.backward()




					def 						_SCREAMING_SNAKE_CASE						(	self						:     List[Any]     ):
							lowerCAmelCase__   ,					lowerCAmelCase__        =   self.model_tester.prepare_config_and_inputs_for_common()
							if not self.model_tester.is_training:
									return

							lowerCAmelCase__        =   False
							lowerCAmelCase__        =   True

							for model_class in self.all_model_classes:
									if model_class in get_values(snake_case__     ) or not model_class.supports_gradient_checkpointing:
											continue
									# LevitForImageClassificationWithTeacher supports inference-only
									if model_class.__name__ == "LevitForImageClassificationWithTeacher":
											continue
									lowerCAmelCase__        =   model_class(snake_case__     )
									model.gradient_checkpointing_enable()
									model.to(snake_case__     )
									model.train()
									lowerCAmelCase__        =   self._prepare_for_class(snake_case__  ,						snake_case__  ,						return_labels=snake_case__     )
									lowerCAmelCase__        =   model(**snake_case__     ).loss
									loss.backward()




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

							lowerCAmelCase__        =   [
							    {"""title""": """multi_label_classification""", """num_labels""": 2, """dtype""": torch.float},
							    {"""title""": """single_label_classification""", """num_labels""": 1, """dtype""": torch.long},
							    {"""title""": """regression""", """num_labels""": 1, """dtype""": torch.float},
							]

							for model_class in self.all_model_classes:
									if (
									    model_class
									    not in [
									        *get_values(snake_case__     ),
									    ]
									    or model_class.__name__ == "LevitForImageClassificationWithTeacher"
									):
											continue

									for problem_type in problem_types:
											with self.subTest(msg=F"""Testing {model_class} with {problem_type['title']}"""     ):
													lowerCAmelCase__        =   problem_type["""title"""]
													lowerCAmelCase__        =   problem_type["""num_labels"""]

													lowerCAmelCase__        =   model_class(snake_case__     )
													model.to(snake_case__     )
													model.train()

													lowerCAmelCase__        =   self._prepare_for_class(snake_case__  ,						snake_case__  ,						return_labels=snake_case__     )

													if problem_type["num_labels"] > 1:
															lowerCAmelCase__        =   inputs["""labels"""].unsqueeze(1     ).repeat(1  ,						problem_type["""num_labels"""]     )

													lowerCAmelCase__        =   inputs["""labels"""].to(problem_type["""dtype"""]     )

													# This tests that we do not trigger the warning form PyTorch "Using a target size that is different
													# to the input size. This will likely lead to incorrect results due to broadcasting. Please ensure
													# they have the same size." which is a symptom something in wrong for the regression problem.
													# See https://github.com/huggingface/transformers/issues/11780
													with warnings.catch_warnings(record=snake_case__     ) as warning_list:
															lowerCAmelCase__        =   model(**snake_case__     ).loss
													for w in warning_list:
															if "Using a target size that is different to the input size" in str(w.message     ):
																	raise ValueError(
																	    F"""Something is going wrong in the regression problem: intercepted {w.message}"""     )

													loss.backward()




					@slow
					def 						_SCREAMING_SNAKE_CASE						(	self						:     int     ):
							for model_name in LEVIT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
									lowerCAmelCase__        =   LevitModel.from_pretrained(snake_case__     )
									self.assertIsNotNone(snake_case__     )







def 							_UpperCAmelCase		(       ):





		"""simple docstring"""




		lowerCAmelCase__        =   Image.open("""./tests/fixtures/tests_samples/COCO/000000039769.png"""     )
		return image






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




					@cached_property
					def 						_SCREAMING_SNAKE_CASE						(	self						:     Optional[int]     ):
							return LevitImageProcessor.from_pretrained(LEVIT_PRETRAINED_MODEL_ARCHIVE_LIST[0]     )




					@slow
					def 						_SCREAMING_SNAKE_CASE						(	self						:     List[Any]     ):
							lowerCAmelCase__        =   LevitForImageClassificationWithTeacher.from_pretrained(LEVIT_PRETRAINED_MODEL_ARCHIVE_LIST[0]     ).to(
							    snake_case__     )

							lowerCAmelCase__        =   self.default_image_processor
							lowerCAmelCase__        =   prepare_img()
							lowerCAmelCase__        =   image_processor(images=snake_case__  ,						return_tensors="""pt"""     ).to(snake_case__     )

							# forward pass
							with torch.no_grad():
									lowerCAmelCase__        =   model(**snake_case__     )

							# verify the logits
							lowerCAmelCase__        =   torch.Size((1, 1000)     )
							self.assertEqual(outputs.logits.shape  ,						snake_case__     )

							lowerCAmelCase__        =   torch.tensor([1.0448, -0.3745, -1.8317]     ).to(snake_case__     )

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





"""simple docstring"""




import pprint

import requests

__lowerCAmelCase    :							Union[str, Any]													=						"https://zenquotes.io/api"







def 							_UpperCAmelCase		(       ):





		"""simple docstring"""




		return requests.get(API_ENDPOINT_URL + """/today"""     ).json()







def 							_UpperCAmelCase		(       ):





		"""simple docstring"""




		return requests.get(API_ENDPOINT_URL + """/random"""     ).json()


if __name__ == "__main__":
			__lowerCAmelCase    :							Union[str, Any]													=						random_quotes()
			pprint.pprint(response)




