





"""simple docstring"""






from sklearn.metrics import matthews_corrcoef

import datasets


__UpperCAmelCase						=			'''
Compute the Matthews correlation coefficient (MCC)

The Matthews correlation coefficient is used in machine learning as a
measure of the quality of binary and multiclass classifications. It takes
into account true and false positives and negatives and is generally
regarded as a balanced measure which can be used even if the classes are of
very different sizes. The MCC is in essence a correlation coefficient value
between -1 and +1. A coefficient of +1 represents a perfect prediction, 0
an average random prediction and -1 an inverse prediction.  The statistic
is also known as the phi coefficient. [source: Wikipedia]
'''

__UpperCAmelCase						=			'''
Args:
    predictions (list of int): Predicted labels, as returned by a model.
    references (list of int): Ground truth labels.
    sample_weight (list of int, float, or bool): Sample weights. Defaults to `None`.
Returns:
    matthews_correlation (dict containing float): Matthews correlation.
Examples:
    Example 1, a basic example with only predictions and references as inputs:
        >>> matthews_metric = datasets.load_metric("matthews_correlation")
        >>> results = matthews_metric.compute(references=[1, 3, 2, 0, 3, 2],
        ...                                     predictions=[1, 2, 2, 0, 3, 3])
        >>> print(round(results[\'matthews_correlation\'], 2))
        0.54

    Example 2, the same example as above, but also including sample weights:
        >>> matthews_metric = datasets.load_metric("matthews_correlation")
        >>> results = matthews_metric.compute(references=[1, 3, 2, 0, 3, 2],
        ...                                     predictions=[1, 2, 2, 0, 3, 3],
        ...                                     sample_weight=[0.5, 3, 1, 1, 1, 2])
        >>> print(round(results[\'matthews_correlation\'], 2))
        0.1

    Example 3, the same example as above, but with sample weights that cause a negative correlation:
        >>> matthews_metric = datasets.load_metric("matthews_correlation")
        >>> results = matthews_metric.compute(references=[1, 3, 2, 0, 3, 2],
        ...                                     predictions=[1, 2, 2, 0, 3, 3],
        ...                                     sample_weight=[0.5, 1, 0, 0, 0, 1])
        >>> print(round(results[\'matthews_correlation\'], 2))
        -0.25
'''

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



@datasets.utils.file_utils.add_start_docstrings(_DESCRIPTION						,  _KWARGS_DESCRIPTION  )
class 					__UpperCAmelCase							(						datasets.Metric  ):
				def       UpperCAmelCase      (		self    :			Optional[int]    )	->	str:



							'''simple docstring'''



							return datasets.MetricInfo(
							    description=_DESCRIPTION	, citation=_CITATION	, inputs_description=_KWARGS_DESCRIPTION	, features=datasets.Features(
							        {
							            "predictions": datasets.Value("int32"    ),
							            "references": datasets.Value("int32"    ),
							        }    )	, reference_urls=[
							        "https://scikit-learn.org/stable/modules/generated/sklearn.metrics.matthews_corrcoef.html"
							    ]	, )






				def       UpperCAmelCase      (		self    :			Tuple	, a_    :			Optional[Any]	, a_    :			Optional[Any]	, a_    :			Any=None    )	->	Union[str, Any]:



							'''simple docstring'''



							return {
							    "matthews_correlation": float(matthews_corrcoef(a_	, a_	, sample_weight=a_    )    ),
							}






"""simple docstring"""






import tempfile
import unittest

import numpy as np

from diffusers import (
    DDIMScheduler,
    DPMSolverMultistepScheduler,
    EulerAncestralDiscreteScheduler,
    EulerDiscreteScheduler,
    LMSDiscreteScheduler,
    OnnxStableDiffusionPipeline,
    PNDMScheduler,
)
from diffusers.utils.testing_utils import is_onnx_available, nightly, require_onnxruntime, require_torch_gpu

from ..test_pipelines_onnx_common import OnnxPipelineTesterMixin


if is_onnx_available():
		import onnxruntime as ort



