

'''simple docstring'''
from typing import Any, Dict, List, Union

from ..utils import add_end_docstrings, is_torch_available, is_vision_available, logging, requires_backends
from .base import PIPELINE_INIT_ARGS, ChunkPipeline


if is_vision_available():
       from PIL import Image

       from ..image_utils import load_image

if is_torch_available():
       import torch

       from transformers.modeling_outputs import BaseModelOutput

       from ..models.auto.modeling_auto import MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING

_snake_case         =  logging.get_logger(__name__)


@add_end_docstrings(lowerCAmelCase_  )
class        a__  (							lowerCAmelCase_  ):


   def __init__(			self      ,    **_UpperCamelCase  ):





      """simple docstring"""





      super().__init__(**__lowerCAmelCase  )

      if self.framework == "tf":
         raise ValueError(f'''The {self.__class__} is only available in PyTorch.'''  )

      requires_backends(self      ,    "vision"  )
      self.check_model_type(__lowerCAmelCase  )


   def __call__(			self      ,    _UpperCamelCase      ,    _UpperCamelCase = None      ,    **_UpperCamelCase      ,    ):





      """simple docstring"""





      if "text_queries" in kwargs:
         _lowercase      :				str      					=       kwargs.pop("text_queries"  )

      if isinstance(__lowerCAmelCase      ,    (str, Image.Image)  ):
         _lowercase      :				int      					=       {"image": image, "candidate_labels": candidate_labels}
      else:
         _lowercase      :				List[str]      					=       image
      _lowercase      :				List[Any]      					=       super().__call__(__lowerCAmelCase      ,    **__lowerCAmelCase  )
      return results


   def 						_lowerCamelCase       (			self      ,    **_UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				Union[str, Any]      					=       {}
      if "threshold" in kwargs:
         _lowercase      :				str      					=       kwargs["threshold"]
      if "top_k" in kwargs:
         _lowercase      :				Dict      					=       kwargs["top_k"]
      return {}, {}, postprocess_params


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				Optional[Any]      					=       load_image(inputs["image"]  )
      _lowercase      :				Any      					=       inputs["candidate_labels"]
      if isinstance(__lowerCAmelCase      ,    __lowerCAmelCase  ):
         _lowercase      :				Optional[int]      					=       candidate_labels.split(","  )

      _lowercase      :				List[str]      					=       torch.tensor([[image.height, image.width]]      ,    dtype=torch.intaa  )
      for i, candidate_label in enumerate(__lowerCAmelCase  ):
         _lowercase      :				List[Any]      					=       self.tokenizer(__lowerCAmelCase      ,    return_tensors=self.framework  )
         _lowercase      :				Dict      					=       self.image_processor(__lowerCAmelCase      ,    return_tensors=self.framework  )
         yield {
             "is_last": i == len(__lowerCAmelCase  ) - 1,
             "target_size": target_size,
             "candidate_label": candidate_label,
             **text_inputs,
             **image_features,
         }


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				List[str]      					=       model_inputs.pop("target_size"  )
      _lowercase      :				Any      					=       model_inputs.pop("candidate_label"  )
      _lowercase      :				Dict      					=       model_inputs.pop("is_last"  )

      _lowercase      :				Union[str, Any]      					=       self.model(**__lowerCAmelCase  )

      _lowercase      :				Optional[int]      					=       {"target_size": target_size, "candidate_label": candidate_label, "is_last": is_last, **outputs}
      return model_outputs


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase=0.1      ,    _UpperCamelCase=None  ):





      """simple docstring"""





      _lowercase      :				Any      					=       []
      for model_output in model_outputs:
         _lowercase      :				Tuple      					=       model_output["candidate_label"]
         _lowercase      :				Union[str, Any]      					=       BaseModelOutput(__lowerCAmelCase  )
         _lowercase      :				Dict      					=       self.image_processor.post_process_object_detection(
             outputs=__lowerCAmelCase      ,    threshold=__lowerCAmelCase      ,    target_sizes=model_output["target_size"]  )[0]

         for index in outputs["scores"].nonzero():
            _lowercase      :				Union[str, Any]      					=       outputs["scores"][index].item()
            _lowercase      :				Optional[int]      					=       self._get_bounding_box(outputs["boxes"][index][0]  )

            _lowercase      :				Tuple      					=       {"score": score, "label": label, "box": box}
            results.append(__lowerCAmelCase  )

      _lowercase      :				Dict      					=       sorted(__lowerCAmelCase      ,    key=lambda _UpperCamelCase  : x["score"]      ,    reverse=__lowerCAmelCase  )
      if top_k:
         _lowercase      :				int      					=       results[:top_k]

      return results






   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      if self.framework != "pt":
         raise ValueError("The ZeroShotObjectDetectionPipeline is only available in PyTorch."  )
      _lowercase					,				_lowercase					,				_lowercase					,				_lowercase      :				List[Any]      					=       box.int().tolist()
      _lowercase      :				str      					=       {
          "xmin": xmin,
          "ymin": ymin,
          "xmax": xmax,
          "ymax": ymax,
      }
      return bbox









