


import unittest

import numpy as np

from transformers.testing_utils import require_flax, require_tf, require_torch
from transformers.utils import (
    expand_dims,
    flatten_dict,
    is_flax_available,
    is_tf_available,
    is_torch_available,
    reshape,
    squeeze,
    transpose,
)


if is_flax_available():
       import jax.numpy as jnp

if is_tf_available():
       import tensorflow as tf

if is_torch_available():
       import torch







class        UpperCamelCase__   (	unittest.TestCase   ):

     def   UpperCAmelCase__       (     self       :   Optional[int]       ):






          '''simple docstring'''






          lowercase_  							=			{
              """task_specific_params""": {
                  """summarization""": {"""length_penalty""": 1.0, """max_length""": 128, """min_length""": 12, """num_beams""": 4},
                  """summarization_cnn""": {"""length_penalty""": 2.0, """max_length""": 142, """min_length""": 56, """num_beams""": 4},
                  """summarization_xsum""": {"""length_penalty""": 1.0, """max_length""": 62, """min_length""": 11, """num_beams""": 6},
              }
          }
          lowercase_  							=			{
              """task_specific_params.summarization.length_penalty""": 1.0,
              """task_specific_params.summarization.max_length""": 128,
              """task_specific_params.summarization.min_length""": 12,
              """task_specific_params.summarization.num_beams""": 4,
              """task_specific_params.summarization_cnn.length_penalty""": 2.0,
              """task_specific_params.summarization_cnn.max_length""": 142,
              """task_specific_params.summarization_cnn.min_length""": 56,
              """task_specific_params.summarization_cnn.num_beams""": 4,
              """task_specific_params.summarization_xsum.length_penalty""": 1.0,
              """task_specific_params.summarization_xsum.max_length""": 62,
              """task_specific_params.summarization_xsum.min_length""": 11,
              """task_specific_params.summarization_xsum.num_beams""": 6,
          }

          self.assertEqual(flatten_dict(UpperCamelCase__       )							,					UpperCamelCase__       )

     def   UpperCAmelCase__       (     self       :   int       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(3							,					4       )
          self.assertTrue(np.allclose(transpose(UpperCamelCase__       )							,					x.transpose()       )       )

          lowercase_  							=			np.random.randn(3							,					4							,					5       )
          self.assertTrue(np.allclose(transpose(UpperCamelCase__							,					axes=(1, 2, 0)       )							,					x.transpose((1, 2, 0)       )       )       )

     @require_torch
     def   UpperCAmelCase__       (     self       :   List[Any]       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(3							,					4       )
          lowercase_  							=			torch.tensor(UpperCamelCase__       )
          self.assertTrue(np.allclose(transpose(UpperCamelCase__       )							,					transpose(UpperCamelCase__       ).numpy()       )       )

          lowercase_  							=			np.random.randn(3							,					4							,					5       )
          lowercase_  							=			torch.tensor(UpperCamelCase__       )
          self.assertTrue(np.allclose(transpose(UpperCamelCase__							,					axes=(1, 2, 0)       )							,					transpose(UpperCamelCase__							,					axes=(1, 2, 0)       ).numpy()       )       )

     @require_tf
     def   UpperCAmelCase__       (     self       :   Optional[int]       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(3							,					4       )
          lowercase_  							=			tf.constant(UpperCamelCase__       )
          self.assertTrue(np.allclose(transpose(UpperCamelCase__       )							,					transpose(UpperCamelCase__       ).numpy()       )       )

          lowercase_  							=			np.random.randn(3							,					4							,					5       )
          lowercase_  							=			tf.constant(UpperCamelCase__       )
          self.assertTrue(np.allclose(transpose(UpperCamelCase__							,					axes=(1, 2, 0)       )							,					transpose(UpperCamelCase__							,					axes=(1, 2, 0)       ).numpy()       )       )

     @require_flax
     def   UpperCAmelCase__       (     self       :   Dict       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(3							,					4       )
          lowercase_  							=			jnp.array(UpperCamelCase__       )
          self.assertTrue(np.allclose(transpose(UpperCamelCase__       )							,					np.asarray(transpose(UpperCamelCase__       )       )       )       )

          lowercase_  							=			np.random.randn(3							,					4							,					5       )
          lowercase_  							=			jnp.array(UpperCamelCase__       )
          self.assertTrue(np.allclose(transpose(UpperCamelCase__							,					axes=(1, 2, 0)       )							,					np.asarray(transpose(UpperCamelCase__							,					axes=(1, 2, 0)       )       )       )       )

     def   UpperCAmelCase__       (     self       :   Tuple       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(3							,					4       )
          self.assertTrue(np.allclose(reshape(UpperCamelCase__							,					(4, 3)       )							,					np.reshape(UpperCamelCase__							,					(4, 3)       )       )       )

          lowercase_  							=			np.random.randn(3							,					4							,					5       )
          self.assertTrue(np.allclose(reshape(UpperCamelCase__							,					(12, 5)       )							,					np.reshape(UpperCamelCase__							,					(12, 5)       )       )       )

     @require_torch
     def   UpperCAmelCase__       (     self       :   Union[str, Any]       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(3							,					4       )
          lowercase_  							=			torch.tensor(UpperCamelCase__       )
          self.assertTrue(np.allclose(reshape(UpperCamelCase__							,					(4, 3)       )							,					reshape(UpperCamelCase__							,					(4, 3)       ).numpy()       )       )

          lowercase_  							=			np.random.randn(3							,					4							,					5       )
          lowercase_  							=			torch.tensor(UpperCamelCase__       )
          self.assertTrue(np.allclose(reshape(UpperCamelCase__							,					(12, 5)       )							,					reshape(UpperCamelCase__							,					(12, 5)       ).numpy()       )       )

     @require_tf
     def   UpperCAmelCase__       (     self       :   Any       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(3							,					4       )
          lowercase_  							=			tf.constant(UpperCamelCase__       )
          self.assertTrue(np.allclose(reshape(UpperCamelCase__							,					(4, 3)       )							,					reshape(UpperCamelCase__							,					(4, 3)       ).numpy()       )       )

          lowercase_  							=			np.random.randn(3							,					4							,					5       )
          lowercase_  							=			tf.constant(UpperCamelCase__       )
          self.assertTrue(np.allclose(reshape(UpperCamelCase__							,					(12, 5)       )							,					reshape(UpperCamelCase__							,					(12, 5)       ).numpy()       )       )

     @require_flax
     def   UpperCAmelCase__       (     self       :   Tuple       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(3							,					4       )
          lowercase_  							=			jnp.array(UpperCamelCase__       )
          self.assertTrue(np.allclose(reshape(UpperCamelCase__							,					(4, 3)       )							,					np.asarray(reshape(UpperCamelCase__							,					(4, 3)       )       )       )       )

          lowercase_  							=			np.random.randn(3							,					4							,					5       )
          lowercase_  							=			jnp.array(UpperCamelCase__       )
          self.assertTrue(np.allclose(reshape(UpperCamelCase__							,					(12, 5)       )							,					np.asarray(reshape(UpperCamelCase__							,					(12, 5)       )       )       )       )

     def   UpperCAmelCase__       (     self       :   Dict       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(1							,					3							,					4       )
          self.assertTrue(np.allclose(squeeze(UpperCamelCase__       )							,					np.squeeze(UpperCamelCase__       )       )       )

          lowercase_  							=			np.random.randn(1							,					4							,					1							,					5       )
          self.assertTrue(np.allclose(squeeze(UpperCamelCase__							,					axis=2       )							,					np.squeeze(UpperCamelCase__							,					axis=2       )       )       )

     @require_torch
     def   UpperCAmelCase__       (     self       :   Any       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(1							,					3							,					4       )
          lowercase_  							=			torch.tensor(UpperCamelCase__       )
          self.assertTrue(np.allclose(squeeze(UpperCamelCase__       )							,					squeeze(UpperCamelCase__       ).numpy()       )       )

          lowercase_  							=			np.random.randn(1							,					4							,					1							,					5       )
          lowercase_  							=			torch.tensor(UpperCamelCase__       )
          self.assertTrue(np.allclose(squeeze(UpperCamelCase__							,					axis=2       )							,					squeeze(UpperCamelCase__							,					axis=2       ).numpy()       )       )

     @require_tf
     def   UpperCAmelCase__       (     self       :   Dict       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(1							,					3							,					4       )
          lowercase_  							=			tf.constant(UpperCamelCase__       )
          self.assertTrue(np.allclose(squeeze(UpperCamelCase__       )							,					squeeze(UpperCamelCase__       ).numpy()       )       )

          lowercase_  							=			np.random.randn(1							,					4							,					1							,					5       )
          lowercase_  							=			tf.constant(UpperCamelCase__       )
          self.assertTrue(np.allclose(squeeze(UpperCamelCase__							,					axis=2       )							,					squeeze(UpperCamelCase__							,					axis=2       ).numpy()       )       )

     @require_flax
     def   UpperCAmelCase__       (     self       :   int       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(1							,					3							,					4       )
          lowercase_  							=			jnp.array(UpperCamelCase__       )
          self.assertTrue(np.allclose(squeeze(UpperCamelCase__       )							,					np.asarray(squeeze(UpperCamelCase__       )       )       )       )

          lowercase_  							=			np.random.randn(1							,					4							,					1							,					5       )
          lowercase_  							=			jnp.array(UpperCamelCase__       )
          self.assertTrue(np.allclose(squeeze(UpperCamelCase__							,					axis=2       )							,					np.asarray(squeeze(UpperCamelCase__							,					axis=2       )       )       )       )

     def   UpperCAmelCase__       (     self       :   Dict       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(3							,					4       )
          self.assertTrue(np.allclose(expand_dims(UpperCamelCase__							,					axis=1       )							,					np.expand_dims(UpperCamelCase__							,					axis=1       )       )       )

     @require_torch
     def   UpperCAmelCase__       (     self       :   Any       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(3							,					4       )
          lowercase_  							=			torch.tensor(UpperCamelCase__       )
          self.assertTrue(np.allclose(expand_dims(UpperCamelCase__							,					axis=1       )							,					expand_dims(UpperCamelCase__							,					axis=1       ).numpy()       )       )

     @require_tf
     def   UpperCAmelCase__       (     self       :   Optional[int]       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(3							,					4       )
          lowercase_  							=			tf.constant(UpperCamelCase__       )
          self.assertTrue(np.allclose(expand_dims(UpperCamelCase__							,					axis=1       )							,					expand_dims(UpperCamelCase__							,					axis=1       ).numpy()       )       )







     @require_flax
     def   UpperCAmelCase__       (     self       :   Union[str, Any]       ):






          '''simple docstring'''






          lowercase_  							=			np.random.randn(3							,					4       )
          lowercase_  							=			jnp.array(UpperCamelCase__       )
          self.assertTrue(np.allclose(expand_dims(UpperCamelCase__							,					axis=1       )							,					np.asarray(expand_dims(UpperCamelCase__							,					axis=1       )       )       )       )






from typing import Dict, Iterable, List, Optional, Union

import numpy as np

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


a					  =     logging.get_logger(__name__)







class        UpperCamelCase__   (	__magic_name__   ):
					__SCREAMING_SNAKE_CASE       :  List[Any]						=   ['pixel_values']

					def __init__(     self       :   List[str]							,					UpperCamelCase__       :   bool = True							,					UpperCamelCase__       :   Dict[str, int] = None							,					UpperCamelCase__       :   PILImageResampling = PILImageResampling.BICUBIC							,					UpperCamelCase__       :   bool = True							,					UpperCamelCase__       :   Dict[str, int] = None							,					UpperCamelCase__       :   bool = True							,					UpperCamelCase__       :   Union[int, float] = 1 / 255							,					UpperCamelCase__       :   bool = True							,					UpperCamelCase__       :   Optional[Union[float, Iterable[float]]] = IMAGENET_DEFAULT_MEAN							,					UpperCamelCase__       :   Optional[Union[float, Iterable[float]]] = IMAGENET_DEFAULT_STD							,					**UpperCamelCase__       :   Dict							,					):






										'''simple docstring'''






										super().__init__(**UpperCamelCase__       )
										lowercase_  							=			size if size is not None else {"""shortest_edge""": 224}
										lowercase_  							=			get_size_dict(UpperCamelCase__							,					default_to_square=UpperCamelCase__       )
										lowercase_  							=			crop_size if crop_size is not None else {"""height""": 224, """width""": 224}
										lowercase_  							=			get_size_dict(UpperCamelCase__							,					param_name="""crop_size"""       )

										lowercase_  							=			do_resize
										lowercase_  							=			size
										lowercase_  							=			resample
										lowercase_  							=			do_center_crop
										lowercase_  							=			crop_size
										lowercase_  							=			do_rescale
										lowercase_  							=			rescale_factor
										lowercase_  							=			do_normalize
										lowercase_  							=			image_mean if image_mean is not None else IMAGENET_DEFAULT_MEAN
										lowercase_  							=			image_std if image_std is not None else IMAGENET_DEFAULT_STD

					def   UpperCAmelCase__       (     self       :   int							,					UpperCamelCase__       :   np.ndarray							,					UpperCamelCase__       :   Dict[str, int]							,					UpperCamelCase__       :   PILImageResampling = PILImageResampling.BICUBIC							,					UpperCamelCase__       :   Optional[Union[str, ChannelDimension]] = None							,					**UpperCamelCase__       :   Optional[int]							,					):






										'''simple docstring'''






										lowercase_  							=			get_size_dict(UpperCamelCase__							,					default_to_square=UpperCamelCase__       )
										# size_dict is a dict with either keys "height" and "width" or "shortest_edge"
										if "shortest_edge" in size:
															lowercase_  							=			int((256 / 224) * size["""shortest_edge"""]       )
															lowercase_  							=			get_resize_output_image_size(UpperCamelCase__							,					size=UpperCamelCase__							,					default_to_square=UpperCamelCase__       )
															lowercase_  							=			{"""height""": output_size[0], """width""": output_size[1]}
										if "height" not in size_dict or "width" not in size_dict:
															raise ValueError(
															    F'''Size dict must have keys \'height\' and \'width\' or \'shortest_edge\'. Got {size_dict.keys()}'''       )
										return resize(
										    UpperCamelCase__							,					size=(size_dict["""height"""], size_dict["""width"""])							,					resample=UpperCamelCase__							,					data_format=UpperCamelCase__							,					**UpperCamelCase__       )

					def   UpperCAmelCase__       (     self       :   str							,					UpperCamelCase__       :   np.ndarray							,					UpperCamelCase__       :   Dict[str, int]							,					UpperCamelCase__       :   Optional[Union[str, ChannelDimension]] = None							,					**UpperCamelCase__       :   str							,					):






										'''simple docstring'''






										lowercase_  							=			get_size_dict(UpperCamelCase__       )
										if "height" not in size or "width" not in size:
															raise ValueError(F'''Size dict must have keys \'height\' and \'width\'. Got {size.keys()}'''       )
										return center_crop(UpperCamelCase__							,					size=(size["""height"""], size["""width"""])							,					data_format=UpperCamelCase__							,					**UpperCamelCase__       )

					def   UpperCAmelCase__       (     self       :   Optional[int]							,					UpperCamelCase__       :   np.ndarray							,					UpperCamelCase__       :   Union[int, float]							,					UpperCamelCase__       :   Optional[Union[str, ChannelDimension]] = None							,					**UpperCamelCase__       :   str							,					):






										'''simple docstring'''






										return rescale(UpperCamelCase__							,					scale=UpperCamelCase__							,					data_format=UpperCamelCase__							,					**UpperCamelCase__       )

					def   UpperCAmelCase__       (     self       :   List[str]							,					UpperCamelCase__       :   np.ndarray							,					UpperCamelCase__       :   Union[float, List[float]]							,					UpperCamelCase__       :   Union[float, List[float]]							,					UpperCamelCase__       :   Optional[Union[str, ChannelDimension]] = None							,					**UpperCamelCase__       :   Optional[int]							,					):






										'''simple docstring'''






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







					def   UpperCAmelCase__       (     self       :   Dict							,					UpperCamelCase__       :   ImageInput							,					UpperCamelCase__       :   Optional[bool] = None							,					UpperCamelCase__       :   Optional[Dict[str, int]] = None							,					UpperCamelCase__       :   PILImageResampling = None							,					UpperCamelCase__       :   Optional[bool] = None							,					UpperCamelCase__       :   Optional[Dict[str, int]] = None							,					UpperCamelCase__       :   Optional[bool] = None							,					UpperCamelCase__       :   Optional[float] = None							,					UpperCamelCase__       :   Optional[bool] = None							,					UpperCamelCase__       :   Optional[Union[float, Iterable[float]]] = None							,					UpperCamelCase__       :   Optional[Union[float, Iterable[float]]] = None							,					UpperCamelCase__       :   Optional[TensorType] = None							,					UpperCamelCase__       :   ChannelDimension = ChannelDimension.FIRST							,					**UpperCamelCase__       :   Optional[int]							,					):






										'''simple docstring'''






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

										lowercase_  							=			size if size is not None else self.size
										lowercase_  							=			get_size_dict(UpperCamelCase__							,					default_to_square=UpperCamelCase__       )
										lowercase_  							=			crop_size if crop_size is not None else self.crop_size
										lowercase_  							=			get_size_dict(UpperCamelCase__							,					param_name="""crop_size"""       )

										lowercase_  							=			make_list_of_images(UpperCamelCase__       )

										if not valid_images(UpperCamelCase__       ):
															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:
															raise ValueError("""Size 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.
										lowercase_  							=			[to_numpy_array(UpperCamelCase__       ) for image in images]

										if do_resize:
															lowercase_  							=			[self.resize(UpperCamelCase__							,					UpperCamelCase__							,					UpperCamelCase__       ) for image in images]

										if do_center_crop:
															lowercase_  							=			[self.center_crop(UpperCamelCase__							,					UpperCamelCase__       ) for image in images]

										if do_rescale:
															lowercase_  							=			[self.rescale(UpperCamelCase__							,					UpperCamelCase__       ) for image in images]

										if do_normalize:
															lowercase_  							=			[self.normalize(UpperCamelCase__							,					UpperCamelCase__							,					UpperCamelCase__       ) for image in images]

										lowercase_  							=			[to_channel_dimension_format(UpperCamelCase__							,					UpperCamelCase__       ) for image in images]

										lowercase_  							=			{"""pixel_values""": images}
										return BatchFeature(data=UpperCamelCase__							,					tensor_type=UpperCamelCase__       )


