


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,
    get_resize_output_image_size,
    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, logging


UpperCAmelCase_				:			List[Any]   =	logging.get_logger(__name__)
class 			SCREAMING_SNAKE_CASE__  (    lowercase__      ):
      snake_case__    :					Optional[int]					       =						['''pixel_values''']
      def __init__(	self    :	Dict					,							SCREAMING_SNAKE_CASE__    :	bool = True					,							SCREAMING_SNAKE_CASE__    :	Optional[Dict[str, int]] = None					,							SCREAMING_SNAKE_CASE__    :	PILImageResampling = PILImageResampling.BILINEAR					,							SCREAMING_SNAKE_CASE__    :	bool = True					,							SCREAMING_SNAKE_CASE__    :	Dict[str, int] = None					,							SCREAMING_SNAKE_CASE__    :	bool = True					,							SCREAMING_SNAKE_CASE__    :	Union[int, float] = 1 / 2_5_5					,							SCREAMING_SNAKE_CASE__    :	bool = True					,							SCREAMING_SNAKE_CASE__    :	Optional[Union[float, List[float]]] = None					,							SCREAMING_SNAKE_CASE__    :	Optional[Union[float, List[float]]] = None					,							**SCREAMING_SNAKE_CASE__    :	Optional[Any]					,							)		->      None:
             super().__init__(**SCREAMING_SNAKE_CASE__					)
             a_ :		str							=  size if size is not None else {'shortest_edge': 2_5_6}
             a_ :		str							=  get_size_dict(SCREAMING_SNAKE_CASE__					,							default_to_square=SCREAMING_SNAKE_CASE__					)
             a_ :		Optional[int]							=  crop_size if crop_size is not None else {'height': 2_2_4, 'width': 2_2_4}
             a_ :		str							=  get_size_dict(SCREAMING_SNAKE_CASE__					)
             a_ :		Union[str, Any]							=  do_resize
             a_ :		Union[str, Any]							=  size
             a_ :		Optional[int]							=  resample
             a_ :		Optional[Any]							=  do_center_crop
             a_ :		List[Any]							=  crop_size
             a_ :		Any							=  do_rescale
             a_ :		Union[str, Any]							=  rescale_factor
             a_ :		List[str]							=  do_normalize
             a_ :		Union[str, Any]							=  image_mean if image_mean is not None else IMAGENET_STANDARD_MEAN
             a_ :		Optional[Any]							=  image_std if image_std is not None else IMAGENET_STANDARD_STD
      def 	SCREAMING_SNAKE_CASE							(	self    :	Dict					,							SCREAMING_SNAKE_CASE__    :	np.ndarray					,							SCREAMING_SNAKE_CASE__    :	Dict[str, int]					,							SCREAMING_SNAKE_CASE__    :	PILImageResampling = PILImageResampling.BICUBIC					,							SCREAMING_SNAKE_CASE__    :	Optional[Union[str, ChannelDimension]] = None					,							**SCREAMING_SNAKE_CASE__    :	List[Any]					,							)		->      np.ndarray:
             a_ :		Union[str, Any]							=  get_size_dict(SCREAMING_SNAKE_CASE__					,							default_to_square=SCREAMING_SNAKE_CASE__					)
             if "shortest_edge" not in size:
                    raise ValueError(F"""The `size` parameter must contain the key `shortest_edge`. Got {size.keys()}"""					)
             a_ :		int							=  get_resize_output_image_size(SCREAMING_SNAKE_CASE__					,							size=size['shortest_edge']					,							default_to_square=SCREAMING_SNAKE_CASE__					)
             return resize(SCREAMING_SNAKE_CASE__					,							size=SCREAMING_SNAKE_CASE__					,							resample=SCREAMING_SNAKE_CASE__					,							data_format=SCREAMING_SNAKE_CASE__					,							**SCREAMING_SNAKE_CASE__					)
      def 	SCREAMING_SNAKE_CASE							(	self    :	str					,							SCREAMING_SNAKE_CASE__    :	np.ndarray					,							SCREAMING_SNAKE_CASE__    :	Dict[str, int]					,							SCREAMING_SNAKE_CASE__    :	Optional[Union[str, ChannelDimension]] = None					,							**SCREAMING_SNAKE_CASE__    :	str					,							)		->      np.ndarray:
             a_ :		Optional[int]							=  get_size_dict(SCREAMING_SNAKE_CASE__					)
             return center_crop(SCREAMING_SNAKE_CASE__					,							size=(size['height'], size['width'])					,							data_format=SCREAMING_SNAKE_CASE__					,							**SCREAMING_SNAKE_CASE__					)
      def 	SCREAMING_SNAKE_CASE							(	self    :	Optional[Any]					,							SCREAMING_SNAKE_CASE__    :	np.ndarray					,							SCREAMING_SNAKE_CASE__    :	float					,							SCREAMING_SNAKE_CASE__    :	Optional[Union[str, ChannelDimension]] = None					,							**SCREAMING_SNAKE_CASE__    :	Union[str, Any]					)		->      np.ndarray:
             return rescale(SCREAMING_SNAKE_CASE__					,							scale=SCREAMING_SNAKE_CASE__					,							data_format=SCREAMING_SNAKE_CASE__					,							**SCREAMING_SNAKE_CASE__					)
      def 	SCREAMING_SNAKE_CASE							(	self    :	Optional[int]					,							SCREAMING_SNAKE_CASE__    :	np.ndarray					,							SCREAMING_SNAKE_CASE__    :	Union[float, List[float]]					,							SCREAMING_SNAKE_CASE__    :	Union[float, List[float]]					,							SCREAMING_SNAKE_CASE__    :	Optional[Union[str, ChannelDimension]] = None					,							**SCREAMING_SNAKE_CASE__    :	Tuple					,							)		->      np.ndarray:
             return normalize(SCREAMING_SNAKE_CASE__					,							mean=SCREAMING_SNAKE_CASE__					,							std=SCREAMING_SNAKE_CASE__					,							data_format=SCREAMING_SNAKE_CASE__					,							**SCREAMING_SNAKE_CASE__					)

      def 	SCREAMING_SNAKE_CASE							(	self    :	Any					,							SCREAMING_SNAKE_CASE__    :	ImageInput					,							SCREAMING_SNAKE_CASE__    :	Optional[bool] = None					,							SCREAMING_SNAKE_CASE__    :	Dict[str, int] = None					,							SCREAMING_SNAKE_CASE__    :	PILImageResampling = None					,							SCREAMING_SNAKE_CASE__    :	bool = None					,							SCREAMING_SNAKE_CASE__    :	Dict[str, int] = None					,							SCREAMING_SNAKE_CASE__    :	Optional[bool] = None					,							SCREAMING_SNAKE_CASE__    :	Optional[float] = None					,							SCREAMING_SNAKE_CASE__    :	Optional[bool] = None					,							SCREAMING_SNAKE_CASE__    :	Optional[Union[float, List[float]]] = None					,							SCREAMING_SNAKE_CASE__    :	Optional[Union[float, List[float]]] = None					,							SCREAMING_SNAKE_CASE__    :	Optional[Union[str, TensorType]] = None					,							SCREAMING_SNAKE_CASE__    :	Union[str, ChannelDimension] = ChannelDimension.FIRST					,							**SCREAMING_SNAKE_CASE__    :	Optional[Any]					,							)		->      Union[str, Any]:
             a_ :		Dict							=  do_resize if do_resize is not None else self.do_resize
             a_ :		Any							=  size if size is not None else self.size
             a_ :		Any							=  get_size_dict(SCREAMING_SNAKE_CASE__					,							default_to_square=SCREAMING_SNAKE_CASE__					)
             a_ :		Union[str, Any]							=  resample if resample is not None else self.resample
             a_ :		Union[str, Any]							=  do_center_crop if do_center_crop is not None else self.do_center_crop
             a_ :		List[str]							=  crop_size if crop_size is not None else self.crop_size
             a_ :		str							=  get_size_dict(SCREAMING_SNAKE_CASE__					)
             a_ :		List[Any]							=  do_rescale if do_rescale is not None else self.do_rescale
             a_ :		List[str]							=  rescale_factor if rescale_factor is not None else self.rescale_factor
             a_ :		List[str]							=  do_normalize if do_normalize is not None else self.do_normalize
             a_ :		Union[str, Any]							=  image_mean if image_mean is not None else self.image_mean
             a_ :		int							=  image_std if image_std is not None else self.image_std

             a_ :		Union[str, Any]							=  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:
                    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.
             a_ :		int							=  [to_numpy_array(SCREAMING_SNAKE_CASE__					) for image in images]

             if do_resize:
                    a_ :		Any							=  [self.resize(image=SCREAMING_SNAKE_CASE__					,							size=SCREAMING_SNAKE_CASE__					,							resample=SCREAMING_SNAKE_CASE__					) for image in images]

             if do_center_crop:
                    a_ :		Optional[Any]							=  [self.center_crop(image=SCREAMING_SNAKE_CASE__					,							size=SCREAMING_SNAKE_CASE__					) for image in images]

             if do_rescale:
                    a_ :		Any							=  [self.rescale(image=SCREAMING_SNAKE_CASE__					,							scale=SCREAMING_SNAKE_CASE__					) for image in images]

             if do_normalize:
                    a_ :		str							=  [self.normalize(image=SCREAMING_SNAKE_CASE__					,							mean=SCREAMING_SNAKE_CASE__					,							std=SCREAMING_SNAKE_CASE__					) for image in images]

             a_ :		Optional[int]							=  [to_channel_dimension_format(SCREAMING_SNAKE_CASE__					,							SCREAMING_SNAKE_CASE__					) for image in images]

             a_ :		Tuple							=  {'pixel_values': images}
             return BatchFeature(data=SCREAMING_SNAKE_CASE__					,							tensor_type=SCREAMING_SNAKE_CASE__					)