'''simple docstring'''
from sklearn.metrics import mean_squared_error

import datasets


_snake_case         =  '\\n@article{scikit-learn,\n title={Scikit-learn: Machine Learning in {P}ython},\n author={Pedregosa, F. and Varoquaux, G. and Gramfort, A. and Michel, V.\n         and Thirion, B. and Grisel, O. and Blondel, M. and Prettenhofer, P.\n         and Weiss, R. and Dubourg, V. and Vanderplas, J. and Passos, A. and\n         Cournapeau, D. and Brucher, M. and Perrot, M. and Duchesnay, E.},\n journal={Journal of Machine Learning Research},\n volume={12},\n pages={2825--2830},\n year={2011}\n}\n'

_snake_case         =  '\\nMean Squared Error(MSE) is the average of the square of difference between the predicted\nand actual values.\n'


_snake_case         =  '\nArgs:\n    predictions: array-like of shape (n_samples,) or (n_samples, n_outputs)\n        Estimated target values.\n    references: array-like of shape (n_samples,) or (n_samples, n_outputs)\n        Ground truth (correct) target values.\n    sample_weight: array-like of shape (n_samples,), default=None\n        Sample weights.\n    multioutput: {"raw_values", "uniform_average"} or array-like of shape (n_outputs,), default="uniform_average"\n        Defines aggregating of multiple output values. Array-like value defines weights used to average errors.\n\n        "raw_values" : Returns a full set of errors in case of multioutput input.\n\n        "uniform_average" : Errors of all outputs are averaged with uniform weight.\n\n    squared : bool, default=True\n        If True returns MSE value, if False returns RMSE (Root Mean Squared Error) value.\n\nReturns:\n    mse : mean squared error.\nExamples:\n\n    >>> mse_metric = datasets.load_metric("mse")\n    >>> predictions = [2.5, 0.0, 2, 8]\n    >>> references = [3, -0.5, 2, 7]\n    >>> results = mse_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {\'mse\': 0.375}\n    >>> rmse_result = mse_metric.compute(predictions=predictions, references=references, squared=False)\n    >>> print(rmse_result)\n    {\'mse\': 0.6123724356957945}\n\n    If you\'re using multi-dimensional lists, then set the config as follows :\n\n    >>> mse_metric = datasets.load_metric("mse", "multilist")\n    >>> predictions = [[0.5, 1], [-1, 1], [7, -6]]\n    >>> references = [[0, 2], [-1, 2], [8, -5]]\n    >>> results = mse_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {\'mse\': 0.7083333333333334}\n    >>> results = mse_metric.compute(predictions=predictions, references=references, multioutput=\'raw_values\')\n    >>> print(results) # doctest: +NORMALIZE_WHITESPACE\n    {\'mse\': array([0.41666667, 1. ])}\n'


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


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return datasets.MetricInfo(
          description=_DESCRIPTION      ,    citation=_CITATION      ,    inputs_description=_KWARGS_DESCRIPTION      ,    features=datasets.Features(self._get_feature_types()  )      ,    reference_urls=[
              "https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html"
          ]      ,    )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      if self.config_name == "multilist":
         return {
             "predictions": datasets.Sequence(datasets.Value("float"  )  ),
             "references": datasets.Sequence(datasets.Value("float"  )  ),
         }
      else:
         return {
             "predictions": datasets.Value("float"  ),
             "references": datasets.Value("float"  ),
         }






   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase      ,    _UpperCamelCase=None      ,    _UpperCamelCase="uniform_average"      ,    _UpperCamelCase=True  ):





      """simple docstring"""





      _lowercase      :				str      					=       mean_squared_error(
          _UpperCamelCase      ,    _UpperCamelCase      ,    sample_weight=_UpperCamelCase      ,    multioutput=_UpperCamelCase      ,    squared=_UpperCamelCase  )

      return {"mse": mse}






