



import unittest

from transformers.testing_utils import require_bsa
from transformers.utils import is_bsa_available

from ...test_feature_extraction_common import FeatureExtractionSavingTestMixin


if is_bsa_available():
		from transformers import MarkupLMFeatureExtractor

class   snake_case__							(unittest.TestCase						):







						"""simple docstring"""




						def __init__(  self   ,  __lowercase    )   -> Union[str, Any]:
									"""simple docstring"""




									a__  :		Any					=    parent

						def 				SCREAMING_SNAKE_CASE__(  self    )   -> int:
									"""simple docstring"""




									return {}




def       lowerCAmelCase_	(    )				->			Union[str, Any]:







			"""simple docstring"""
			a__  :		Optional[int]					=    '<HTML>\n\n    <HEAD>\n    <TITLE>sample document</TITLE>\n    </HEAD>\n\n    <BODY BGCOLOR="FFFFFF">\n    <HR>\n    <a href="http://google.com">Goog</a>\n    <H1>This is one header</H1>\n    <H2>This is a another Header</H2>\n    <P>Travel from\n        <P>\n        <B>SFO to JFK</B>\n        <BR>\n        <B><I>on May 2, 2015 at 2:00 pm. For details go to confirm.com </I></B>\n        <HR>\n        <div style="color:#0000FF">\n            <h3>Traveler <b> name </b> is\n            <p> John Doe </p>\n        </div>'

			a__  :		int					=    '\n    <!DOCTYPE html>\n    <html>\n    <body>\n\n    <h1>My First Heading</h1>\n    <p>My first paragraph.</p>\n\n    </body>\n    </html>\n    '

			return [html_string_a, html_string_a]





@require_bsa
class   snake_case__							(A__   ,      unittest.TestCase						):







						"""simple docstring"""




						__lowerCAmelCase	:Union[str, Any]         =	MarkupLMFeatureExtractor if is_bsa_available() else None

						def 				SCREAMING_SNAKE_CASE__(  self    )   -> Union[str, Any]:
									"""simple docstring"""




									a__  :		Optional[Any]					=    MarkupLMFeatureExtractionTester(self    )

						@property
						def 				SCREAMING_SNAKE_CASE__(  self    )   -> Dict:
									"""simple docstring"""




									return self.feature_extract_tester.prepare_feat_extract_dict()

						def 				SCREAMING_SNAKE_CASE__(  self    )   -> str:
									"""simple docstring"""




									a__  :		Dict					=    self.feature_extraction_class()

									# Test not batched input
									a__  :		Union[str, Any]					=    get_html_strings()[0]
									a__  :		Tuple					=    feature_extractor(__UpperCAmelCase    )

									# fmt: off
									a__  :		Dict					=    [['sample document', 'Goog', 'This is one header', 'This is a another Header', 'Travel from', 'SFO to JFK', 'on May 2, 2015 at 2:00 pm. For details go to confirm.com', 'Traveler', 'name', 'is', 'John Doe']]
									a__  :		str					=    [['/html/head/title', '/html/body/a', '/html/body/h1', '/html/body/h2', '/html/body/p', '/html/body/p/p/b[1]', '/html/body/p/p/b[2]/i', '/html/body/p/p/div/h3', '/html/body/p/p/div/h3/b', '/html/body/p/p/div/h3', '/html/body/p/p/div/h3/p']]
									# fmt: on

									self.assertEqual(encoding.nodes   ,  __UpperCAmelCase    )
									self.assertEqual(encoding.xpaths   ,  __UpperCAmelCase    )

									# Test batched
									a__  :		List[Any]					=    get_html_strings()
									a__  :		str					=    feature_extractor(__UpperCAmelCase    )

									# fmt: off
									a__  :		Optional[int]					=    expected_nodes + [['My First Heading', 'My first paragraph.']]
									a__  :		List[str]					=    expected_xpaths + [['/html/body/h1', '/html/body/p']]

									self.assertEqual(len(encoding.nodes    )   ,  2    )
									self.assertEqual(len(encoding.xpaths    )   ,  2    )

									self.assertEqual(encoding.nodes   ,  __UpperCAmelCase    )
									self.assertEqual(encoding.xpaths   ,  __UpperCAmelCase    )