from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


UpperCAmelCase_				:			Union[str, Any]   =	{
    'configuration_whisper': ['WHISPER_PRETRAINED_CONFIG_ARCHIVE_MAP', 'WhisperConfig', 'WhisperOnnxConfig'],
    'feature_extraction_whisper': ['WhisperFeatureExtractor'],
    'processing_whisper': ['WhisperProcessor'],
    'tokenization_whisper': ['WhisperTokenizer'],
}

try:
   if not is_tokenizers_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   UpperCAmelCase_				:			Optional[Any]   =	['WhisperTokenizerFast']

try:
   if not is_torch_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   UpperCAmelCase_				:			int   =	[
       'WHISPER_PRETRAINED_MODEL_ARCHIVE_LIST',
       'WhisperForConditionalGeneration',
       'WhisperModel',
       'WhisperPreTrainedModel',
       'WhisperForAudioClassification',
   ]

try:
   if not is_tf_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   UpperCAmelCase_				:			int   =	[
       'TF_WHISPER_PRETRAINED_MODEL_ARCHIVE_LIST',
       'TFWhisperForConditionalGeneration',
       'TFWhisperModel',
       'TFWhisperPreTrainedModel',
   ]

try:
   if not is_flax_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   UpperCAmelCase_				:			Any   =	[
       'FlaxWhisperForConditionalGeneration',
       'FlaxWhisperModel',
       'FlaxWhisperPreTrainedModel',
       'FlaxWhisperForAudioClassification',
   ]


