




import os
import shutil
import sys
import tempfile
import unittest
from pathlib import Path

import pytest

import transformers
from transformers import (
    BERT_PRETRAINED_CONFIG_ARCHIVE_MAP,
    GPT2_PRETRAINED_CONFIG_ARCHIVE_MAP,
    AutoTokenizer,
    BertConfig,
    BertTokenizer,
    BertTokenizerFast,
    CTRLTokenizer,
    GPTaTokenizer,
    GPTaTokenizerFast,
    PreTrainedTokenizerFast,
    RobertaTokenizer,
    RobertaTokenizerFast,
    is_tokenizers_available,
)
from transformers.models.auto.configuration_auto import CONFIG_MAPPING, AutoConfig
from transformers.models.auto.tokenization_auto import (
    TOKENIZER_MAPPING,
    get_tokenizer_config,
    tokenizer_class_from_name,
)
from transformers.models.roberta.configuration_roberta import RobertaConfig
from transformers.testing_utils import (
    DUMMY_DIFF_TOKENIZER_IDENTIFIER,
    DUMMY_UNKNOWN_IDENTIFIER,
    SMALL_MODEL_IDENTIFIER,
    RequestCounter,
    require_tokenizers,
    slow,
)


sys.path.append(str(Path(__file__).parent.parent.parent.parent / """utils"""))

from test_module.custom_configuration import CustomConfig  # noqa E402
from test_module.custom_tokenization import CustomTokenizer  # noqa E402


if is_tokenizers_available():
		from test_module.custom_tokenization_fast import CustomTokenizerFast


