



'''simple docstring'''






import tempfile
import unittest

from diffusers import (
    DDIMScheduler,
    DDPMScheduler,
    DPMSolverMultistepScheduler,
    EulerAncestralDiscreteScheduler,
    EulerDiscreteScheduler,
    PNDMScheduler,
    logging,
)
from diffusers.configuration_utils import ConfigMixin, register_to_config
from diffusers.utils.testing_utils import CaptureLogger



class 				lowercase			(    _lowerCamelCase							):


 """simple docstring"""


 UpperCAmelCase		      =    """config.json"""







 @register_to_config
 def __init__(				self    ,a_=2    ,a_=5    ,a_=(2, 5)    ,a_="for diffusion"    ,a_=[1, 3]    ,)						->  Tuple:
        pass







class 				lowercase			(    _lowerCamelCase							):


 """simple docstring"""


 UpperCAmelCase		      =    """config.json"""







 @register_to_config
 def __init__(				self    ,a_=2    ,a_=5    ,a_=(2, 5)    ,a_="for diffusion"    ,a_=[1, 3]    ,)						->  Tuple:
        pass







class 				lowercase			(    _lowerCamelCase							):


 """simple docstring"""


 UpperCAmelCase		      =    """config.json"""







 @register_to_config
 def __init__(				self    ,a_=2    ,a_=5    ,a_=(2, 5)    ,a_="for diffusion"    ,a_=[1, 3]    ,a_=[1, 3]    ,)						->  Union[str, Any]:
        pass







class 				lowercase			(    _lowerCamelCase							):


 """simple docstring"""


 UpperCAmelCase		      =    """config.json"""







 @register_to_config
 def __init__(				self    ,a_=2    ,a_=5    ,a_=(2, 5)    ,a_="for diffusion"    ,a_=[1, 5]    ,a_=[5, 4]    ,)						->  Tuple:
        pass







