




# tests directory-specific settings - this file is run automatically
# by pytest before any tests are run

import doctest
import sys
import warnings
from os.path import abspath, dirname, join

import _pytest

from transformers.testing_utils import HfDoctestModule, HfDocTestParser


# allow having multiple repository checkouts and not needing to remember to rerun
# 'pip install -e .[dev]' when switching between checkouts and running tests.
_A     =			abspath(join(dirname(__file__), '''src'''))
sys.path.insert(1, git_repo_path)

# silence FutureWarning warnings in tests since often we can't act on them until
# they become normal warnings - i.e. the tests still need to test the current functionality
warnings.simplefilter(action='''ignore''', category=FutureWarning)





def __UpperCamelCase			(       _A  ):
						config.addinivalue_line(
						    '''markers''' ,  '''is_pt_tf_cross_test: mark test to run only when PT and TF interactions are tested'''  )
						config.addinivalue_line(
						    '''markers''' ,  '''is_pt_flax_cross_test: mark test to run only when PT and FLAX interactions are tested'''  )
						config.addinivalue_line('''markers''' ,  '''is_pipeline_test: mark test to run only when pipelines are tested'''  )
						config.addinivalue_line('''markers''' ,  '''is_staging_test: mark test to run only in the staging environment'''  )
						config.addinivalue_line('''markers''' ,  '''accelerate_tests: mark test that require accelerate'''  )
						config.addinivalue_line('''markers''' ,  '''tool_tests: mark the tool tests that are run on their specific schedule'''  )





def __UpperCamelCase			(       _A  ):
						from transformers.testing_utils import pytest_addoption_shared

						pytest_addoption_shared(_A  )





def __UpperCamelCase			(       _A  ):
						from transformers.testing_utils import pytest_terminal_summary_main

						lowerCAmelCase_      			=  terminalreporter.config.getoption('''--make-reports'''  )
						if make_reports:
												pytest_terminal_summary_main(_A ,  id=_A  )





def __UpperCamelCase			(       _A ,  _A  ):
						# If no tests are collected, pytest exists with code 5, which makes the CI fail.
						if exitstatus == 5:
												lowerCAmelCase_      			=  0


# Doctest custom flag to ignore output.
_A     =			doctest.register_optionflag('''IGNORE_RESULT''')

_A     =			doctest.OutputChecker


class  A		(  __UpperCAmelCase     ):



		def        SCREAMING_SNAKE_CASE__			(     self,	UpperCamelCase__,	UpperCamelCase__,	UpperCamelCase__   ):







								"""simple docstring"""



								if IGNORE_RESULT & optionflags:
														return True
								return OutputChecker.check_output(self,	UpperCamelCase__,	UpperCamelCase__,	UpperCamelCase__   )







_A     =			CustomOutputChecker
_A     =			HfDoctestModule






_A     =			HfDocTestParser










import unittest

import numpy as np
import torch

from diffusers import KarrasVePipeline, KarrasVeScheduler, UNetaDModel
from diffusers.utils.testing_utils import enable_full_determinism, require_torch, slow, torch_device


enable_full_determinism()


class  A		(  unittest.TestCase     ):



		@property
		def        SCREAMING_SNAKE_CASE__			(     self   ):







								"""simple docstring"""



								torch.manual_seed(0   )
								lowerCAmelCase_      			=  UNetaDModel(
								    block_out_channels=(32, 64),	layers_per_block=2,	sample_size=32,	in_channels=3,	out_channels=3,	down_block_types=('''DownBlock2D''', '''AttnDownBlock2D'''),	up_block_types=('''AttnUpBlock2D''', '''UpBlock2D'''),	)
								return model







		def        SCREAMING_SNAKE_CASE__			(     self   ):







								"""simple docstring"""



								lowerCAmelCase_      			=  self.dummy_uncond_unet
								lowerCAmelCase_      			=  KarrasVeScheduler()

								lowerCAmelCase_      			=  KarrasVePipeline(unet=UpperCamelCase__,	scheduler=UpperCamelCase__   )
								pipe.to(UpperCamelCase__   )
								pipe.set_progress_bar_config(disable=UpperCamelCase__   )

								lowerCAmelCase_      			=  torch.manual_seed(0   )
								lowerCAmelCase_      			=  pipe(num_inference_steps=2,	generator=UpperCamelCase__,	output_type='''numpy'''   ).images

								lowerCAmelCase_      			=  torch.manual_seed(0   )
								lowerCAmelCase_      			=  pipe(num_inference_steps=2,	generator=UpperCamelCase__,	output_type='''numpy''',	return_dict=UpperCamelCase__   )[0]

								lowerCAmelCase_      			=  image[0, -3:, -3:, -1]
								lowerCAmelCase_      			=  image_from_tuple[0, -3:, -3:, -1]

								assert image.shape == (1, 32, 32, 3)
								lowerCAmelCase_      			=  np.array([0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]   )

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







@slow
@require_torch
class  A		(  unittest.TestCase     ):



		def        SCREAMING_SNAKE_CASE__			(     self   ):







								"""simple docstring"""



								lowerCAmelCase_      			=  '''google/ncsnpp-celebahq-256'''
								lowerCAmelCase_      			=  UNetaDModel.from_pretrained(UpperCamelCase__   )
								lowerCAmelCase_      			=  KarrasVeScheduler()

								lowerCAmelCase_      			=  KarrasVePipeline(unet=UpperCamelCase__,	scheduler=UpperCamelCase__   )
								pipe.to(UpperCamelCase__   )
								pipe.set_progress_bar_config(disable=UpperCamelCase__   )

								lowerCAmelCase_      			=  torch.manual_seed(0   )
								lowerCAmelCase_      			=  pipe(num_inference_steps=20,	generator=UpperCamelCase__,	output_type='''numpy'''   ).images

								lowerCAmelCase_      			=  image[0, -3:, -3:, -1]
								assert image.shape == (1, 256, 256, 3)
								lowerCAmelCase_      			=  np.array([0.578, 0.5_811, 0.5_924, 0.5_809, 0.587, 0.5_886, 0.5_861, 0.5_802, 0.586]   )

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