if TYPE_CHECKING:
   from .configuration_whisper import WHISPER_PRETRAINED_CONFIG_ARCHIVE_MAP, WhisperConfig, WhisperOnnxConfig
   from .feature_extraction_whisper import WhisperFeatureExtractor
   from .processing_whisper import WhisperProcessor
   from .tokenization_whisper import WhisperTokenizer

   try:
      if not is_tokenizers_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .tokenization_whisper_fast import WhisperTokenizerFast

   try:
      if not is_torch_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .modeling_whisper import (
          WHISPER_PRETRAINED_MODEL_ARCHIVE_LIST,
          WhisperForAudioClassification,
          WhisperForConditionalGeneration,
          WhisperModel,
          WhisperPreTrainedModel,
      )

   try:
      if not is_tf_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .modeling_tf_whisper import (
          TF_WHISPER_PRETRAINED_MODEL_ARCHIVE_LIST,
          TFWhisperForConditionalGeneration,
          TFWhisperModel,
          TFWhisperPreTrainedModel,
      )

   try:
      if not is_flax_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .modeling_flax_whisper import (
          FlaxWhisperForAudioClassification,
          FlaxWhisperForConditionalGeneration,
          FlaxWhisperModel,
          FlaxWhisperPreTrainedModel,
      )

else:
   import sys

   UpperCAmelCase_				:			int   =	_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)