class 					__UpperCAmelCase							(						_UpperCamelCase						,  unittest.TestCase  ):
				__lowerCamelCase				:	List[Any]				     =				"hf-internal-testing/tiny-random-OnnxStableDiffusionPipeline"
				def       UpperCAmelCase      (		self    :			str	, a_    :			Optional[Any]=0    )	->	Union[str, Any]:



							'''simple docstring'''



							a__  :	Union[str, Any]		 =			np.random.RandomState(a_    )
							a__  :	List[Any]		 =			{
							    "prompt": "A painting of a squirrel eating a burger",
							    "generator": generator,
							    "num_inference_steps": 2,
							    "guidance_scale": 7.5,
							    "output_type": "numpy",
							}
							return inputs
				def       UpperCAmelCase      (		self    :			Dict    )	->	Optional[Any]:



							'''simple docstring'''



							a__  :	Tuple		 =			OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint	, provider="CPUExecutionProvider"    )
							pipe.set_progress_bar_config(disable=a_    )

							a__  :	Optional[int]		 =			self.get_dummy_inputs()
							a__  :	Union[str, Any]		 =			pipe(**a_    ).images
							a__  :	Tuple		 =			image[0, -3:, -3:, -1]

							assert image.shape == (1, 1_28, 1_28, 3)
							a__  :	List[str]		 =			np.array([0.6_5072, 0.5_8492, 0.4_8219, 0.5_5521, 0.5_3180, 0.5_5939, 0.5_0697, 0.3_9800, 0.4_6455]    )

							assert np.abs(image_slice.flatten() - expected_slice    ).max() < 1E-2
				def       UpperCAmelCase      (		self    :			Tuple    )	->	Union[str, Any]:



							'''simple docstring'''



							a__  :	Dict		 =			OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint	, provider="CPUExecutionProvider"    )
							a__  :	List[str]		 =			PNDMScheduler.from_config(pipe.scheduler.config	, skip_prk_steps=a_    )
							pipe.set_progress_bar_config(disable=a_    )

							a__  :	Optional[int]		 =			self.get_dummy_inputs()
							a__  :	List[Any]		 =			pipe(**a_    ).images
							a__  :	Union[str, Any]		 =			image[0, -3:, -3:, -1]

							assert image.shape == (1, 1_28, 1_28, 3)
							a__  :	List[str]		 =			np.array([0.6_5863, 0.5_9425, 0.4_9326, 0.5_6313, 0.5_3875, 0.5_6627, 0.5_1065, 0.3_9777, 0.4_6330]    )

							assert np.abs(image_slice.flatten() - expected_slice    ).max() < 1E-2
				def       UpperCAmelCase      (		self    :			Tuple    )	->	Tuple:



							'''simple docstring'''



							a__  :	Dict		 =			OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint	, provider="CPUExecutionProvider"    )
							a__  :	Tuple		 =			LMSDiscreteScheduler.from_config(pipe.scheduler.config    )
							pipe.set_progress_bar_config(disable=a_    )

							a__  :	List[Any]		 =			self.get_dummy_inputs()
							a__  :	Optional[Any]		 =			pipe(**a_    ).images
							a__  :	int		 =			image[0, -3:, -3:, -1]

							assert image.shape == (1, 1_28, 1_28, 3)
							a__  :	Dict		 =			np.array([0.5_3755, 0.6_0786, 0.4_7402, 0.4_9488, 0.5_1869, 0.4_9819, 0.4_7985, 0.3_8957, 0.4_4279]    )

							assert np.abs(image_slice.flatten() - expected_slice    ).max() < 1E-2
				def       UpperCAmelCase      (		self    :			Optional[Any]    )	->	Dict:



							'''simple docstring'''



							a__  :	Union[str, Any]		 =			OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint	, provider="CPUExecutionProvider"    )
							a__  :	Dict		 =			EulerDiscreteScheduler.from_config(pipe.scheduler.config    )
							pipe.set_progress_bar_config(disable=a_    )

							a__  :	Optional[int]		 =			self.get_dummy_inputs()
							a__  :	int		 =			pipe(**a_    ).images
							a__  :	Tuple		 =			image[0, -3:, -3:, -1]

							assert image.shape == (1, 1_28, 1_28, 3)
							a__  :	str		 =			np.array([0.5_3755, 0.6_0786, 0.4_7402, 0.4_9488, 0.5_1869, 0.4_9819, 0.4_7985, 0.3_8957, 0.4_4279]    )

							assert np.abs(image_slice.flatten() - expected_slice    ).max() < 1E-2
				def       UpperCAmelCase      (		self    :			Union[str, Any]    )	->	str:



							'''simple docstring'''



							a__  :	str		 =			OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint	, provider="CPUExecutionProvider"    )
							a__  :	Dict		 =			EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config    )
							pipe.set_progress_bar_config(disable=a_    )

							a__  :	Any		 =			self.get_dummy_inputs()
							a__  :	List[str]		 =			pipe(**a_    ).images
							a__  :	Union[str, Any]		 =			image[0, -3:, -3:, -1]

							assert image.shape == (1, 1_28, 1_28, 3)
							a__  :	Any		 =			np.array([0.5_3817, 0.6_0812, 0.4_7384, 0.4_9530, 0.5_1894, 0.4_9814, 0.4_7984, 0.3_8958, 0.4_4271]    )

							assert np.abs(image_slice.flatten() - expected_slice    ).max() < 1E-2
				def       UpperCAmelCase      (		self    :			Tuple    )	->	Any:



							'''simple docstring'''



							a__  :	str		 =			OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint	, provider="CPUExecutionProvider"    )
							a__  :	str		 =			DPMSolverMultistepScheduler.from_config(pipe.scheduler.config    )
							pipe.set_progress_bar_config(disable=a_    )

							a__  :	Tuple		 =			self.get_dummy_inputs()
							a__  :	List[str]		 =			pipe(**a_    ).images
							a__  :	Any		 =			image[0, -3:, -3:, -1]

							assert image.shape == (1, 1_28, 1_28, 3)
							a__  :	Any		 =			np.array([0.5_3895, 0.6_0808, 0.4_7933, 0.4_9608, 0.5_1886, 0.4_9950, 0.4_8053, 0.3_8957, 0.4_4200]    )

							assert np.abs(image_slice.flatten() - expected_slice    ).max() < 1E-2
				def       UpperCAmelCase      (		self    :			str    )	->	Tuple:



							'''simple docstring'''



							a__  :	Dict		 =			OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint	, provider="CPUExecutionProvider"    )
							pipe.set_progress_bar_config(disable=a_    )

							a__  :	Any		 =			self.get_dummy_inputs()
							a__  :	Any		 =			3 * [inputs["prompt"]]

							# forward
							a__  :	Union[str, Any]		 =			pipe(**a_    )
							a__  :	int		 =			output.images[0, -3:, -3:, -1]

							a__  :	Union[str, Any]		 =			self.get_dummy_inputs()
							a__  :	List[Any]		 =			3 * [inputs.pop("prompt"    )]

							a__  :	Optional[Any]		 =			pipe.tokenizer(
							    a_	, padding="max_length"	, max_length=pipe.tokenizer.model_max_length	, truncation=a_	, return_tensors="np"	, )
							a__  :	List[str]		 =			text_inputs["input_ids"]

							a__  :	int		 =			pipe.text_encoder(input_ids=text_inputs.astype(np.intaa    )    )[0]

							a__  :	List[Any]		 =			prompt_embeds

							# forward
							a__  :	List[Any]		 =			pipe(**a_    )
							a__  :	List[str]		 =			output.images[0, -3:, -3:, -1]

							assert np.abs(image_slice_a.flatten() - image_slice_a.flatten()    ).max() < 1E-4






				def       UpperCAmelCase      (		self    :			Dict    )	->	Optional[int]:



							'''simple docstring'''



							a__  :	Tuple		 =			OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint	, provider="CPUExecutionProvider"    )
							pipe.set_progress_bar_config(disable=a_    )

							a__  :	Tuple		 =			self.get_dummy_inputs()
							a__  :	Dict		 =			3 * ["this is a negative prompt"]
							a__  :	Optional[Any]		 =			negative_prompt
							a__  :	Any		 =			3 * [inputs["prompt"]]

							# forward
							a__  :	str		 =			pipe(**a_    )
							a__  :	List[str]		 =			output.images[0, -3:, -3:, -1]

							a__  :	Union[str, Any]		 =			self.get_dummy_inputs()
							a__  :	Union[str, Any]		 =			3 * [inputs.pop("prompt"    )]

							a__  :	List[Any]		 =			[]
							for p in [prompt, negative_prompt]:
										a__  :	int		 =			pipe.tokenizer(
										    a_	, padding="max_length"	, max_length=pipe.tokenizer.model_max_length	, truncation=a_	, return_tensors="np"	, )
										a__  :	Any		 =			text_inputs["input_ids"]

										embeds.append(pipe.text_encoder(input_ids=text_inputs.astype(np.intaa    )    )[0]    )

							a__ ,	a__  :	Union[str, Any]		 =			embeds

							# forward
							a__  :	Dict		 =			pipe(**a_    )
							a__  :	Any		 =			output.images[0, -3:, -3:, -1]

							assert np.abs(image_slice_a.flatten() - image_slice_a.flatten()    ).max() < 1E-4