"""simple docstring"""





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    _lowerCAmelCase  (	a    ,  unittest.TestCase			):
       """simple docstring"""




       __magic_name__	:int						    =   """hf-internal-testing/tiny-random-OnnxStableDiffusionPipeline"""






       def 	snake_case		(       self       ,					__UpperCAmelCase=0 ):



         '''simple docstring'''

         lowerCAmelCase__     :List[str]											=				floats_tensor((1, 3, 1_2_8, 1_2_8)       ,					rng=random.Random(__UpperCAmelCase ) )
         lowerCAmelCase__     :List[str]											=				np.random.RandomState(__UpperCAmelCase )
         lowerCAmelCase__     :List[str]											=				{
             '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 ):



         '''simple docstring'''

         lowerCAmelCase__     :Optional[Any]											=				OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       ,					provider='CPUExecutionProvider' )
         pipe.set_progress_bar_config(disable=__UpperCAmelCase )

         lowerCAmelCase__     :Union[str, Any]											=				self.get_dummy_inputs()
         lowerCAmelCase__     :Optional[int]											=				pipe(**__UpperCAmelCase ).images
         lowerCAmelCase__     :Union[str, Any]											=				image[0, -3:, -3:, -1].flatten()

         assert image.shape == (1, 1_2_8, 1_2_8, 3)
         lowerCAmelCase__     :Union[str, Any]											=				np.array([0.6_96_43, 0.5_84_84, 0.5_03_14, 0.5_87_60, 0.5_53_68, 0.5_96_43, 0.5_15_29, 0.4_12_17, 0.4_90_87] )
         assert np.abs(image_slice - expected_slice ).max() < 1E-1






       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :Optional[int]											=				OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       ,					provider='CPUExecutionProvider' )
         lowerCAmelCase__     :str											=				PNDMScheduler.from_config(pipe.scheduler.config       ,					skip_prk_steps=__UpperCAmelCase )
         pipe.set_progress_bar_config(disable=__UpperCAmelCase )

         lowerCAmelCase__     :Tuple											=				self.get_dummy_inputs()
         lowerCAmelCase__     :Optional[Any]											=				pipe(**__UpperCAmelCase ).images
         lowerCAmelCase__     :Any											=				image[0, -3:, -3:, -1]

         assert image.shape == (1, 1_2_8, 1_2_8, 3)
         lowerCAmelCase__     :int											=				np.array([0.6_17_37, 0.5_46_42, 0.5_31_83, 0.5_44_65, 0.5_27_42, 0.6_05_25, 0.4_99_69, 0.4_06_55, 0.4_81_54] )

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






       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :Optional[int]											=				OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       ,					provider='CPUExecutionProvider' )
         lowerCAmelCase__     :List[str]											=				LMSDiscreteScheduler.from_config(pipe.scheduler.config )
         pipe.set_progress_bar_config(disable=__UpperCAmelCase )

         # warmup pass to apply optimizations
         lowerCAmelCase__     :List[Any]											=				pipe(**self.get_dummy_inputs() )

         lowerCAmelCase__     :Tuple											=				self.get_dummy_inputs()
         lowerCAmelCase__     :int											=				pipe(**__UpperCAmelCase ).images
         lowerCAmelCase__     :Any											=				image[0, -3:, -3:, -1]

         assert image.shape == (1, 1_2_8, 1_2_8, 3)
         lowerCAmelCase__     :Union[str, Any]											=				np.array([0.5_27_61, 0.5_99_77, 0.4_90_33, 0.4_96_19, 0.5_42_82, 0.5_03_11, 0.4_76_00, 0.4_09_18, 0.4_52_03] )

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






       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :Optional[Any]											=				OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       ,					provider='CPUExecutionProvider' )
         lowerCAmelCase__     :Dict											=				EulerDiscreteScheduler.from_config(pipe.scheduler.config )
         pipe.set_progress_bar_config(disable=__UpperCAmelCase )

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

         assert image.shape == (1, 1_2_8, 1_2_8, 3)
         lowerCAmelCase__     :Optional[int]											=				np.array([0.5_29_11, 0.6_00_04, 0.4_92_29, 0.4_98_05, 0.5_45_02, 0.5_06_80, 0.4_77_77, 0.4_10_28, 0.4_53_04] )

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






       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :str											=				OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       ,					provider='CPUExecutionProvider' )
         lowerCAmelCase__     :str											=				EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config )
         pipe.set_progress_bar_config(disable=__UpperCAmelCase )

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

         assert image.shape == (1, 1_2_8, 1_2_8, 3)
         lowerCAmelCase__     :int											=				np.array([0.5_29_11, 0.6_00_04, 0.4_92_29, 0.4_98_05, 0.5_45_02, 0.5_06_80, 0.4_77_77, 0.4_10_28, 0.4_53_04] )

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






       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :List[Any]											=				OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       ,					provider='CPUExecutionProvider' )
         lowerCAmelCase__     :List[Any]											=				DPMSolverMultistepScheduler.from_config(pipe.scheduler.config )
         pipe.set_progress_bar_config(disable=__UpperCAmelCase )

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

         assert image.shape == (1, 1_2_8, 1_2_8, 3)
         lowerCAmelCase__     :Optional[Any]											=				np.array([0.6_53_31, 0.5_82_77, 0.4_82_04, 0.5_60_59, 0.5_36_65, 0.5_62_35, 0.5_09_69, 0.4_00_09, 0.4_65_52] )

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