class 							__UpperCamelCase			( unittest.TestCase  ):





				'''simple docstring'''



				def       __snake_case		( self						):
											lowerCAmelCase   =		0



				@slow
				def       __snake_case		( self						):
											for model_name in (x for x in BERT_PRETRAINED_CONFIG_ARCHIVE_MAP.keys() if "japanese" not in x):
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_						)
																		self.assertIsNotNone(UpperCAmelCase_						)
																		self.assertIsInstance(UpperCAmelCase_       , (BertTokenizer, BertTokenizerFast)						)
																		self.assertGreater(len(UpperCAmelCase_						)       , 0						)

											for model_name in GPT2_PRETRAINED_CONFIG_ARCHIVE_MAP.keys():
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_						)
																		self.assertIsNotNone(UpperCAmelCase_						)
																		self.assertIsInstance(UpperCAmelCase_       , (GPTaTokenizer, GPTaTokenizerFast)						)
																		self.assertGreater(len(UpperCAmelCase_						)       , 0						)



				def       __snake_case		( self						):
											lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_						)
											self.assertIsInstance(UpperCAmelCase_       , (BertTokenizer, BertTokenizerFast)						)
											self.assertEqual(tokenizer.vocab_size       , 12						)



				def       __snake_case		( self						):
											lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_						)
											self.assertIsInstance(UpperCAmelCase_       , (RobertaTokenizer, RobertaTokenizerFast)						)
											self.assertEqual(tokenizer.vocab_size       , 20						)



				def       __snake_case		( self						):
											lowerCAmelCase   =		AutoConfig.from_pretrained(UpperCAmelCase_						)
											self.assertIsInstance(UpperCAmelCase_       , UpperCAmelCase_						)
											# Check that tokenizer_type ≠ model_type
											lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_       , config=UpperCAmelCase_						)
											self.assertIsInstance(UpperCAmelCase_       , (BertTokenizer, BertTokenizerFast)						)
											self.assertEqual(tokenizer.vocab_size       , 12						)



				def       __snake_case		( self						):
											with tempfile.TemporaryDirectory() as tmp_dir:
																		shutil.copy('''./tests/fixtures/vocab.txt'''       , os.path.join(UpperCAmelCase_       , '''vocab.txt'''						)						)

																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_       , tokenizer_type='''bert'''       , use_fast=UpperCAmelCase_						)
																		self.assertIsInstance(UpperCAmelCase_       , UpperCAmelCase_						)

											with tempfile.TemporaryDirectory() as tmp_dir:
																		shutil.copy('''./tests/fixtures/vocab.json'''       , os.path.join(UpperCAmelCase_       , '''vocab.json'''						)						)
																		shutil.copy('''./tests/fixtures/merges.txt'''       , os.path.join(UpperCAmelCase_       , '''merges.txt'''						)						)

																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_       , tokenizer_type='''gpt2'''       , use_fast=UpperCAmelCase_						)
																		self.assertIsInstance(UpperCAmelCase_       , UpperCAmelCase_						)



				@require_tokenizers
				def       __snake_case		( self						):
											with tempfile.TemporaryDirectory() as tmp_dir:
																		shutil.copy('''./tests/fixtures/vocab.txt'''       , os.path.join(UpperCAmelCase_       , '''vocab.txt'''						)						)

																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_       , tokenizer_type='''bert'''						)
																		self.assertIsInstance(UpperCAmelCase_       , UpperCAmelCase_						)

											with tempfile.TemporaryDirectory() as tmp_dir:
																		shutil.copy('''./tests/fixtures/vocab.json'''       , os.path.join(UpperCAmelCase_       , '''vocab.json'''						)						)
																		shutil.copy('''./tests/fixtures/merges.txt'''       , os.path.join(UpperCAmelCase_       , '''merges.txt'''						)						)

																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_       , tokenizer_type='''gpt2'''						)
																		self.assertIsInstance(UpperCAmelCase_       , UpperCAmelCase_						)



				def       __snake_case		( self						):
											with pytest.raises(UpperCAmelCase_						):
																		AutoTokenizer.from_pretrained('''./'''       , tokenizer_type='''xxx'''						)



				@require_tokenizers
				def       __snake_case		( self						):
											for tokenizer_class in [BertTokenizer, BertTokenizerFast, AutoTokenizer]:
																		lowerCAmelCase   =		tokenizer_class.from_pretrained('''wietsedv/bert-base-dutch-cased'''						)
																		self.assertIsInstance(UpperCAmelCase_       , (BertTokenizer, BertTokenizerFast)						)

																		if isinstance(UpperCAmelCase_       , UpperCAmelCase_						):
																									self.assertEqual(tokenizer.basic_tokenizer.do_lower_case       , UpperCAmelCase_						)
																		else:
																									self.assertEqual(tokenizer.do_lower_case       , UpperCAmelCase_						)

																		self.assertEqual(tokenizer.model_max_length       , 5_12						)



				@require_tokenizers
				def       __snake_case		( self						):
											for tokenizer_class in [BertTokenizer, BertTokenizerFast, AutoTokenizer]:
																		with self.assertRaisesRegex(
																		    UpperCAmelCase_       , '''julien-c/herlolip-not-exists is not a local folder and is not a valid model identifier'''       , ):
																									lowerCAmelCase   =		tokenizer_class.from_pretrained('''julien-c/herlolip-not-exists'''						)



				def       __snake_case		( self						):
											# tests: https://github.com/huggingface/transformers/pull/13251
											# 1. models with `-`, e.g. xlm-roberta -> xlm_roberta
											# 2. models that don't remap 1-1 from model-name to model file, e.g., openai-gpt -> openai
											lowerCAmelCase   =		TOKENIZER_MAPPING.values()
											lowerCAmelCase   =		[]

											for slow_tok, fast_tok in tokenizers:
																		if slow_tok is not None:
																									tokenizer_names.append(slow_tok.__name__						)

																		if fast_tok is not None:
																									tokenizer_names.append(fast_tok.__name__						)

											for tokenizer_name in tokenizer_names:
																		# must find the right class
																		tokenizer_class_from_name(UpperCAmelCase_						)



				@require_tokenizers
				def       __snake_case		( self						):
											self.assertIsInstance(AutoTokenizer.from_pretrained('''bert-base-cased'''       , use_fast=UpperCAmelCase_						)       , UpperCAmelCase_						)
											self.assertIsInstance(AutoTokenizer.from_pretrained('''bert-base-cased'''						)       , UpperCAmelCase_						)



				@require_tokenizers
				def       __snake_case		( self						):
											lowerCAmelCase   =		AutoTokenizer.from_pretrained('''distilbert-base-uncased'''       , do_lower_case=UpperCAmelCase_						)
											lowerCAmelCase   =		'''Hello, world. How are you?'''
											lowerCAmelCase   =		tokenizer.tokenize(UpperCAmelCase_						)
											self.assertEqual('''[UNK]'''       , tokens[0]						)

											lowerCAmelCase   =		AutoTokenizer.from_pretrained('''microsoft/mpnet-base'''       , do_lower_case=UpperCAmelCase_						)
											lowerCAmelCase   =		tokenizer.tokenize(UpperCAmelCase_						)
											self.assertEqual('''[UNK]'''       , tokens[0]						)



				@require_tokenizers
				def       __snake_case		( self						):
											lowerCAmelCase   =		AutoTokenizer.from_pretrained('''robot-test/dummy-tokenizer-fast-with-model-config'''						)
											self.assertEqual(type(UpperCAmelCase_						)       , UpperCAmelCase_						)
											self.assertEqual(tokenizer.model_max_length       , 5_12						)
											self.assertEqual(tokenizer.vocab_size       , 3_00_00						)
											self.assertEqual(tokenizer.unk_token       , '''[UNK]'''						)
											self.assertEqual(tokenizer.padding_side       , '''right'''						)
											self.assertEqual(tokenizer.truncation_side       , '''right'''						)



				def       __snake_case		( self						):
											lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_						)
											self.assertIsInstance(UpperCAmelCase_       , (BertTokenizer, BertTokenizerFast)						)
											with tempfile.TemporaryDirectory() as tmp_dir:
																		tokenizer.save_pretrained(UpperCAmelCase_						)
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_						)

											self.assertIsInstance(UpperCAmelCase_       , tokenizer.__class__						)
											self.assertEqual(tokenizera.vocab_size       , 12						)



				def       __snake_case		( self						):
											lowerCAmelCase   =		AutoTokenizer.from_pretrained('''ctrl'''						)
											# There is no fast CTRL so this always gives us a slow tokenizer.
											self.assertIsInstance(UpperCAmelCase_       , UpperCAmelCase_						)



				def       __snake_case		( self						):
											# Check we can load the tokenizer config of an online model.
											lowerCAmelCase   =		get_tokenizer_config('''bert-base-cased'''						)
											lowerCAmelCase   =		config.pop('''_commit_hash'''       , UpperCAmelCase_						)
											# If we ever update bert-base-cased tokenizer config, this dict here will need to be updated.
											self.assertEqual(UpperCAmelCase_       , {'''do_lower_case''': False}						)

											# This model does not have a tokenizer_config so we get back an empty dict.
											lowerCAmelCase   =		get_tokenizer_config(UpperCAmelCase_						)
											self.assertDictEqual(UpperCAmelCase_       , {}						)

											# A tokenizer saved with `save_pretrained` always creates a tokenizer config.
											lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_						)
											with tempfile.TemporaryDirectory() as tmp_dir:
																		tokenizer.save_pretrained(UpperCAmelCase_						)
																		lowerCAmelCase   =		get_tokenizer_config(UpperCAmelCase_						)

											# Check the class of the tokenizer was properly saved (note that it always saves the slow class).
											self.assertEqual(config['''tokenizer_class''']       , '''BertTokenizer'''						)



				def       __snake_case		( self						):
											try:
																		AutoConfig.register('''custom'''       , UpperCAmelCase_						)

																		AutoTokenizer.register(UpperCAmelCase_       , slow_tokenizer_class=UpperCAmelCase_						)
																		# Trying to register something existing in the Transformers library will raise an error
																		with self.assertRaises(UpperCAmelCase_						):
																									AutoTokenizer.register(UpperCAmelCase_       , slow_tokenizer_class=UpperCAmelCase_						)

																		lowerCAmelCase   =		CustomTokenizer.from_pretrained(UpperCAmelCase_						)
																		with tempfile.TemporaryDirectory() as tmp_dir:
																									tokenizer.save_pretrained(UpperCAmelCase_						)

																									lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_						)
																									self.assertIsInstance(UpperCAmelCase_       , UpperCAmelCase_						)

											finally:
																		if "custom" in CONFIG_MAPPING._extra_content:
																									del CONFIG_MAPPING._extra_content["custom"]
																		if CustomConfig in TOKENIZER_MAPPING._extra_content:
																									del TOKENIZER_MAPPING._extra_content[CustomConfig]



				@require_tokenizers
				def       __snake_case		( self						):
											try:
																		AutoConfig.register('''custom'''       , UpperCAmelCase_						)

																		# Can register in two steps
																		AutoTokenizer.register(UpperCAmelCase_       , slow_tokenizer_class=UpperCAmelCase_						)
																		self.assertEqual(TOKENIZER_MAPPING[CustomConfig]       , (CustomTokenizer, None)						)
																		AutoTokenizer.register(UpperCAmelCase_       , fast_tokenizer_class=UpperCAmelCase_						)
																		self.assertEqual(TOKENIZER_MAPPING[CustomConfig]       , (CustomTokenizer, CustomTokenizerFast)						)

																		del TOKENIZER_MAPPING._extra_content[CustomConfig]
																		# Can register in one step
																		AutoTokenizer.register(
																		    UpperCAmelCase_       , slow_tokenizer_class=UpperCAmelCase_       , fast_tokenizer_class=UpperCAmelCase_						)
																		self.assertEqual(TOKENIZER_MAPPING[CustomConfig]       , (CustomTokenizer, CustomTokenizerFast)						)

																		# Trying to register something existing in the Transformers library will raise an error
																		with self.assertRaises(UpperCAmelCase_						):
																									AutoTokenizer.register(UpperCAmelCase_       , fast_tokenizer_class=UpperCAmelCase_						)

																		# We pass through a bert tokenizer fast cause there is no converter slow to fast for our new toknizer
																		# and that model does not have a tokenizer.json
																		with tempfile.TemporaryDirectory() as tmp_dir:
																									lowerCAmelCase   =		BertTokenizerFast.from_pretrained(UpperCAmelCase_						)
																									bert_tokenizer.save_pretrained(UpperCAmelCase_						)
																									lowerCAmelCase   =		CustomTokenizerFast.from_pretrained(UpperCAmelCase_						)

																		with tempfile.TemporaryDirectory() as tmp_dir:
																									tokenizer.save_pretrained(UpperCAmelCase_						)

																									lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_						)
																									self.assertIsInstance(UpperCAmelCase_       , UpperCAmelCase_						)

																									lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_       , use_fast=UpperCAmelCase_						)
																									self.assertIsInstance(UpperCAmelCase_       , UpperCAmelCase_						)

											finally:
																		if "custom" in CONFIG_MAPPING._extra_content:
																									del CONFIG_MAPPING._extra_content["custom"]
																		if CustomConfig in TOKENIZER_MAPPING._extra_content:
																									del TOKENIZER_MAPPING._extra_content[CustomConfig]



				def       __snake_case		( self						):
											# If remote code is not set, we will time out when asking whether to load the model.
											with self.assertRaises(UpperCAmelCase_						):
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained('''hf-internal-testing/test_dynamic_tokenizer'''						)
											# If remote code is disabled, we can't load this config.
											with self.assertRaises(UpperCAmelCase_						):
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(
																		    '''hf-internal-testing/test_dynamic_tokenizer'''       , trust_remote_code=UpperCAmelCase_						)

											lowerCAmelCase   =		AutoTokenizer.from_pretrained('''hf-internal-testing/test_dynamic_tokenizer'''       , trust_remote_code=UpperCAmelCase_						)
											self.assertTrue(tokenizer.special_attribute_present						)
											# Test tokenizer can be reloaded.
											with tempfile.TemporaryDirectory() as tmp_dir:
																		tokenizer.save_pretrained(UpperCAmelCase_						)
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_       , trust_remote_code=UpperCAmelCase_						)
											self.assertTrue(reloaded_tokenizer.special_attribute_present						)

											if is_tokenizers_available():
																		self.assertEqual(tokenizer.__class__.__name__       , '''NewTokenizerFast'''						)
																		self.assertEqual(reloaded_tokenizer.__class__.__name__       , '''NewTokenizerFast'''						)

																		# Test we can also load the slow version
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(
																		    '''hf-internal-testing/test_dynamic_tokenizer'''       , trust_remote_code=UpperCAmelCase_       , use_fast=UpperCAmelCase_						)
																		self.assertTrue(tokenizer.special_attribute_present						)
																		self.assertEqual(tokenizer.__class__.__name__       , '''NewTokenizer'''						)
																		# Test tokenizer can be reloaded.
																		with tempfile.TemporaryDirectory() as tmp_dir:
																									tokenizer.save_pretrained(UpperCAmelCase_						)
																									lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_       , trust_remote_code=UpperCAmelCase_       , use_fast=UpperCAmelCase_						)
																		self.assertEqual(reloaded_tokenizer.__class__.__name__       , '''NewTokenizer'''						)
																		self.assertTrue(reloaded_tokenizer.special_attribute_present						)
											else:
																		self.assertEqual(tokenizer.__class__.__name__       , '''NewTokenizer'''						)
																		self.assertEqual(reloaded_tokenizer.__class__.__name__       , '''NewTokenizer'''						)



				@require_tokenizers
				def       __snake_case		( self						):


											class 							__UpperCamelCase			( __UpperCAmelCase  ):





															'''simple docstring'''



															__a							: Any										=False




											class 							__UpperCamelCase			( __UpperCAmelCase  ):





															'''simple docstring'''



															__a							: List[str]										=NewTokenizer
															__a							: List[Any]										=False

											try:
																		AutoConfig.register('''custom'''       , UpperCAmelCase_						)
																		AutoTokenizer.register(UpperCAmelCase_       , slow_tokenizer_class=UpperCAmelCase_						)
																		AutoTokenizer.register(UpperCAmelCase_       , fast_tokenizer_class=UpperCAmelCase_						)
																		# If remote code is not set, the default is to use local
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained('''hf-internal-testing/test_dynamic_tokenizer'''						)
																		self.assertEqual(tokenizer.__class__.__name__       , '''NewTokenizerFast'''						)
																		self.assertFalse(tokenizer.special_attribute_present						)
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained('''hf-internal-testing/test_dynamic_tokenizer'''       , use_fast=UpperCAmelCase_						)
																		self.assertEqual(tokenizer.__class__.__name__       , '''NewTokenizer'''						)
																		self.assertFalse(tokenizer.special_attribute_present						)

																		# If remote code is disabled, we load the local one.
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(
																		    '''hf-internal-testing/test_dynamic_tokenizer'''       , trust_remote_code=UpperCAmelCase_						)
																		self.assertEqual(tokenizer.__class__.__name__       , '''NewTokenizerFast'''						)
																		self.assertFalse(tokenizer.special_attribute_present						)
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(
																		    '''hf-internal-testing/test_dynamic_tokenizer'''       , trust_remote_code=UpperCAmelCase_       , use_fast=UpperCAmelCase_						)
																		self.assertEqual(tokenizer.__class__.__name__       , '''NewTokenizer'''						)
																		self.assertFalse(tokenizer.special_attribute_present						)

																		# If remote is enabled, we load from the Hub
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(
																		    '''hf-internal-testing/test_dynamic_tokenizer'''       , trust_remote_code=UpperCAmelCase_						)
																		self.assertEqual(tokenizer.__class__.__name__       , '''NewTokenizerFast'''						)
																		self.assertTrue(tokenizer.special_attribute_present						)
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(
																		    '''hf-internal-testing/test_dynamic_tokenizer'''       , trust_remote_code=UpperCAmelCase_       , use_fast=UpperCAmelCase_						)
																		self.assertEqual(tokenizer.__class__.__name__       , '''NewTokenizer'''						)
																		self.assertTrue(tokenizer.special_attribute_present						)

											finally:
																		if "custom" in CONFIG_MAPPING._extra_content:
																									del CONFIG_MAPPING._extra_content["custom"]
																		if CustomConfig in TOKENIZER_MAPPING._extra_content:
																									del TOKENIZER_MAPPING._extra_content[CustomConfig]



				def       __snake_case		( self						):
											lowerCAmelCase   =		AutoTokenizer.from_pretrained(
											    '''hf-internal-testing/test_dynamic_tokenizer_legacy'''       , trust_remote_code=UpperCAmelCase_						)
											self.assertTrue(tokenizer.special_attribute_present						)
											if is_tokenizers_available():
																		self.assertEqual(tokenizer.__class__.__name__       , '''NewTokenizerFast'''						)

																		# Test we can also load the slow version
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(
																		    '''hf-internal-testing/test_dynamic_tokenizer_legacy'''       , trust_remote_code=UpperCAmelCase_       , use_fast=UpperCAmelCase_						)
																		self.assertTrue(tokenizer.special_attribute_present						)
																		self.assertEqual(tokenizer.__class__.__name__       , '''NewTokenizer'''						)
											else:
																		self.assertEqual(tokenizer.__class__.__name__       , '''NewTokenizer'''						)



				def       __snake_case		( self						):
											with self.assertRaisesRegex(
											    UpperCAmelCase_       , '''bert-base is not a local folder and is not a valid model identifier'''						):
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained('''bert-base'''						)



				def       __snake_case		( self						):
											with self.assertRaisesRegex(
											    UpperCAmelCase_       , r'''aaaaaa is not a valid git identifier \(branch name, tag name or commit id\)'''						):
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained(UpperCAmelCase_       , revision='''aaaaaa'''						)






				def       __snake_case		( self						):
											# Make sure we have cached the tokenizer.
											lowerCAmelCase   =		AutoTokenizer.from_pretrained('''hf-internal-testing/tiny-random-bert'''						)
											with RequestCounter() as counter:
																		lowerCAmelCase   =		AutoTokenizer.from_pretrained('''hf-internal-testing/tiny-random-bert'''						)
																		self.assertEqual(counter.get_request_count       , 0						)
																		self.assertEqual(counter.head_request_count       , 1						)
																		self.assertEqual(counter.other_request_count       , 0						)