class 				lowercase			(    unittest.TestCase							):


 """simple docstring"""


 def _snake_case					(				self				)						->  Optional[int]:
        with self.assertRaises(a_				):
               ConfigMixin.load_config("""dummy_path"""				)







 def _snake_case					(				self				)						->  Union[str, Any]:
        _UpperCAmelCase    :		Optional[Any]     	=					SampleObject()
        _UpperCAmelCase    :		Union[str, Any]     	=					obj.config
        assert config["a"] == 2
        assert config["b"] == 5
        assert config["c"] == (2, 5)
        assert config["d"] == "for diffusion"
        assert config["e"] == [1, 3]

        # init ignore private arguments
        _UpperCAmelCase    :		Optional[Any]     	=					SampleObject(_name_or_path="""lalala"""				)
        _UpperCAmelCase    :		Any     	=					obj.config
        assert config["a"] == 2
        assert config["b"] == 5
        assert config["c"] == (2, 5)
        assert config["d"] == "for diffusion"
        assert config["e"] == [1, 3]

        # can override default
        _UpperCAmelCase    :		str     	=					SampleObject(c=6				)
        _UpperCAmelCase    :		Dict     	=					obj.config
        assert config["a"] == 2
        assert config["b"] == 5
        assert config["c"] == 6
        assert config["d"] == "for diffusion"
        assert config["e"] == [1, 3]

        # can use positional arguments.
        _UpperCAmelCase    :		List[str]     	=					SampleObject(1    ,c=6				)
        _UpperCAmelCase    :		Tuple     	=					obj.config
        assert config["a"] == 1
        assert config["b"] == 5
        assert config["c"] == 6
        assert config["d"] == "for diffusion"
        assert config["e"] == [1, 3]







 def _snake_case					(				self				)						->  Optional[Any]:
        _UpperCAmelCase    :		Any     	=					SampleObject()
        _UpperCAmelCase    :		Dict     	=					obj.config

        assert config["a"] == 2
        assert config["b"] == 5
        assert config["c"] == (2, 5)
        assert config["d"] == "for diffusion"
        assert config["e"] == [1, 3]

        with tempfile.TemporaryDirectory() as tmpdirname:
               obj.save_config(a_				)
               _UpperCAmelCase    :		Optional[int]     	=					SampleObject.from_config(SampleObject.load_config(a_				)				)
               _UpperCAmelCase    :		str     	=					new_obj.config

        # unfreeze configs
        _UpperCAmelCase    :		str     	=					dict(a_				)
        _UpperCAmelCase    :		Any     	=					dict(a_				)

        assert config.pop("""c"""				) == (2, 5)  # instantiated as tuple
        assert new_config.pop("""c"""				) == [2, 5]  # saved & loaded as list because of json
        config.pop("""_use_default_values"""				)
        assert config == new_config







 def _snake_case					(				self				)						->  List[str]:
        _UpperCAmelCase    :		List[str]     	=					logging.get_logger("""diffusers.configuration_utils"""				)
        # 30 for warning
        logger.setLevel(30				)

        with CaptureLogger(a_				) as cap_logger:
               _UpperCAmelCase    :		Dict     	=					DDIMScheduler.from_pretrained(
                   """hf-internal-testing/tiny-stable-diffusion-torch"""    ,subfolder="""scheduler"""				)

        assert ddim.__class__ == DDIMScheduler
        # no warning should be thrown
        assert cap_logger.out == ""







 def _snake_case					(				self				)						->  List[str]:
        _UpperCAmelCase    :		Tuple     	=					logging.get_logger("""diffusers.configuration_utils"""				)
        # 30 for warning
        logger.setLevel(30				)

        with CaptureLogger(a_				) as cap_logger:
               _UpperCAmelCase    :		Any     	=					EulerDiscreteScheduler.from_pretrained(
                   """hf-internal-testing/tiny-stable-diffusion-torch"""    ,subfolder="""scheduler"""				)

        assert euler.__class__ == EulerDiscreteScheduler
        # no warning should be thrown
        assert cap_logger.out == ""







 def _snake_case					(				self				)						->  Tuple:
        _UpperCAmelCase    :		List[Any]     	=					logging.get_logger("""diffusers.configuration_utils"""				)
        # 30 for warning
        logger.setLevel(30				)

        with CaptureLogger(a_				) as cap_logger:
               _UpperCAmelCase    :		Optional[Any]     	=					EulerAncestralDiscreteScheduler.from_pretrained(
                   """hf-internal-testing/tiny-stable-diffusion-torch"""    ,subfolder="""scheduler"""				)

        assert euler.__class__ == EulerAncestralDiscreteScheduler
        # no warning should be thrown
        assert cap_logger.out == ""







 def _snake_case					(				self				)						->  Optional[int]:
        _UpperCAmelCase    :		Dict     	=					logging.get_logger("""diffusers.configuration_utils"""				)
        # 30 for warning
        logger.setLevel(30				)

        with CaptureLogger(a_				) as cap_logger:
               _UpperCAmelCase    :		List[Any]     	=					PNDMScheduler.from_pretrained(
                   """hf-internal-testing/tiny-stable-diffusion-torch"""    ,subfolder="""scheduler"""				)

        assert pndm.__class__ == PNDMScheduler
        # no warning should be thrown
        assert cap_logger.out == ""







 def _snake_case					(				self				)						->  Optional[int]:
        _UpperCAmelCase    :		Tuple     	=					logging.get_logger("""diffusers.configuration_utils"""				)
        # 30 for warning
        logger.setLevel(30				)

        with CaptureLogger(a_				) as cap_logger:
               _UpperCAmelCase    :		List[str]     	=					DDPMScheduler.from_pretrained(
                   """hf-internal-testing/tiny-stable-diffusion-torch"""    ,subfolder="""scheduler"""    ,prediction_type="""sample"""    ,beta_end=8    ,)

        with CaptureLogger(a_				) as cap_logger_a:
               _UpperCAmelCase    :		Any     	=					DDPMScheduler.from_pretrained("""google/ddpm-celebahq-256"""    ,beta_start=88				)

        assert ddpm.__class__ == DDPMScheduler
        assert ddpm.config.prediction_type == "sample"
        assert ddpm.config.beta_end == 8
        assert ddpm_a.config.beta_start == 88

        # no warning should be thrown
        assert cap_logger.out == ""
        assert cap_logger_a.out == ""







 def _snake_case					(				self				)						->  List[str]:
        _UpperCAmelCase    :		str     	=					logging.get_logger("""diffusers.configuration_utils"""				)
        # 30 for warning
        logger.setLevel(30				)

        with CaptureLogger(a_				) as cap_logger:
               _UpperCAmelCase    :		str     	=					DPMSolverMultistepScheduler.from_pretrained(
                   """hf-internal-testing/tiny-stable-diffusion-torch"""    ,subfolder="""scheduler"""				)

        assert dpm.__class__ == DPMSolverMultistepScheduler
        # no warning should be thrown
        assert cap_logger.out == ""







 def _snake_case					(				self				)						->  Optional[int]:
        # let's first save a config that should be in the form
        #    a=2,
        #    b=5,
        #    c=(2, 5),
        #    d="for diffusion",
        #    e=[1, 3],

        _UpperCAmelCase    :		Dict     	=					SampleObject()

        _UpperCAmelCase    :		Tuple     	=					{k: v for k, v in config.config.items() if not k.startswith("""_"""				)}

        # make sure that default config has all keys in `_use_default_values`
        assert set(config_dict.keys()				) == set(config.config._use_default_values				)

        with tempfile.TemporaryDirectory() as tmpdirname:
               config.save_config(a_				)

               # now loading it with SampleObject2 should put f into `_use_default_values`
               _UpperCAmelCase    :		Any     	=					SampleObjecta.from_config(a_				)

               assert "f" in config._use_default_values
               assert config.f == [1, 3]

        # now loading the config, should **NOT** use [1, 3] for `f`, but the default [1, 4] value
        # **BECAUSE** it is part of `config._use_default_values`
        _UpperCAmelCase    :		List[Any]     	=					SampleObjecta.from_config(config.config				)
        assert new_config.f == [5, 4]

        config.config._use_default_values.pop()
        _UpperCAmelCase    :		Union[str, Any]     	=					SampleObjecta.from_config(config.config				)
        assert new_config_a.f == [1, 3]

        # Nevertheless "e" should still be correctly loaded to [1, 3] from SampleObject2 instead of defaulting to [1, 5]
        assert new_config_a.e == [1, 3]




