


from typing import Dict, List, Optional, Union

import numpy as np

from ...image_processing_utils import BaseImageProcessor, BatchFeature, get_size_dict
from ...image_transforms import center_crop, normalize, rescale, resize, to_channel_dimension_format
from ...image_utils import (
    IMAGENET_STANDARD_MEAN,
    IMAGENET_STANDARD_STD,
    ChannelDimension,
    ImageInput,
    PILImageResampling,
    make_list_of_images,
    to_numpy_array,
    valid_images,
)
from ...utils import TensorType, is_vision_available, logging


if is_vision_available():
		import PIL


lowerCAmelCase__						:Optional[int]         =							logging.get_logger(__name__)

class 	__a   (       UpperCAmelCase    ):
		_a			:						List[str]    			=			['pixel_values']
		def __init__(    self    ,					_SCREAMING_SNAKE_CASE = True    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = PIL.Image.NEAREST    ,					_SCREAMING_SNAKE_CASE = False    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = 1 / 255    ,					_SCREAMING_SNAKE_CASE = False    ,					_SCREAMING_SNAKE_CASE = True    ,					_SCREAMING_SNAKE_CASE = True    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = True    ,					**_SCREAMING_SNAKE_CASE    ,					)				-> None:




									"""simple docstring"""





									super().__init__(**_SCREAMING_SNAKE_CASE		)
									_UpperCAmelCase					=    size if size is not None else {'height': 346, 'width': 346}
									_UpperCAmelCase					=    get_size_dict(_SCREAMING_SNAKE_CASE		)
									_UpperCAmelCase					=    crop_size if crop_size is not None else {'height': 289, 'width': 289}
									_UpperCAmelCase					=    get_size_dict(_SCREAMING_SNAKE_CASE    ,					param_name='crop_size'		)

									_UpperCAmelCase					=    do_resize
									_UpperCAmelCase					=    size
									_UpperCAmelCase					=    resample
									_UpperCAmelCase					=    do_center_crop
									_UpperCAmelCase					=    crop_size
									_UpperCAmelCase					=    do_rescale
									_UpperCAmelCase					=    rescale_factor
									_UpperCAmelCase					=    rescale_offset
									_UpperCAmelCase					=    do_normalize
									_UpperCAmelCase					=    image_mean if image_mean is not None else IMAGENET_STANDARD_MEAN
									_UpperCAmelCase					=    image_std if image_std is not None else IMAGENET_STANDARD_STD
									_UpperCAmelCase					=    include_top
		def 			UpperCAmelCase__       (    self    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE = PIL.Image.NEAREST    ,					_SCREAMING_SNAKE_CASE = None    ,					**_SCREAMING_SNAKE_CASE    ,					)				-> np.ndarray:




									"""simple docstring"""





									_UpperCAmelCase					=    get_size_dict(_SCREAMING_SNAKE_CASE		)
									if "height" not in size or "width" not in size:
																raise ValueError(f'''The size dictionary must have keys \'height\' and \'width\'. Got {size.keys()}'''		)
									return resize(
									    _SCREAMING_SNAKE_CASE    ,					size=(size['height'], size['width'])    ,					resample=_SCREAMING_SNAKE_CASE    ,					data_format=_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE		)
		def 			UpperCAmelCase__       (    self    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE = None    ,					**_SCREAMING_SNAKE_CASE    ,					)				-> np.ndarray:




									"""simple docstring"""





									_UpperCAmelCase					=    get_size_dict(_SCREAMING_SNAKE_CASE		)
									if "height" not in size or "width" not in size:
																raise ValueError(f'''The size dictionary must have keys \'height\' and \'width\'. Got {size.keys()}'''		)
									return center_crop(_SCREAMING_SNAKE_CASE    ,					size=(size['height'], size['width'])    ,					data_format=_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE		)
		def 			UpperCAmelCase__       (    self    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE = True    ,					_SCREAMING_SNAKE_CASE = None    ,					**_SCREAMING_SNAKE_CASE    ,					)				-> List[str]:




									"""simple docstring"""





									if offset:
																_UpperCAmelCase					=    (image - 127.5) * scale
																if data_format is not None:
																							_UpperCAmelCase					=    to_channel_dimension_format(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE		)
																_UpperCAmelCase					=    rescaled_image.astype(np.floataa		)
									else:
																_UpperCAmelCase					=    rescale(_SCREAMING_SNAKE_CASE    ,					scale=_SCREAMING_SNAKE_CASE    ,					data_format=_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE		)
									return rescaled_image
		def 			UpperCAmelCase__       (    self    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE = None    ,					**_SCREAMING_SNAKE_CASE    ,					)				-> np.ndarray:




									"""simple docstring"""





									return normalize(_SCREAMING_SNAKE_CASE    ,					mean=_SCREAMING_SNAKE_CASE    ,					std=_SCREAMING_SNAKE_CASE    ,					data_format=_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE		)






		def 			UpperCAmelCase__       (    self    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE=None    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = None    ,					_SCREAMING_SNAKE_CASE = ChannelDimension.FIRST    ,					**_SCREAMING_SNAKE_CASE    ,					)				-> PIL.Image.Image:




									"""simple docstring"""





									_UpperCAmelCase					=    do_resize if do_resize is not None else self.do_resize
									_UpperCAmelCase					=    resample if resample is not None else self.resample
									_UpperCAmelCase					=    do_center_crop if do_center_crop is not None else self.do_center_crop
									_UpperCAmelCase					=    do_rescale if do_rescale is not None else self.do_rescale
									_UpperCAmelCase					=    rescale_factor if rescale_factor is not None else self.rescale_factor
									_UpperCAmelCase					=    rescale_offset if rescale_offset is not None else self.rescale_offset
									_UpperCAmelCase					=    do_normalize if do_normalize is not None else self.do_normalize
									_UpperCAmelCase					=    image_mean if image_mean is not None else self.image_mean
									_UpperCAmelCase					=    image_std if image_std is not None else self.image_std
									_UpperCAmelCase					=    include_top if include_top is not None else self.include_top

									_UpperCAmelCase					=    size if size is not None else self.size
									_UpperCAmelCase					=    get_size_dict(_SCREAMING_SNAKE_CASE		)
									_UpperCAmelCase					=    crop_size if crop_size is not None else self.crop_size
									_UpperCAmelCase					=    get_size_dict(_SCREAMING_SNAKE_CASE    ,					param_name='crop_size'		)

									_UpperCAmelCase					=    make_list_of_images(_SCREAMING_SNAKE_CASE		)

									if not valid_images(_SCREAMING_SNAKE_CASE		):
																raise ValueError(
																    'Invalid image type. Must be of type PIL.Image.Image, numpy.ndarray, '
																    'torch.Tensor, tf.Tensor or jax.ndarray.'		)

									if do_resize and size is None or resample is None:
																raise ValueError('Size and resample must be specified if do_resize is True.'		)

									if do_center_crop and crop_size is None:
																raise ValueError('Crop size must be specified if do_center_crop is True.'		)

									if do_rescale and rescale_factor is None:
																raise ValueError('Rescale factor must be specified if do_rescale is True.'		)

									if do_normalize and (image_mean is None or image_std is None):
																raise ValueError('Image mean and std must be specified if do_normalize is True.'		)

									# All transformations expect numpy arrays.
									_UpperCAmelCase					=    [to_numpy_array(_SCREAMING_SNAKE_CASE		) for image in images]

									if do_resize:
																_UpperCAmelCase					=    [self.resize(image=_SCREAMING_SNAKE_CASE    ,					size=_SCREAMING_SNAKE_CASE    ,					resample=_SCREAMING_SNAKE_CASE		) for image in images]

									if do_center_crop:
																_UpperCAmelCase					=    [self.center_crop(image=_SCREAMING_SNAKE_CASE    ,					size=_SCREAMING_SNAKE_CASE		) for image in images]

									if do_rescale:
																_UpperCAmelCase					=    [self.rescale(image=_SCREAMING_SNAKE_CASE    ,					scale=_SCREAMING_SNAKE_CASE    ,					offset=_SCREAMING_SNAKE_CASE		) for image in images]

									if do_normalize:
																_UpperCAmelCase					=    [self.normalize(image=_SCREAMING_SNAKE_CASE    ,					mean=_SCREAMING_SNAKE_CASE    ,					std=_SCREAMING_SNAKE_CASE		) for image in images]

									if include_top:
																_UpperCAmelCase					=    [self.normalize(image=_SCREAMING_SNAKE_CASE    ,					mean=[0, 0, 0]    ,					std=_SCREAMING_SNAKE_CASE		) for image in images]

									_UpperCAmelCase					=    [to_channel_dimension_format(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE		) for image in images]

									_UpperCAmelCase					=    {'pixel_values': images}
									return BatchFeature(data=_SCREAMING_SNAKE_CASE    ,					tensor_type=_SCREAMING_SNAKE_CASE		)




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 	__a   (       unittest.TestCase    ):
		def __init__(    self    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE=3    ,					_SCREAMING_SNAKE_CASE=32    ,					_SCREAMING_SNAKE_CASE=3    ,					_SCREAMING_SNAKE_CASE=10    ,					_SCREAMING_SNAKE_CASE=[10, 20, 30, 40]    ,					_SCREAMING_SNAKE_CASE=[1, 1, 2, 1]    ,					_SCREAMING_SNAKE_CASE=True    ,					_SCREAMING_SNAKE_CASE=True    ,					_SCREAMING_SNAKE_CASE="relu"    ,					_SCREAMING_SNAKE_CASE=3    ,					_SCREAMING_SNAKE_CASE=None    ,					)				-> Tuple:




									"""simple docstring"""





									_UpperCAmelCase					=    parent
									_UpperCAmelCase					=    batch_size
									_UpperCAmelCase					=    image_size
									_UpperCAmelCase					=    num_channels
									_UpperCAmelCase					=    embeddings_size
									_UpperCAmelCase					=    hidden_sizes
									_UpperCAmelCase					=    depths
									_UpperCAmelCase					=    is_training
									_UpperCAmelCase					=    use_labels
									_UpperCAmelCase					=    hidden_act
									_UpperCAmelCase					=    num_labels
									_UpperCAmelCase					=    scope
									_UpperCAmelCase					=    len(_SCREAMING_SNAKE_CASE		)
		def 			UpperCAmelCase__       (    self		)				-> List[Any]:




									"""simple docstring"""





									_UpperCAmelCase					=    floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]		)

									_UpperCAmelCase					=    self.get_config()

									return config, pixel_values
		def 			UpperCAmelCase__       (    self		)				-> Union[str, Any]:




									"""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    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE		)				-> Optional[Any]:




									"""simple docstring"""





									_UpperCAmelCase					=    FlaxResNetModel(config=_SCREAMING_SNAKE_CASE		)
									_UpperCAmelCase					=    model(_SCREAMING_SNAKE_CASE		)

									# 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    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE		)				-> Any:




									"""simple docstring"""





									_UpperCAmelCase					=    self.num_labels
									_UpperCAmelCase					=    FlaxResNetForImageClassification(config=_SCREAMING_SNAKE_CASE		)
									_UpperCAmelCase					=    model(_SCREAMING_SNAKE_CASE		)
									self.parent.assertEqual(result.logits.shape    ,					(self.batch_size, self.num_labels)		)






		def 			UpperCAmelCase__       (    self		)				-> Any:




									"""simple docstring"""





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



@require_flax
class 	__a   (       UpperCAmelCase					,   unittest.TestCase    ):
		_a			:						Any    			=			(FlaxResNetModel, FlaxResNetForImageClassification) if is_flax_available() else ()

		_a			:						Dict    			=			False
		_a			:						Optional[Any]    			=			False
		_a			:						Optional[Any]    			=			False
		def 			UpperCAmelCase__       (    self		)				-> None:




									"""simple docstring"""





									_UpperCAmelCase					=    FlaxResNetModelTester(self		)
									_UpperCAmelCase					=    ConfigTester(self    ,					config_class=_SCREAMING_SNAKE_CASE    ,					has_text_modality=_SCREAMING_SNAKE_CASE		)
		def 			UpperCAmelCase__       (    self		)				-> 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		)				-> int:




									"""simple docstring"""





									return
		def 			UpperCAmelCase__       (    self		)				-> Tuple:




									"""simple docstring"""





									_UpperCAmelCase					=    self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_model(*_SCREAMING_SNAKE_CASE		)
		def 			UpperCAmelCase__       (    self		)				-> List[Any]:




									"""simple docstring"""





									_UpperCAmelCase					=    self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_for_image_classification(*_SCREAMING_SNAKE_CASE		)
		@unittest.skip(reason='ResNet does not use inputs_embeds'		)
		def 			UpperCAmelCase__       (    self		)				-> Optional[Any]:




									"""simple docstring"""





									pass
		@unittest.skip(reason='ResNet does not support input and output embeddings'		)
		def 			UpperCAmelCase__       (    self		)				-> Optional[int]:




									"""simple docstring"""





									pass
		def 			UpperCAmelCase__       (    self		)				-> Dict:




									"""simple docstring"""





									_UpperCAmelCase	, _UpperCAmelCase					=    self.model_tester.prepare_config_and_inputs_for_common()

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

																_UpperCAmelCase					=    ['pixel_values']
																self.assertListEqual(arg_names[:1]    ,					_SCREAMING_SNAKE_CASE		)
		def 			UpperCAmelCase__       (    self		)				-> int:




									"""simple docstring"""





									def check_hidden_states_output(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE		):
																_UpperCAmelCase					=    model_class(_SCREAMING_SNAKE_CASE		)

																_UpperCAmelCase					=    model(**self._prepare_for_class(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE		)		)

																_UpperCAmelCase					=    outputs.encoder_hidden_states if config.is_encoder_decoder else outputs.hidden_states

																_UpperCAmelCase					=    self.model_tester.num_stages
																self.assertEqual(len(_SCREAMING_SNAKE_CASE		)    ,					expected_num_stages + 1		)
		@unittest.skip(reason='ResNet does not use feedforward chunking'		)
		def 			UpperCAmelCase__       (    self		)				-> List[Any]:




									"""simple docstring"""





									pass






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




									"""simple docstring"""





									_UpperCAmelCase	, _UpperCAmelCase					=    self.model_tester.prepare_config_and_inputs_for_common()

									for model_class in self.all_model_classes:
																with self.subTest(model_class.__name__		):
																							_UpperCAmelCase					=    self._prepare_for_class(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE		)
																							_UpperCAmelCase					=    model_class(_SCREAMING_SNAKE_CASE		)

																							@jax.jit
																							def model_jitted(_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE		):
																														return model(pixel_values=_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE		)

																							with self.subTest('JIT Enabled'		):
																														_UpperCAmelCase					=    model_jitted(**_SCREAMING_SNAKE_CASE		).to_tuple()

																							with self.subTest('JIT Disabled'		):
																														with jax.disable_jit():
																																					_UpperCAmelCase					=    model_jitted(**_SCREAMING_SNAKE_CASE		).to_tuple()

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



def  lowerCAmelCase__				(    )						->	Optional[int]:


							'''simple docstring'''





							_UpperCAmelCase					=    Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png' )
							return image







@require_flax
class 	__a   (       unittest.TestCase    ):
		@cached_property
		def 			UpperCAmelCase__       (    self		)				-> List[str]:




									"""simple docstring"""





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






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




									"""simple docstring"""





									_UpperCAmelCase					=    FlaxResNetForImageClassification.from_pretrained('microsoft/resnet-50'		)

									_UpperCAmelCase					=    self.default_image_processor
									_UpperCAmelCase					=    prepare_img()
									_UpperCAmelCase					=    image_processor(images=_SCREAMING_SNAKE_CASE    ,					return_tensors='np'		)

									_UpperCAmelCase					=    model(**_SCREAMING_SNAKE_CASE		)

									# verify the logits
									_UpperCAmelCase					=    (1, 1000)
									self.assertEqual(outputs.logits.shape    ,					_SCREAMING_SNAKE_CASE		)

									_UpperCAmelCase					=    jnp.array([-11.1069, -9.7877, -8.3777]		)

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