import random
import unittest

import numpy as np

from diffusers import (
    DPMSolverMultistepScheduler,
    EulerAncestralDiscreteScheduler,
    EulerDiscreteScheduler,
    LMSDiscreteScheduler,
    OnnxStableDiffusionImgaImgPipeline,
    PNDMScheduler,
)
from diffusers.utils import floats_tensor
from diffusers.utils.testing_utils import (
    is_onnx_available,
    load_image,
    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  ):





				'''simple docstring'''



				__a							: Any										="""hf-internal-testing/tiny-random-OnnxStableDiffusionPipeline"""



				def       __snake_case		( self       , UpperCAmelCase_=0						):
											lowerCAmelCase   =		floats_tensor((1, 3, 1_28, 1_28)       , rng=random.Random(UpperCAmelCase_						)						)
											lowerCAmelCase   =		np.random.RandomState(UpperCAmelCase_						)
											lowerCAmelCase   =		{
											    '''prompt''': '''A painting of a squirrel eating a burger''',
											    '''image''': image,
											    '''generator''': generator,
											    '''num_inference_steps''': 3,
											    '''strength''': 0.75,
											    '''guidance_scale''': 7.5,
											    '''output_type''': '''numpy''',
											}
											return inputs



				def       __snake_case		( self						):
											lowerCAmelCase   =		OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       , provider='''CPUExecutionProvider'''						)
											pipe.set_progress_bar_config(disable=UpperCAmelCase_						)

											lowerCAmelCase   =		self.get_dummy_inputs()
											lowerCAmelCase   =		pipe(**UpperCAmelCase_						).images
											lowerCAmelCase   =		image[0, -3:, -3:, -1].flatten()

											assert image.shape == (1, 1_28, 1_28, 3)
											lowerCAmelCase   =		np.array([0.69643, 0.58484, 0.50314, 0.58760, 0.55368, 0.59643, 0.51529, 0.41217, 0.49087]						)
											assert np.abs(image_slice - expected_slice						).max() < 1E-1



				def       __snake_case		( self						):
											lowerCAmelCase   =		OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       , provider='''CPUExecutionProvider'''						)
											lowerCAmelCase   =		PNDMScheduler.from_config(pipe.scheduler.config       , skip_prk_steps=UpperCAmelCase_						)
											pipe.set_progress_bar_config(disable=UpperCAmelCase_						)

											lowerCAmelCase   =		self.get_dummy_inputs()
											lowerCAmelCase   =		pipe(**UpperCAmelCase_						).images
											lowerCAmelCase   =		image[0, -3:, -3:, -1]

											assert image.shape == (1, 1_28, 1_28, 3)
											lowerCAmelCase   =		np.array([0.61737, 0.54642, 0.53183, 0.54465, 0.52742, 0.60525, 0.49969, 0.40655, 0.48154]						)

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



				def       __snake_case		( self						):
											lowerCAmelCase   =		OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       , provider='''CPUExecutionProvider'''						)
											lowerCAmelCase   =		LMSDiscreteScheduler.from_config(pipe.scheduler.config						)
											pipe.set_progress_bar_config(disable=UpperCAmelCase_						)

											# warmup pass to apply optimizations
											lowerCAmelCase   =		pipe(**self.get_dummy_inputs()						)

											lowerCAmelCase   =		self.get_dummy_inputs()
											lowerCAmelCase   =		pipe(**UpperCAmelCase_						).images
											lowerCAmelCase   =		image[0, -3:, -3:, -1]

											assert image.shape == (1, 1_28, 1_28, 3)
											lowerCAmelCase   =		np.array([0.52761, 0.59977, 0.49033, 0.49619, 0.54282, 0.50311, 0.47600, 0.40918, 0.45203]						)

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



				def       __snake_case		( self						):
											lowerCAmelCase   =		OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       , provider='''CPUExecutionProvider'''						)
											lowerCAmelCase   =		EulerDiscreteScheduler.from_config(pipe.scheduler.config						)
											pipe.set_progress_bar_config(disable=UpperCAmelCase_						)

											lowerCAmelCase   =		self.get_dummy_inputs()
											lowerCAmelCase   =		pipe(**UpperCAmelCase_						).images
											lowerCAmelCase   =		image[0, -3:, -3:, -1]

											assert image.shape == (1, 1_28, 1_28, 3)
											lowerCAmelCase   =		np.array([0.52911, 0.60004, 0.49229, 0.49805, 0.54502, 0.50680, 0.47777, 0.41028, 0.45304]						)

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



				def       __snake_case		( self						):
											lowerCAmelCase   =		OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       , provider='''CPUExecutionProvider'''						)
											lowerCAmelCase   =		EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config						)
											pipe.set_progress_bar_config(disable=UpperCAmelCase_						)

											lowerCAmelCase   =		self.get_dummy_inputs()
											lowerCAmelCase   =		pipe(**UpperCAmelCase_						).images
											lowerCAmelCase   =		image[0, -3:, -3:, -1]

											assert image.shape == (1, 1_28, 1_28, 3)
											lowerCAmelCase   =		np.array([0.52911, 0.60004, 0.49229, 0.49805, 0.54502, 0.50680, 0.47777, 0.41028, 0.45304]						)

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






				def       __snake_case		( self						):
											lowerCAmelCase   =		OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       , provider='''CPUExecutionProvider'''						)
											lowerCAmelCase   =		DPMSolverMultistepScheduler.from_config(pipe.scheduler.config						)
											pipe.set_progress_bar_config(disable=UpperCAmelCase_						)

											lowerCAmelCase   =		self.get_dummy_inputs()
											lowerCAmelCase   =		pipe(**UpperCAmelCase_						).images
											lowerCAmelCase   =		image[0, -3:, -3:, -1]

											assert image.shape == (1, 1_28, 1_28, 3)
											lowerCAmelCase   =		np.array([0.65331, 0.58277, 0.48204, 0.56059, 0.53665, 0.56235, 0.50969, 0.40009, 0.46552]						)

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




