






"""simple docstring"""



import re
import string

import numpy as np

import datasets


_UpperCamelCase		:  int						=		'\nReturns the rate at which the input predicted strings exactly match their references, ignoring any strings input as part of the regexes_to_ignore list.\n'

_UpperCamelCase		:  List[Any]						=		'\nArgs:\n    predictions: List of predicted texts.\n    references: List of reference texts.\n    regexes_to_ignore: List, defaults to None. Regex expressions of characters to\n        ignore when calculating the exact matches. Note: these regexes are removed\n        from the input data before the changes based on the options below (e.g. ignore_case,\n        ignore_punctuation, ignore_numbers) are applied.\n    ignore_case: Boolean, defaults to False. If true, turns everything\n        to lowercase so that capitalization differences are ignored.\n    ignore_punctuation: Boolean, defaults to False. If true, removes all punctuation before\n        comparing predictions and references.\n    ignore_numbers: Boolean, defaults to False. If true, removes all punctuation before\n        comparing predictions and references.\nReturns:\n    exact_match: Dictionary containing exact_match rate. Possible values are between 0.0 and 100.0, inclusive.\nExamples:\n    >>> exact_match = datasets.load_metric("exact_match")\n    >>> refs = ["the cat", "theater", "YELLING", "agent007"]\n    >>> preds = ["cat?", "theater", "yelling", "agent"]\n    >>> results = exact_match.compute(references=refs, predictions=preds)\n    >>> print(round(results["exact_match"], 1))\n    25.0\n\n    >>> exact_match = datasets.load_metric("exact_match")\n    >>> refs = ["the cat", "theater", "YELLING", "agent007"]\n    >>> preds = ["cat?", "theater", "yelling", "agent"]\n    >>> results = exact_match.compute(references=refs, predictions=preds, regexes_to_ignore=["the ", "yell"], ignore_case=True, ignore_punctuation=True)\n    >>> print(round(results["exact_match"], 1))\n    50.0\n\n\n    >>> exact_match = datasets.load_metric("exact_match")\n    >>> refs = ["the cat", "theater", "YELLING", "agent007"]\n    >>> preds = ["cat?", "theater", "yelling", "agent"]\n    >>> results = exact_match.compute(references=refs, predictions=preds, regexes_to_ignore=["the ", "yell", "YELL"], ignore_case=True, ignore_punctuation=True)\n    >>> print(round(results["exact_match"], 1))\n    75.0\n\n    >>> exact_match = datasets.load_metric("exact_match")\n    >>> refs = ["the cat", "theater", "YELLING", "agent007"]\n    >>> preds = ["cat?", "theater", "yelling", "agent"]\n    >>> results = exact_match.compute(references=refs, predictions=preds, regexes_to_ignore=["the ", "yell", "YELL"], ignore_case=True, ignore_punctuation=True, ignore_numbers=True)\n    >>> print(round(results["exact_match"], 1))\n    100.0\n\n    >>> exact_match = datasets.load_metric("exact_match")\n    >>> refs = ["The cat sat on the mat.", "Theaters are great.", "It\'s like comparing oranges and apples."]\n    >>> preds = ["The cat sat on the mat?", "Theaters are great.", "It\'s like comparing apples and oranges."]\n    >>> results = exact_match.compute(references=refs, predictions=preds)\n    >>> print(round(results["exact_match"], 1))\n    33.3\n\n'

_UpperCamelCase		:  str						=		'\n'

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







    def 			UpperCamelCase_      (			self       ):
      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'       ),
              }       )							,		reference_urls=[]							,		)







    def 			UpperCamelCase_      (			self							,		_lowerCamelCase							,		_lowerCamelCase							,		_lowerCamelCase=None							,		_lowerCamelCase=False							,		_lowerCamelCase=False							,		_lowerCamelCase=False							,		):
      if regexes_to_ignore is not None:
        for s in regexes_to_ignore:
          lowercase							    =       np.array([re.sub(_lowerCamelCase							,		''							,		_lowerCamelCase       ) for x in predictions]       )
          lowercase							    =       np.array([re.sub(_lowerCamelCase							,		''							,		_lowerCamelCase       ) for x in references]       )
      else:
        lowercase							    =       np.asarray(_lowerCamelCase       )
        lowercase							    =       np.asarray(_lowerCamelCase       )

      if ignore_case:
        lowercase							    =       np.char.lower(_lowerCamelCase       )
        lowercase							    =       np.char.lower(_lowerCamelCase       )

      if ignore_punctuation:
        lowercase							    =       string.punctuation.maketrans(''							,		''							,		string.punctuation       )
        lowercase							    =       np.char.translate(_lowerCamelCase							,		table=_lowerCamelCase       )
        lowercase							    =       np.char.translate(_lowerCamelCase							,		table=_lowerCamelCase       )

      if ignore_numbers:
        lowercase							    =       string.digits.maketrans(''							,		''							,		string.digits       )
        lowercase							    =       np.char.translate(_lowerCamelCase							,		table=_lowerCamelCase       )
        lowercase							    =       np.char.translate(_lowerCamelCase							,		table=_lowerCamelCase       )

      lowercase							    =       predictions == references

      return {"exact_match": np.mean(_lowerCamelCase       ) * 1_0_0}










"""simple docstring"""



# limitations under the License.


from typing import Optional, Tuple, Union

import torch

from diffusers import DiffusionPipeline, ImagePipelineOutput

class        a     (   a_	):







    def __init__(			self							,		_lowerCamelCase							,		_lowerCamelCase       ):
      super().__init__()
      self.register_modules(unet=_lowerCamelCase							,		scheduler=_lowerCamelCase       )







    @torch.no_grad()
    def __call__(			self							,		_lowerCamelCase = 1							,		_lowerCamelCase = None							,		_lowerCamelCase = 5_0							,		_lowerCamelCase = "pil"							,		_lowerCamelCase = True							,		**_lowerCamelCase							,		):
      lowercase							    =       torch.randn(
          (batch_size, self.unet.config.in_channels, self.unet.config.sample_size, self.unet.config.sample_size)							,		generator=_lowerCamelCase							,		)
      lowercase							    =       image.to(self.device       )

      # set step values
      self.scheduler.set_timesteps(_lowerCamelCase       )

      for t in self.progress_bar(self.scheduler.timesteps       ):
        # 1. predict noise model_output
        lowercase							    =       self.unet(_lowerCamelCase							,		_lowerCamelCase       ).sample

        # 2. predict previous mean of image x_t-1 and add variance depending on eta
        # eta corresponds to η in paper and should be between [0, 1]
        # do x_t -> x_t-1
        lowercase							    =       self.scheduler.step(_lowerCamelCase							,		_lowerCamelCase							,		_lowerCamelCase       ).prev_sample

      lowercase							    =       (image / 2 + 0.5).clamp(0							,		1       )
      lowercase							    =       image.cpu().permute(0							,		2							,		3							,		1       ).numpy()
      if output_type == "pil":
        lowercase							    =       self.numpy_to_pil(_lowerCamelCase       )

      if not return_dict:
        return (image,), "This is a local test"

      return ImagePipelineOutput(images=_lowerCamelCase       ), "This is a local test"