from ..utils import deprecate
from .attention_processor import (  # noqa: F401
    Attention,
    AttentionProcessor,
    AttnAddedKVProcessor,
    AttnProcessor2_0,
    LoRAAttnProcessor,
    LoRALinearLayer,
    LoRAXFormersAttnProcessor,
    SlicedAttnAddedKVProcessor,
    SlicedAttnProcessor,
    XFormersAttnProcessor,
)
from .attention_processor import AttnProcessor as AttnProcessorRename  # noqa: F401


deprecate(
    'cross_attention',
    '0.20.0',
    'Importing from cross_attention is deprecated. Please import from diffusers.models.attention_processor instead.',
    standard_warn=False,
)


snake_case__						      =			AttentionProcessor



class 			UpperCamelCase					(			__lowercase			):

     '''simple docstring'''

     def __init__(       self					,					*A_					,					**A_    )			->					Union[str, Any]:






           """simple docstring"""
           _lowerCamelCase           =					F'{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"    )    )} instead.'
           deprecate('''cross_attention'''					,					'''0.20.0'''					,					A_					,					standard_warn=A_    )
           super().__init__(*A_					,					**A_    )





class 			UpperCamelCase					(			__lowercase			):

     '''simple docstring'''

     def __init__(       self					,					*A_					,					**A_    )			->					List[Any]:






           """simple docstring"""
           _lowerCamelCase           =					F'{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"    )    )} instead.'
           deprecate('''cross_attention'''					,					'''0.20.0'''					,					A_					,					standard_warn=A_    )
           super().__init__(*A_					,					**A_    )





class 			UpperCamelCase					(			__lowercase			):

     '''simple docstring'''

     def __init__(       self					,					*A_					,					**A_    )			->					Optional[int]:






           """simple docstring"""
           _lowerCamelCase           =					F'{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"    )    )} instead.'
           deprecate('''cross_attention'''					,					'''0.20.0'''					,					A_					,					standard_warn=A_    )
           super().__init__(*A_					,					**A_    )





class 			UpperCamelCase					(			__lowercase			):

     '''simple docstring'''

     def __init__(       self					,					*A_					,					**A_    )			->					Optional[int]:






           """simple docstring"""
           _lowerCamelCase           =					F'{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"    )    )} instead.'
           deprecate('''cross_attention'''					,					'''0.20.0'''					,					A_					,					standard_warn=A_    )
           super().__init__(*A_					,					**A_    )





class 			UpperCamelCase					(			__lowercase			):

     '''simple docstring'''

     def __init__(       self					,					*A_					,					**A_    )			->					Tuple:






           """simple docstring"""
           _lowerCamelCase           =					F'{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"    )    )} instead.'
           deprecate('''cross_attention'''					,					'''0.20.0'''					,					A_					,					standard_warn=A_    )
           super().__init__(*A_					,					**A_    )





class 			UpperCamelCase					(			__lowercase			):

     '''simple docstring'''

     def __init__(       self					,					*A_					,					**A_    )			->					int:






           """simple docstring"""
           _lowerCamelCase           =					F'{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"    )    )} instead.'
           deprecate('''cross_attention'''					,					'''0.20.0'''					,					A_					,					standard_warn=A_    )
           super().__init__(*A_					,					**A_    )





class 			UpperCamelCase					(			__lowercase			):

     '''simple docstring'''

     def __init__(       self					,					*A_					,					**A_    )			->					Optional[int]:






           """simple docstring"""
           _lowerCamelCase           =					F'{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"    )    )} instead.'
           deprecate('''cross_attention'''					,					'''0.20.0'''					,					A_					,					standard_warn=A_    )
           super().__init__(*A_					,					**A_    )





class 			UpperCamelCase					(			__lowercase			):

     '''simple docstring'''

     def __init__(       self					,					*A_					,					**A_    )			->					Dict:






           """simple docstring"""
           _lowerCamelCase           =					F'{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"    )    )} instead.'
           deprecate('''cross_attention'''					,					'''0.20.0'''					,					A_					,					standard_warn=A_    )
           super().__init__(*A_					,					**A_    )