@nightly
@require_onnxruntime
@require_torch_gpu
class 							__UpperCamelCase			( unittest.TestCase  ):





				'''simple docstring'''



				@property
				def       __snake_case		( self						):
											return (
											    "CUDAExecutionProvider",
											    {
											        "gpu_mem_limit": "15000000000",  # 15GB
											        "arena_extend_strategy": "kSameAsRequested",
											    },
											)



				@property
				def       __snake_case		( self						):
											lowerCAmelCase   =		ort.SessionOptions()
											lowerCAmelCase   =		False
											return options



				def       __snake_case		( self						):
											lowerCAmelCase   =		load_image(
											    '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main'''
											    '''/img2img/sketch-mountains-input.jpg'''						)
											lowerCAmelCase   =		init_image.resize((7_68, 5_12)						)
											# using the PNDM scheduler by default
											lowerCAmelCase   =		OnnxStableDiffusionImgaImgPipeline.from_pretrained(
											    '''CompVis/stable-diffusion-v1-4'''       , revision='''onnx'''       , safety_checker=UpperCAmelCase_       , feature_extractor=UpperCAmelCase_       , provider=self.gpu_provider       , sess_options=self.gpu_options       , )
											pipe.set_progress_bar_config(disable=UpperCAmelCase_						)

											lowerCAmelCase   =		'''A fantasy landscape, trending on artstation'''

											lowerCAmelCase   =		np.random.RandomState(0						)
											lowerCAmelCase   =		pipe(
											    prompt=UpperCAmelCase_       , image=UpperCAmelCase_       , strength=0.75       , guidance_scale=7.5       , num_inference_steps=10       , generator=UpperCAmelCase_       , output_type='''np'''       , )
											lowerCAmelCase   =		output.images
											lowerCAmelCase   =		images[0, 2_55:2_58, 3_83:3_86, -1]

											assert images.shape == (1, 5_12, 7_68, 3)
											lowerCAmelCase   =		np.array([0.4909, 0.5059, 0.5372, 0.4623, 0.4876, 0.5049, 0.4820, 0.4956, 0.5019]						)
											# TODO: lower the tolerance after finding the cause of onnxruntime reproducibility issues

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






				def       __snake_case		( self						):
											lowerCAmelCase   =		load_image(
											    '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main'''
											    '''/img2img/sketch-mountains-input.jpg'''						)
											lowerCAmelCase   =		init_image.resize((7_68, 5_12)						)
											lowerCAmelCase   =		LMSDiscreteScheduler.from_pretrained(
											    '''runwayml/stable-diffusion-v1-5'''       , subfolder='''scheduler'''       , revision='''onnx'''						)
											lowerCAmelCase   =		OnnxStableDiffusionImgaImgPipeline.from_pretrained(
											    '''runwayml/stable-diffusion-v1-5'''       , revision='''onnx'''       , scheduler=UpperCAmelCase_       , safety_checker=UpperCAmelCase_       , feature_extractor=UpperCAmelCase_       , provider=self.gpu_provider       , sess_options=self.gpu_options       , )
											pipe.set_progress_bar_config(disable=UpperCAmelCase_						)

											lowerCAmelCase   =		'''A fantasy landscape, trending on artstation'''

											lowerCAmelCase   =		np.random.RandomState(0						)
											lowerCAmelCase   =		pipe(
											    prompt=UpperCAmelCase_       , image=UpperCAmelCase_       , strength=0.75       , guidance_scale=7.5       , num_inference_steps=20       , generator=UpperCAmelCase_       , output_type='''np'''       , )
											lowerCAmelCase   =		output.images
											lowerCAmelCase   =		images[0, 2_55:2_58, 3_83:3_86, -1]

											assert images.shape == (1, 5_12, 7_68, 3)
											lowerCAmelCase   =		np.array([0.8043, 0.926, 0.9581, 0.8119, 0.8954, 0.913, 0.7209, 0.7463, 0.7431]						)
											# TODO: lower the tolerance after finding the cause of onnxruntime reproducibility issues

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



