

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 convert_to_rgb, normalize, rescale, resize, to_channel_dimension_format
from ...image_utils import (
    OPENAI_CLIP_MEAN,
    OPENAI_CLIP_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


a_    :						int    		=      logging.get_logger(__name__)




class      UpperCamelCase (     SCREAMING_SNAKE_CASE   ):
				__UpperCamelCase         =["pixel_values"]

				def __init__(			self :      Union[str, Any]							,    snake_case__ :      bool = True							,    snake_case__ :      Dict[str, int] = None							,    snake_case__ :      PILImageResampling = PILImageResampling.BICUBIC							,    snake_case__ :      bool = True							,    snake_case__ :      Union[int, float] = 1 / 2_5_5							,    snake_case__ :      bool = True							,    snake_case__ :      Optional[Union[float, List[float]]] = None							,    snake_case__ :      Optional[Union[float, List[float]]] = None							,    snake_case__ :      bool = True							,    **snake_case__ :      Union[str, Any]							,    ):

					"""simple docstring"""






					super().__init__(**snake_case__    )
					SCREAMING_SNAKE_CASE								=			size if size is not None else {'height': 3_8_4, 'width': 3_8_4}
					SCREAMING_SNAKE_CASE								=			get_size_dict(snake_case__							,    default_to_square=snake_case__    )

					SCREAMING_SNAKE_CASE								=			do_resize
					SCREAMING_SNAKE_CASE								=			size
					SCREAMING_SNAKE_CASE								=			resample
					SCREAMING_SNAKE_CASE								=			do_rescale
					SCREAMING_SNAKE_CASE								=			rescale_factor
					SCREAMING_SNAKE_CASE								=			do_normalize
					SCREAMING_SNAKE_CASE								=			image_mean if image_mean is not None else OPENAI_CLIP_MEAN
					SCREAMING_SNAKE_CASE								=			image_std if image_std is not None else OPENAI_CLIP_STD
					SCREAMING_SNAKE_CASE								=			do_convert_rgb

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

					"""simple docstring"""






					SCREAMING_SNAKE_CASE								=			get_size_dict(snake_case__							,    default_to_square=snake_case__    )
					if "height" not in size or "width" not in size:
						raise ValueError(F"""The `size` dictionary must contain the keys `height` and `width`. Got {size.keys()}"""    )
					SCREAMING_SNAKE_CASE								=			(size['height'], size['width'])
					return resize(snake_case__							,    size=snake_case__							,    resample=snake_case__							,    data_format=snake_case__							,    **snake_case__    )

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

					"""simple docstring"""






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

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

					"""simple docstring"""






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




				def UpperCamelCase			(			self :      List[Any]							,    snake_case__ :      ImageInput							,    snake_case__ :      Optional[bool] = None							,    snake_case__ :      Optional[Dict[str, int]] = None							,    snake_case__ :      PILImageResampling = None							,    snake_case__ :      Optional[bool] = None							,    snake_case__ :      Optional[float] = None							,    snake_case__ :      Optional[bool] = None							,    snake_case__ :      Optional[Union[float, List[float]]] = None							,    snake_case__ :      Optional[Union[float, List[float]]] = None							,    snake_case__ :      Optional[Union[str, TensorType]] = None							,    snake_case__ :      bool = None							,    snake_case__ :      ChannelDimension = ChannelDimension.FIRST							,    **snake_case__ :      Any							,    ):

					"""simple docstring"""






					SCREAMING_SNAKE_CASE								=			do_resize if do_resize is not None else self.do_resize
					SCREAMING_SNAKE_CASE								=			resample if resample is not None else self.resample
					SCREAMING_SNAKE_CASE								=			do_rescale if do_rescale is not None else self.do_rescale
					SCREAMING_SNAKE_CASE								=			rescale_factor if rescale_factor is not None else self.rescale_factor
					SCREAMING_SNAKE_CASE								=			do_normalize if do_normalize is not None else self.do_normalize
					SCREAMING_SNAKE_CASE								=			image_mean if image_mean is not None else self.image_mean
					SCREAMING_SNAKE_CASE								=			image_std if image_std is not None else self.image_std
					SCREAMING_SNAKE_CASE								=			do_convert_rgb if do_convert_rgb is not None else self.do_convert_rgb

					SCREAMING_SNAKE_CASE								=			size if size is not None else self.size
					SCREAMING_SNAKE_CASE								=			get_size_dict(snake_case__							,    default_to_square=snake_case__    )

					SCREAMING_SNAKE_CASE								=			make_list_of_images(snake_case__    )

					if not valid_images(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_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.'    )

					# PIL RGBA images are converted to RGB
					if do_convert_rgb:
						SCREAMING_SNAKE_CASE								=			[convert_to_rgb(snake_case__    ) for image in images]

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

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

					if do_rescale:
						SCREAMING_SNAKE_CASE								=			[self.rescale(image=snake_case__							,    scale=snake_case__    ) for image in images]

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

					SCREAMING_SNAKE_CASE								=			[to_channel_dimension_format(snake_case__							,    snake_case__    ) for image in images]

					SCREAMING_SNAKE_CASE								=			BatchFeature(data={'pixel_values': images}							,    tensor_type=snake_case__    )

					return encoded_outputs




import numpy as np
from nltk.translate import meteor_score

import datasets
from datasets.config import importlib_metadata, version


a_    :						List[str]    		=      version.parse(importlib_metadata.version("nltk"))
if NLTK_VERSION >= version.Version("3.6.4"):
      from nltk import word_tokenize


a_    :						Dict    		=      "\\n@inproceedings{banarjee2005,\n  title     = {{METEOR}: An Automatic Metric for {MT} Evaluation with Improved Correlation with Human Judgments},\n  author    = {Banerjee, Satanjeev  and Lavie, Alon},\n  booktitle = {Proceedings of the {ACL} Workshop on Intrinsic and Extrinsic Evaluation Measures for Machine Translation and/or Summarization},\n  month     = jun,\n  year      = {2005},\n  address   = {Ann Arbor, Michigan},\n  publisher = {Association for Computational Linguistics},\n  url       = {https://www.aclweb.org/anthology/W05-0909},\n  pages     = {65--72},\n}\n"

a_    :						str    		=      "\\nMETEOR, an automatic metric for machine translation evaluation\nthat is based on a generalized concept of unigram matching between the\nmachine-produced translation and human-produced reference translations.\nUnigrams can be matched based on their surface forms, stemmed forms,\nand meanings; furthermore, METEOR can be easily extended to include more\nadvanced matching strategies. Once all generalized unigram matches\nbetween the two strings have been found, METEOR computes a score for\nthis matching using a combination of unigram-precision, unigram-recall, and\na measure of fragmentation that is designed to directly capture how\nwell-ordered the matched words in the machine translation are in relation\nto the reference.\n\nMETEOR gets an R correlation value of 0.347 with human evaluation on the Arabic\ndata and 0.331 on the Chinese data. This is shown to be an improvement on\nusing simply unigram-precision, unigram-recall and their harmonic F1\ncombination.\n"

a_    :						int    		=      "\nComputes METEOR score of translated segments against one or more references.\nArgs:\n    predictions: list of predictions to score. Each prediction\n        should be a string with tokens separated by spaces.\n    references: list of reference for each prediction. Each\n        reference should be a string with tokens separated by spaces.\n    alpha: Parameter for controlling relative weights of precision and recall. default: 0.9\n    beta: Parameter for controlling shape of penalty as a function of fragmentation. default: 3\n    gamma: Relative weight assigned to fragmentation penalty. default: 0.5\nReturns:\n    'meteor': meteor score.\nExamples:\n\n    >>> meteor = datasets.load_metric('meteor')\n    >>> predictions = [\"It is a guide to action which ensures that the military always obeys the commands of the party\"]\n    >>> references = [\"It is a guide to action that ensures that the military will forever heed Party commands\"]\n    >>> results = meteor.compute(predictions=predictions, references=references)\n    >>> print(round(results[\"meteor\"], 4))\n    0.6944\n"




@datasets.utils.file_utils.add_start_docstrings(_DESCRIPTION	,			_KWARGS_DESCRIPTION   )
class      UpperCamelCase (     datasets.Metric   ):

    def UpperCamelCase			(			self :      str    ):

     """simple docstring"""






     return datasets.MetricInfo(
         description=_DESCRIPTION							,    citation=_CITATION							,    inputs_description=_KWARGS_DESCRIPTION							,    features=datasets.Features(
             {
                 'predictions': datasets.Value('string'							,    id='sequence'    ),
                 'references': datasets.Value('string'							,    id='sequence'    ),
             }    )							,    codebase_urls=['https://github.com/nltk/nltk/blob/develop/nltk/translate/meteor_score.py']							,    reference_urls=[
             'https://www.nltk.org/api/nltk.translate.html#module-nltk.translate.meteor_score',
             'https://en.wikipedia.org/wiki/METEOR',
         ]							,    )

    def UpperCamelCase			(			self :      Dict							,    snake_case__ :      int    ):

     """simple docstring"""






     import nltk

     nltk.download('wordnet'    )
     if NLTK_VERSION >= version.Version('3.6.5'    ):
      nltk.download('punkt'    )
     if NLTK_VERSION >= version.Version('3.6.6'    ):
      nltk.download('omw-1.4'    )




    def UpperCamelCase			(			self :      Union[str, Any]							,    snake_case__ :      str							,    snake_case__ :      List[Any]							,    snake_case__ :      List[Any]=0.9							,    snake_case__ :      Optional[Any]=3							,    snake_case__ :      Any=0.5    ):

     """simple docstring"""






     if NLTK_VERSION >= version.Version('3.6.5'    ):
      SCREAMING_SNAKE_CASE								=			[
          meteor_score.single_meteor_score(
              word_tokenize(snake_case__    )							,    word_tokenize(snake_case__    )							,    alpha=snake_case__							,    beta=snake_case__							,    gamma=snake_case__    )
          for ref, pred in zip(snake_case__							,    snake_case__    )
      ]
     else:
      SCREAMING_SNAKE_CASE								=			[
          meteor_score.single_meteor_score(snake_case__							,    snake_case__							,    alpha=snake_case__							,    beta=snake_case__							,    gamma=snake_case__    )
          for ref, pred in zip(snake_case__							,    snake_case__    )
      ]

     return {"meteor": np.mean(snake_case__    )}

