






import re
import string

import numpy as np

import datasets


SCREAMING_SNAKE_CASE__   :      Dict				=		"""\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"""

SCREAMING_SNAKE_CASE__   :      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"""

SCREAMING_SNAKE_CASE__   :      Tuple				=		"""\n"""
@datasets.utils.file_utils.add_start_docstrings(_DESCRIPTION      ,					_KWARGS_DESCRIPTION			)
class     lowerCamelCase_					(   datasets.Metric			):







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







				def       A						(    self							,       __lowerCAmelCase							,       __lowerCAmelCase							,       __lowerCAmelCase=None							,       __lowerCAmelCase=False							,       __lowerCAmelCase=False							,       __lowerCAmelCase=False							,       ):
								"""simple docstring"""
								if regexes_to_ignore is not None:
												for s in regexes_to_ignore:
																__magic_name__		:str   =   np.array([re.sub(__lowerCAmelCase							,       ''''''							,       __lowerCAmelCase  ) for x in predictions]  )
																__magic_name__		:Optional[int]   =   np.array([re.sub(__lowerCAmelCase							,       ''''''							,       __lowerCAmelCase  ) for x in references]  )
								else:
												__magic_name__		:Union[str, Any]   =   np.asarray(__lowerCAmelCase  )
												__magic_name__		:Optional[int]   =   np.asarray(__lowerCAmelCase  )

								if ignore_case:
												__magic_name__		:Tuple   =   np.char.lower(__lowerCAmelCase  )
												__magic_name__		:Tuple   =   np.char.lower(__lowerCAmelCase  )

								if ignore_punctuation:
												__magic_name__		:Tuple   =   string.punctuation.maketrans(''''''							,       ''''''							,       string.punctuation  )
												__magic_name__		:List[Any]   =   np.char.translate(__lowerCAmelCase							,       table=__lowerCAmelCase  )
												__magic_name__		:List[Any]   =   np.char.translate(__lowerCAmelCase							,       table=__lowerCAmelCase  )

								if ignore_numbers:
												__magic_name__		:Any   =   string.digits.maketrans(''''''							,       ''''''							,       string.digits  )
												__magic_name__		:str   =   np.char.translate(__lowerCAmelCase							,       table=__lowerCAmelCase  )
												__magic_name__		:List[Any]   =   np.char.translate(__lowerCAmelCase							,       table=__lowerCAmelCase  )

								__magic_name__		:List[Any]   =   predictions == references

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













import gc
import tempfile
import unittest

import numpy as np
import torch

from diffusers import VersatileDiffusionTextToImagePipeline
from diffusers.utils.testing_utils import nightly, require_torch_gpu, torch_device


UpperCamelCase__           =			False

class 							__SCREAMING_SNAKE_CASE       (  unittest.TestCase							):
							pass






@nightly
@require_torch_gpu
class 							__SCREAMING_SNAKE_CASE       (  unittest.TestCase							):






							def 					_lowerCamelCase		(    self	):
														# clean up the VRAM after each test
														super().tearDown()
														gc.collect()
														torch.cuda.empty_cache()






							def 					_lowerCamelCase		(    self	):
														UpperCamelCase__					  =      VersatileDiffusionTextToImagePipeline.from_pretrained("""shi-labs/versatile-diffusion"""	)
														# remove text_unet
														pipe.remove_unused_weights()
														pipe.to(__lowerCAmelCase	)
														pipe.set_progress_bar_config(disable=__lowerCAmelCase	)

														UpperCamelCase__					  =      """A painting of a squirrel eating a burger """
														UpperCamelCase__					  =      torch.manual_seed(0	)
														UpperCamelCase__					  =      pipe(
														    prompt=__lowerCAmelCase	,			generator=__lowerCAmelCase	,			guidance_scale=7.5	,			num_inference_steps=2	,			output_type="""numpy"""	).images

														with tempfile.TemporaryDirectory() as tmpdirname:
																					pipe.save_pretrained(__lowerCAmelCase	)
																					UpperCamelCase__					  =      VersatileDiffusionTextToImagePipeline.from_pretrained(__lowerCAmelCase	)
														pipe.to(__lowerCAmelCase	)
														pipe.set_progress_bar_config(disable=__lowerCAmelCase	)

														UpperCamelCase__					  =      generator.manual_seed(0	)
														UpperCamelCase__					  =      pipe(
														    prompt=__lowerCAmelCase	,			generator=__lowerCAmelCase	,			guidance_scale=7.5	,			num_inference_steps=2	,			output_type="""numpy"""	).images

														assert np.abs(image - new_image	).sum() < 1E-5, "Models don't have the same forward pass"







							def 					_lowerCamelCase		(    self	):
														UpperCamelCase__					  =      VersatileDiffusionTextToImagePipeline.from_pretrained(
														    """shi-labs/versatile-diffusion"""	,			torch_dtype=torch.floataa	)
														pipe.to(__lowerCAmelCase	)
														pipe.set_progress_bar_config(disable=__lowerCAmelCase	)

														UpperCamelCase__					  =      """A painting of a squirrel eating a burger """
														UpperCamelCase__					  =      torch.manual_seed(0	)
														UpperCamelCase__					  =      pipe(
														    prompt=__lowerCAmelCase	,			generator=__lowerCAmelCase	,			guidance_scale=7.5	,			num_inference_steps=50	,			output_type="""numpy"""	).images

														UpperCamelCase__					  =      image[0, 253:256, 253:256, -1]

														assert image.shape == (1, 512, 512, 3)
														UpperCamelCase__					  =      np.array([0.3367, 0.3169, 0.2656, 0.3870, 0.4790, 0.3796, 0.4009, 0.4878, 0.4778]	)

														assert np.abs(image_slice.flatten() - expected_slice	).max() < 1E-2