@nightly
@require_onnxruntime
@require_torch_gpu
class    _lowerCAmelCase  (	unittest.TestCase			):
       """simple docstring"""




       @property
       def 	snake_case		(       self ):



         '''simple docstring'''

         return (
             "CUDAExecutionProvider",
             {
                 "gpu_mem_limit": "15000000000",  # 15GB
                 "arena_extend_strategy": "kSameAsRequested",
             },
         )






       @property
       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :Tuple											=				ort.SessionOptions()
         lowerCAmelCase__     :Optional[int]											=				False
         return options






       def 	snake_case		(       self ):



         '''simple docstring'''

         lowerCAmelCase__     :Any											=				load_image(
             'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main'
             '/img2img/sketch-mountains-input.jpg' )
         lowerCAmelCase__     :Any											=				init_image.resize((7_6_8, 5_1_2) )
         # using the PNDM scheduler by default
         lowerCAmelCase__     :Optional[int]											=				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__     :List[Any]											=				'A fantasy landscape, trending on artstation'

         lowerCAmelCase__     :Optional[Any]											=				np.random.RandomState(0 )
         lowerCAmelCase__     :List[str]											=				pipe(
             prompt=__UpperCAmelCase       ,					image=__UpperCAmelCase       ,					strength=0.75       ,					guidance_scale=7.5       ,					num_inference_steps=1_0       ,					generator=__UpperCAmelCase       ,					output_type='np'       ,					)
         lowerCAmelCase__     :Any											=				output.images
         lowerCAmelCase__     :List[str]											=				images[0, 2_5_5:2_5_8, 3_8_3:3_8_6, -1]

         assert images.shape == (1, 5_1_2, 7_6_8, 3)
         lowerCAmelCase__     :List[Any]											=				np.array([0.49_09, 0.50_59, 0.53_72, 0.46_23, 0.48_76, 0.50_49, 0.48_20, 0.49_56, 0.50_19] )
         # 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 ):



         '''simple docstring'''

         lowerCAmelCase__     :Union[str, Any]											=				load_image(
             'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main'
             '/img2img/sketch-mountains-input.jpg' )
         lowerCAmelCase__     :Optional[Any]											=				init_image.resize((7_6_8, 5_1_2) )
         lowerCAmelCase__     :List[Any]											=				LMSDiscreteScheduler.from_pretrained(
             'runwayml/stable-diffusion-v1-5'       ,					subfolder='scheduler'       ,					revision='onnx' )
         lowerCAmelCase__     :Optional[Any]											=				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__     :List[Any]											=				'A fantasy landscape, trending on artstation'

         lowerCAmelCase__     :List[Any]											=				np.random.RandomState(0 )
         lowerCAmelCase__     :List[Any]											=				pipe(
             prompt=__UpperCAmelCase       ,					image=__UpperCAmelCase       ,					strength=0.75       ,					guidance_scale=7.5       ,					num_inference_steps=2_0       ,					generator=__UpperCAmelCase       ,					output_type='np'       ,					)
         lowerCAmelCase__     :Optional[Any]											=				output.images
         lowerCAmelCase__     :int											=				images[0, 2_5_5:2_5_8, 3_8_3:3_8_6, -1]

         assert images.shape == (1, 5_1_2, 7_6_8, 3)
         lowerCAmelCase__     :List[Any]											=				np.array([0.80_43, 0.9_26, 0.95_81, 0.81_19, 0.89_54, 0.9_13, 0.72_09, 0.74_63, 0.74_31] )
         # TODO: lower the tolerance after finding the cause of onnxruntime reproducibility issues

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