





import inspect
import unittest

from transformers import ResNetConfig, is_flax_available
from transformers.testing_utils import require_flax, slow
from transformers.utils import cached_property, is_vision_available

from ...test_configuration_common import ConfigTester
from ...test_modeling_flax_common import FlaxModelTesterMixin, floats_tensor


if is_flax_available():
						import jax
						import jax.numpy as jnp

						from transformers.models.resnet.modeling_flax_resnet import FlaxResNetForImageClassification, FlaxResNetModel

if is_vision_available():
						from PIL import Image

						from transformers import AutoImageProcessor
class SCREAMING_SNAKE_CASE_    (       unittest.TestCase       ):






						def __init__(   self   :   List[str]		, _A   :   Dict		, _A   :   List[str]=3		, _A   :   Optional[int]=32		, _A   :   Dict=3		, _A   :   Union[str, Any]=10		, _A   :   List[Any]=[10, 20, 30, 40]		, _A   :   int=[1, 1, 2, 1]		, _A   :   List[str]=True		, _A   :   Union[str, Any]=True		, _A   :   str="relu"		, _A   :   Optional[int]=3		, _A   :   List[str]=None		, )				->     Optional[Any]:







							"""simple docstring"""


							snake_case_		:      int           =						parent
							snake_case_		:      Optional[int]           =						batch_size
							snake_case_		:      List[Any]           =						image_size
							snake_case_		:      List[Any]           =						num_channels
							snake_case_		:      Optional[int]           =						embeddings_size
							snake_case_		:      List[str]           =						hidden_sizes
							snake_case_		:      str           =						depths
							snake_case_		:      Tuple           =						is_training
							snake_case_		:      str           =						use_labels
							snake_case_		:      Union[str, Any]           =						hidden_act
							snake_case_		:      Dict           =						num_labels
							snake_case_		:      Tuple           =						scope
							snake_case_		:      List[str]           =						len(_A						)






						def UpperCAmelCase_					(   self   :   Dict						)				->     Union[str, Any]:







							"""simple docstring"""


							snake_case_		:      Dict           =						floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]						)

							snake_case_		:      str           =						self.get_config()

							return config, pixel_values






						def UpperCAmelCase_					(   self   :   Any						)				->     int:







							"""simple docstring"""


							return ResNetConfig(
							    num_channels=self.num_channels		, embeddings_size=self.embeddings_size		, hidden_sizes=self.hidden_sizes		, depths=self.depths		, hidden_act=self.hidden_act		, num_labels=self.num_labels		, image_size=self.image_size		, )






						def UpperCAmelCase_					(   self   :   str		, _A   :   Union[str, Any]		, _A   :   Optional[int]						)				->     List[Any]:







							"""simple docstring"""


							snake_case_		:      Optional[int]           =						FlaxResNetModel(config=_A						)
							snake_case_		:      Dict           =						model(_A						)

							# Output shape (b, c, h, w)
							self.parent.assertEqual(
							    result.last_hidden_state.shape		, (self.batch_size, self.hidden_sizes[-1], self.image_size // 32, self.image_size // 32)		, )






						def UpperCAmelCase_					(   self   :   Dict		, _A   :   Dict		, _A   :   str						)				->     Union[str, Any]:







							"""simple docstring"""


							snake_case_		:      Optional[int]           =						self.num_labels
							snake_case_		:      Tuple           =						FlaxResNetForImageClassification(config=_A						)
							snake_case_		:      Tuple           =						model(_A						)
							self.parent.assertEqual(result.logits.shape		, (self.batch_size, self.num_labels)						)






						def UpperCAmelCase_					(   self   :   Union[str, Any]						)				->     Union[str, Any]:







							"""simple docstring"""


							snake_case_		:      str           =						self.prepare_config_and_inputs()
							snake_case_    ,snake_case_		:      Tuple           =						config_and_inputs
							snake_case_		:      str           =						{'pixel_values': pixel_values}
							return config, inputs_dict
@require_flax
class SCREAMING_SNAKE_CASE_    (       snake_case_							,					unittest.TestCase       ):
						__magic_name__:      Dict			   =							(FlaxResNetModel, FlaxResNetForImageClassification) if is_flax_available() else ()

						__magic_name__:      Union[str, Any]			   =							False
						__magic_name__:      List[str]			   =							False
						__magic_name__:      Union[str, Any]			   =							False






						def UpperCAmelCase_					(   self   :   Union[str, Any]						)				->     None:







							"""simple docstring"""


							snake_case_		:      List[Any]           =						FlaxResNetModelTester(self						)
							snake_case_		:      Optional[Any]           =						ConfigTester(self		, config_class=_A		, has_text_modality=_A						)






						def UpperCAmelCase_					(   self   :   Optional[Any]						)				->     str:







							"""simple docstring"""


							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 UpperCAmelCase_					(   self   :   Any						)				->     List[Any]:







							"""simple docstring"""


							return






						def UpperCAmelCase_					(   self   :   Dict						)				->     List[Any]:







							"""simple docstring"""


							snake_case_		:      List[Any]           =						self.model_tester.prepare_config_and_inputs()
							self.model_tester.create_and_check_model(*_A						)






						def UpperCAmelCase_					(   self   :   Dict						)				->     Any:







							"""simple docstring"""


							snake_case_		:      List[Any]           =						self.model_tester.prepare_config_and_inputs()
							self.model_tester.create_and_check_for_image_classification(*_A						)






						@unittest.skip(reason='ResNet does not use inputs_embeds'						)
						def UpperCAmelCase_					(   self   :   Optional[Any]						)				->     Optional[Any]:







							"""simple docstring"""


							pass






						@unittest.skip(reason='ResNet does not support input and output embeddings'						)
						def UpperCAmelCase_					(   self   :   str						)				->     List[Any]:







							"""simple docstring"""


							pass






						def UpperCAmelCase_					(   self   :   List[str]						)				->     Optional[Any]:







							"""simple docstring"""


							snake_case_    ,snake_case_		:      int           =						self.model_tester.prepare_config_and_inputs_for_common()

							for model_class in self.all_model_classes:
								snake_case_		:      Dict           =						model_class(_A						)
								snake_case_		:      List[str]           =						inspect.signature(model.__call__						)
								# signature.parameters is an OrderedDict => so arg_names order is deterministic
								snake_case_		:      Optional[Any]           =						[*signature.parameters.keys()]

								snake_case_		:      str           =						['pixel_values']
								self.assertListEqual(arg_names[:1]		, _A						)






						def UpperCAmelCase_					(   self   :   Optional[int]						)				->     int:







							"""simple docstring"""


							def check_hidden_states_output(_A   :   List[str]		, _A   :   List[str]		, _A   :   Union[str, Any]						):
								snake_case_		:      List[str]           =						model_class(_A						)

								snake_case_		:      int           =						model(**self._prepare_for_class(_A		, _A						)						)

								snake_case_		:      Optional[Any]           =						outputs.encoder_hidden_states if config.is_encoder_decoder else outputs.hidden_states

								snake_case_		:      Any           =						self.model_tester.num_stages
								self.assertEqual(len(_A						)		, expected_num_stages + 1						)






						@unittest.skip(reason='ResNet does not use feedforward chunking'						)
						def UpperCAmelCase_					(   self   :   Union[str, Any]						)				->     List[str]:







							"""simple docstring"""


							pass






						def UpperCAmelCase_					(   self   :   Tuple						)				->     str:







							"""simple docstring"""


							snake_case_    ,snake_case_		:      Any           =						self.model_tester.prepare_config_and_inputs_for_common()

							for model_class in self.all_model_classes:
								with self.subTest(model_class.__name__						):
									snake_case_		:      Union[str, Any]           =						self._prepare_for_class(_A		, _A						)
									snake_case_		:      Any           =						model_class(_A						)

									@jax.jit
									def model_jitted(_A   :   Optional[int]		, **_A   :   List[str]						):
										return model(pixel_values=_A		, **_A						)

									with self.subTest('JIT Enabled'						):
										snake_case_		:      Optional[Any]           =						model_jitted(**_A						).to_tuple()

									with self.subTest('JIT Disabled'						):
										with jax.disable_jit():
											snake_case_		:      Any           =						model_jitted(**_A						).to_tuple()

									self.assertEqual(len(_A						)		, len(_A						)						)
									for jitted_output, output in zip(_A		, _A						):
										self.assertEqual(jitted_output.shape		, output.shape						)


def 				SCREAMING_SNAKE_CASE__    (     ):
	snake_case_		:      List[str]           =						Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png' )
	return image


@require_flax
class SCREAMING_SNAKE_CASE_    (       unittest.TestCase       ):






						@cached_property
						def UpperCAmelCase_					(   self   :   str						)				->     str:







							"""simple docstring"""


							return AutoImageProcessor.from_pretrained('microsoft/resnet-50'						) if is_vision_available() else None






						@slow
						def UpperCAmelCase_					(   self   :   List[str]						)				->     List[str]:







							"""simple docstring"""


							snake_case_		:      List[Any]           =						FlaxResNetForImageClassification.from_pretrained('microsoft/resnet-50'						)

							snake_case_		:      Optional[int]           =						self.default_image_processor
							snake_case_		:      int           =						prepare_img()
							snake_case_		:      Optional[int]           =						image_processor(images=_A		, return_tensors='np'						)

							snake_case_		:      Any           =						model(**_A						)

							# verify the logits
							snake_case_		:      Any           =						(1, 1000)
							self.assertEqual(outputs.logits.shape		, _A						)

							snake_case_		:      List[str]           =						jnp.array([-1_1.1_0_6_9, -9.7_8_7_7, -8.3_7_7_7]						)

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








import warnings
from typing import List, Optional, Union

import numpy as np
import PIL
import torch
from PIL import Image

from .configuration_utils import ConfigMixin, register_to_config
from .utils import CONFIG_NAME, PIL_INTERPOLATION, deprecate
class SCREAMING_SNAKE_CASE_    (       snake_case_       ):
						__magic_name__:      Tuple			   =							CONFIG_NAME






						@register_to_config
						def __init__(   self   :   Any		, _A   :   bool = True		, _A   :   int = 8		, _A   :   str = "lanczos"		, _A   :   bool = True		, _A   :   bool = False		, )				->     int:







							"""simple docstring"""


							super().__init__()






						@staticmethod
						def UpperCAmelCase_					(   _A   :   np.ndarray						)				->     PIL.Image.Image:







							"""simple docstring"""


							if images.ndim == 3:
								snake_case_		:      Optional[int]           =						images[None, ...]
							snake_case_		:      Any           =						(images * 255).round().astype('uint8'						)
							if images.shape[-1] == 1:
								# special case for grayscale (single channel) images
								snake_case_		:      List[str]           =						[Image.fromarray(image.squeeze()		, mode='L'						) for image in images]
							else:
								snake_case_		:      Any           =						[Image.fromarray(_A						) for image in images]

							return pil_images






						@staticmethod
						def UpperCAmelCase_					(   _A   :   Union[List[PIL.Image.Image], PIL.Image.Image]						)				->     np.ndarray:







							"""simple docstring"""


							if not isinstance(_A		, _A						):
								snake_case_		:      Tuple           =						[images]
							snake_case_		:      int           =						[np.array(_A						).astype(np.floataa						) / 2_5_5.0 for image in images]
							snake_case_		:      Dict           =						np.stack(_A		, axis=0						)

							return images






						@staticmethod
						def UpperCAmelCase_					(   _A   :   np.ndarray						)				->     torch.FloatTensor:







							"""simple docstring"""


							if images.ndim == 3:
								snake_case_		:      Union[str, Any]           =						images[..., None]

							snake_case_		:      Any           =						torch.from_numpy(images.transpose(0		, 3		, 1		, 2						)						)
							return images






						@staticmethod
						def UpperCAmelCase_					(   _A   :   torch.FloatTensor						)				->     np.ndarray:







							"""simple docstring"""


							snake_case_		:      Union[str, Any]           =						images.cpu().permute(0		, 2		, 3		, 1						).float().numpy()
							return images






						@staticmethod
						def UpperCAmelCase_					(   _A   :   Optional[int]						)				->     Optional[Any]:







							"""simple docstring"""


							return 2.0 * images - 1.0






						@staticmethod
						def UpperCAmelCase_					(   _A   :   Optional[int]						)				->     Tuple:







							"""simple docstring"""


							return (images / 2 + 0.5).clamp(0		, 1						)






						@staticmethod
						def UpperCAmelCase_					(   _A   :   PIL.Image.Image						)				->     PIL.Image.Image:







							"""simple docstring"""


							snake_case_		:      Optional[int]           =						image.convert('RGB'						)
							return image






						def UpperCAmelCase_					(   self   :   List[str]		, _A   :   PIL.Image.Image		, _A   :   Optional[int] = None		, _A   :   Optional[int] = None		, )				->     PIL.Image.Image:







							"""simple docstring"""


							if height is None:
								snake_case_		:      Union[str, Any]           =						image.height
							if width is None:
								snake_case_		:      int           =						image.width

							snake_case_    ,snake_case_		:      str           =						(
							    x - x % self.config.vae_scale_factor for x in (width, height)
							)  # resize to integer multiple of vae_scale_factor
							snake_case_		:      Optional[Any]           =						image.resize((width, height)		, resample=PIL_INTERPOLATION[self.config.resample]						)
							return image






						def UpperCAmelCase_					(   self   :   Dict		, _A   :   Union[torch.FloatTensor, PIL.Image.Image, np.ndarray]		, _A   :   Optional[int] = None		, _A   :   Optional[int] = None		, )				->     torch.Tensor:







							"""simple docstring"""


							snake_case_		:      List[Any]           =						(PIL.Image.Image, np.ndarray, torch.Tensor)
							if isinstance(_A		, _A						):
								snake_case_		:      Optional[int]           =						[image]
							elif not (isinstance(_A		, _A						) and all(isinstance(_A		, _A						) for i in image						)):
								raise ValueError(
								    F"""Input is in incorrect format: {[type(_A						) for i in image]}. Currently, we only support {', '.join(_A						)}"""						)

							if isinstance(image[0]		, PIL.Image.Image						):
								if self.config.do_convert_rgb:
									snake_case_		:      str           =						[self.convert_to_rgb(_A						) for i in image]
								if self.config.do_resize:
									snake_case_		:      Union[str, Any]           =						[self.resize(_A		, _A		, _A						) for i in image]
								snake_case_		:      int           =						self.pil_to_numpy(_A						)  # to np
								snake_case_		:      str           =						self.numpy_to_pt(_A						)  # to pt

							elif isinstance(image[0]		, np.ndarray						):
								snake_case_		:      List[Any]           =						np.concatenate(_A		, axis=0						) if image[0].ndim == 4 else np.stack(_A		, axis=0						)
								snake_case_		:      Any           =						self.numpy_to_pt(_A						)
								snake_case_    ,snake_case_    ,snake_case_    ,snake_case_		:      Tuple           =						image.shape
								if self.config.do_resize and (
								    height % self.config.vae_scale_factor != 0 or width % self.config.vae_scale_factor != 0
								):
									raise ValueError(
									    F"""Currently we only support resizing for PIL image - please resize your numpy array to be divisible by {self.config.vae_scale_factor}"""
									    F"""currently the sizes are {height} and {width}. You can also pass a PIL image instead to use resize option in VAEImageProcessor"""						)

							elif isinstance(image[0]		, torch.Tensor						):
								snake_case_		:      List[Any]           =						torch.cat(_A		, axis=0						) if image[0].ndim == 4 else torch.stack(_A		, axis=0						)
								snake_case_    ,snake_case_    ,snake_case_    ,snake_case_		:      Any           =						image.shape

								# don't need any preprocess if the image is latents
								if channel == 4:
									return image

								if self.config.do_resize and (
								    height % self.config.vae_scale_factor != 0 or width % self.config.vae_scale_factor != 0
								):
									raise ValueError(
									    F"""Currently we only support resizing for PIL image - please resize your pytorch tensor to be divisible by {self.config.vae_scale_factor}"""
									    F"""currently the sizes are {height} and {width}. You can also pass a PIL image instead to use resize option in VAEImageProcessor"""						)

        # expected range [0,1], normalize to [-1,1]
							snake_case_		:      Tuple           =						self.config.do_normalize
							if image.min() < 0:
								warnings.warn(
								    'Passing `image` as torch tensor with value range in [-1,1] is deprecated. The expected value range for image tensor is [0,1] '
								    F"""when passing as pytorch tensor or numpy Array. You passed `image` with value range [{image.min()},{image.max()}]"""		, _A		, )
								snake_case_		:      Optional[Any]           =						False

							if do_normalize:
								snake_case_		:      Dict           =						self.normalize(_A						)

							return image






						def UpperCAmelCase_					(   self   :   Any		, _A   :   torch.FloatTensor		, _A   :   str = "pil"		, _A   :   Optional[List[bool]] = None		, )				->     int:







							"""simple docstring"""


							if not isinstance(_A		, torch.Tensor						):
								raise ValueError(
								    F"""Input for postprocessing is in incorrect format: {type(_A						)}. We only support pytorch tensor"""						)
							if output_type not in ["latent", "pt", "np", "pil"]:
								snake_case_		:      List[Any]           =						(
								    F"""the output_type {output_type} is outdated and has been set to `np`. Please make sure to set it to one of these instead: """
								    '`pil`, `np`, `pt`, `latent`'
								)
								deprecate('Unsupported output_type'		, '1.0.0'		, _A		, standard_warn=_A						)
								snake_case_		:      Optional[int]           =						'np'

							if output_type == "latent":
								return image

							if do_denormalize is None:
								snake_case_		:      Optional[Any]           =						[self.config.do_normalize] * image.shape[0]

							snake_case_		:      Dict           =						torch.stack(
							    [self.denormalize(image[i]						) if do_denormalize[i] else image[i] for i in range(image.shape[0]						)]						)

							if output_type == "pt":
								return image

							snake_case_		:      Dict           =						self.pt_to_numpy(_A						)

							if output_type == "np":
								return image

							if output_type == "pil":
								return self.numpy_to_pil(_A						)
class SCREAMING_SNAKE_CASE_    (       snake_case_       ):
						__magic_name__:      Union[str, Any]			   =							CONFIG_NAME






						@register_to_config
						def __init__(   self   :   List[str]		, _A   :   bool = True		, _A   :   int = 8		, _A   :   str = "lanczos"		, _A   :   bool = True		, )				->     Optional[Any]:







							"""simple docstring"""


							super().__init__()






						@staticmethod
						def UpperCAmelCase_					(   _A   :   int						)				->     Dict:







							"""simple docstring"""


							if images.ndim == 3:
								snake_case_		:      Dict           =						images[None, ...]
							snake_case_		:      Optional[int]           =						(images * 255).round().astype('uint8'						)
							if images.shape[-1] == 1:
								# special case for grayscale (single channel) images
								snake_case_		:      Union[str, Any]           =						[Image.fromarray(image.squeeze()		, mode='L'						) for image in images]
							else:
								snake_case_		:      Any           =						[Image.fromarray(image[:, :, :3]						) for image in images]

							return pil_images






						@staticmethod
						def UpperCAmelCase_					(   _A   :   Optional[Any]						)				->     Optional[int]:







							"""simple docstring"""


							return image[:, :, 1] * 2**8 + image[:, :, 2]






						def UpperCAmelCase_					(   self   :   List[Any]		, _A   :   Optional[int]						)				->     Any:







							"""simple docstring"""


							if images.ndim == 3:
								snake_case_		:      int           =						images[None, ...]
							snake_case_		:      Any           =						images[:, :, :, 3:]
							if images.shape[-1] == 6:
								snake_case_		:      Optional[int]           =						(images_depth * 255).round().astype('uint8'						)
								snake_case_		:      List[str]           =						[
								    Image.fromarray(self.rgblike_to_depthmap(_A						)		, mode='I;16'						) for image_depth in images_depth
								]
							elif images.shape[-1] == 4:
								snake_case_		:      Dict           =						(images_depth * 6_5_5_3_5.0).astype(np.uintaa						)
								snake_case_		:      Union[str, Any]           =						[Image.fromarray(_A		, mode='I;16'						) for image_depth in images_depth]
							else:
								raise Exception('Not supported'						)

							return pil_images






						def UpperCAmelCase_					(   self   :   Any		, _A   :   torch.FloatTensor		, _A   :   str = "pil"		, _A   :   Optional[List[bool]] = None		, )				->     Dict:







							"""simple docstring"""


							if not isinstance(_A		, torch.Tensor						):
								raise ValueError(
								    F"""Input for postprocessing is in incorrect format: {type(_A						)}. We only support pytorch tensor"""						)
							if output_type not in ["latent", "pt", "np", "pil"]:
								snake_case_		:      int           =						(
								    F"""the output_type {output_type} is outdated and has been set to `np`. Please make sure to set it to one of these instead: """
								    '`pil`, `np`, `pt`, `latent`'
								)
								deprecate('Unsupported output_type'		, '1.0.0'		, _A		, standard_warn=_A						)
								snake_case_		:      str           =						'np'

							if do_denormalize is None:
								snake_case_		:      Union[str, Any]           =						[self.config.do_normalize] * image.shape[0]

							snake_case_		:      List[Any]           =						torch.stack(
							    [self.denormalize(image[i]						) if do_denormalize[i] else image[i] for i in range(image.shape[0]						)]						)

							snake_case_		:      int           =						self.pt_to_numpy(_A						)

							if output_type == "np":
								if image.shape[-1] == 6:
									snake_case_		:      Tuple           =						np.stack([self.rgblike_to_depthmap(im[:, :, 3:]						) for im in image]		, axis=0						)
								else:
									snake_case_		:      Any           =						image[:, :, :, 3:]
								return image[:, :, :, :3], image_depth

							if output_type == "pil":
								return self.numpy_to_pil(_A						), self.numpy_to_depth(_A						)
							else:
								raise Exception(F"""This type {output_type} is not supported"""						)