@nightly
@require_onnxruntime
@require_torch_gpu
class 					__UpperCAmelCase							(						unittest.TestCase  ):
				@property
				def       UpperCAmelCase      (		self    :			Optional[Any]    )	->	Optional[int]:



							'''simple docstring'''



							return (
							    "CUDAExecutionProvider",
							    {
							        "gpu_mem_limit": "15000000000",  # 15GB
							        "arena_extend_strategy": "kSameAsRequested",
							    },
							)
				@property
				def       UpperCAmelCase      (		self    :			Optional[int]    )	->	Tuple:



							'''simple docstring'''



							a__  :	List[str]		 =			ort.SessionOptions()
							a__  :	List[str]		 =			False
							return options
				def       UpperCAmelCase      (		self    :			Optional[int]    )	->	List[Any]:



							'''simple docstring'''



							a__  :	Dict		 =			OnnxStableDiffusionPipeline.from_pretrained(
							    "CompVis/stable-diffusion-v1-4"	, revision="onnx"	, safety_checker=a_	, feature_extractor=a_	, provider=self.gpu_provider	, sess_options=self.gpu_options	, )
							sd_pipe.set_progress_bar_config(disable=a_    )

							a__  :	Optional[int]		 =			"A painting of a squirrel eating a burger"
							np.random.seed(0    )
							a__  :	Dict		 =			sd_pipe([prompt]	, guidance_scale=6.0	, num_inference_steps=10	, output_type="np"    )
							a__  :	Any		 =			output.images

							a__  :	Optional[int]		 =			image[0, -3:, -3:, -1]

							assert image.shape == (1, 5_12, 5_12, 3)
							a__  :	str		 =			np.array([0.0452, 0.0390, 0.0087, 0.0350, 0.0617, 0.0364, 0.0544, 0.0523, 0.0720]    )

							assert np.abs(image_slice.flatten() - expected_slice    ).max() < 1E-3
				def       UpperCAmelCase      (		self    :			Union[str, Any]    )	->	Union[str, Any]:



							'''simple docstring'''



							a__  :	Any		 =			DDIMScheduler.from_pretrained(
							    "runwayml/stable-diffusion-v1-5"	, subfolder="scheduler"	, revision="onnx"    )
							a__  :	str		 =			OnnxStableDiffusionPipeline.from_pretrained(
							    "runwayml/stable-diffusion-v1-5"	, revision="onnx"	, scheduler=a_	, safety_checker=a_	, feature_extractor=a_	, provider=self.gpu_provider	, sess_options=self.gpu_options	, )
							sd_pipe.set_progress_bar_config(disable=a_    )

							a__  :	str		 =			"open neural network exchange"
							a__  :	Tuple		 =			np.random.RandomState(0    )
							a__  :	Dict		 =			sd_pipe([prompt]	, guidance_scale=7.5	, num_inference_steps=10	, generator=a_	, output_type="np"    )
							a__  :	Dict		 =			output.images
							a__  :	Union[str, Any]		 =			image[0, -3:, -3:, -1]

							assert image.shape == (1, 5_12, 5_12, 3)
							a__  :	Dict		 =			np.array([0.2867, 0.1974, 0.1481, 0.7294, 0.7251, 0.6667, 0.4194, 0.5642, 0.6486]    )

							assert np.abs(image_slice.flatten() - expected_slice    ).max() < 1E-3
				def       UpperCAmelCase      (		self    :			Optional[int]    )	->	Dict:



							'''simple docstring'''



							a__  :	List[Any]		 =			LMSDiscreteScheduler.from_pretrained(
							    "runwayml/stable-diffusion-v1-5"	, subfolder="scheduler"	, revision="onnx"    )
							a__  :	List[Any]		 =			OnnxStableDiffusionPipeline.from_pretrained(
							    "runwayml/stable-diffusion-v1-5"	, revision="onnx"	, scheduler=a_	, safety_checker=a_	, feature_extractor=a_	, provider=self.gpu_provider	, sess_options=self.gpu_options	, )
							sd_pipe.set_progress_bar_config(disable=a_    )

							a__  :	Any		 =			"open neural network exchange"
							a__  :	Optional[Any]		 =			np.random.RandomState(0    )
							a__  :	Optional[int]		 =			sd_pipe([prompt]	, guidance_scale=7.5	, num_inference_steps=10	, generator=a_	, output_type="np"    )
							a__  :	int		 =			output.images
							a__  :	Tuple		 =			image[0, -3:, -3:, -1]

							assert image.shape == (1, 5_12, 5_12, 3)
							a__  :	Dict		 =			np.array([0.2306, 0.1959, 0.1593, 0.6549, 0.6394, 0.5408, 0.5065, 0.6010, 0.6161]    )

							assert np.abs(image_slice.flatten() - expected_slice    ).max() < 1E-3
				def       UpperCAmelCase      (		self    :			int    )	->	Optional[Any]:



							'''simple docstring'''



							a__  :	List[str]		 =			0

							def test_callback_fn(a_    :			int	, a_    :			int	, a_    :			np.ndarray    ) -> None:
										a__  :	Optional[int]		 =			True
										nonlocal number_of_steps
										number_of_steps += 1
										if step == 0:
													assert latents.shape == (1, 4, 64, 64)
													a__  :	Any		 =			latents[0, -3:, -3:, -1]
													a__  :	Union[str, Any]		 =			np.array(
													    [-0.6772, -0.3835, -1.2456, 0.1905, -1.0974, 0.6967, -1.9353, 0.0178, 1.0167]    )

													assert np.abs(latents_slice.flatten() - expected_slice    ).max() < 1E-3
										elif step == 5:
													assert latents.shape == (1, 4, 64, 64)
													a__  :	Union[str, Any]		 =			latents[0, -3:, -3:, -1]
													a__  :	Optional[int]		 =			np.array(
													    [-0.3351, 0.2241, -0.1837, -0.2325, -0.6577, 0.3393, -0.0241, 0.5899, 1.3875]    )

													assert np.abs(latents_slice.flatten() - expected_slice    ).max() < 1E-3

							a__  :	Tuple		 =			False

							a__  :	Optional[int]		 =			OnnxStableDiffusionPipeline.from_pretrained(
							    "runwayml/stable-diffusion-v1-5"	, revision="onnx"	, safety_checker=a_	, feature_extractor=a_	, provider=self.gpu_provider	, sess_options=self.gpu_options	, )
							pipe.set_progress_bar_config(disable=a_    )

							a__  :	List[Any]		 =			"Andromeda galaxy in a bottle"

							a__  :	str		 =			np.random.RandomState(0    )
							pipe(
							    prompt=a_	, num_inference_steps=5	, guidance_scale=7.5	, generator=a_	, callback=a_	, callback_steps=1	, )
							assert test_callback_fn.has_been_called
							assert number_of_steps == 6






				def       UpperCAmelCase      (		self    :			Tuple    )	->	List[str]:



							'''simple docstring'''



							a__  :	Optional[Any]		 =			OnnxStableDiffusionPipeline.from_pretrained(
							    "runwayml/stable-diffusion-v1-5"	, revision="onnx"	, safety_checker=a_	, feature_extractor=a_	, provider=self.gpu_provider	, sess_options=self.gpu_options	, )
							assert isinstance(a_	, a_    )
							assert pipe.safety_checker is None

							a__  :	Tuple		 =			pipe("example prompt"	, num_inference_steps=2    ).images[0]
							assert image is not None

							# check that there's no error when saving a pipeline with one of the models being None
							with tempfile.TemporaryDirectory() as tmpdirname:
										pipe.save_pretrained(a_    )
										a__  :	Optional[int]		 =			OnnxStableDiffusionPipeline.from_pretrained(a_    )

							# sanity check that the pipeline still works
							assert pipe.safety_checker is None
							a__  :	Dict		 =			pipe("example prompt"	, num_inference_steps=2    ).images[0]
							assert image is not None