






"""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(							_UpperCamelCase	):
						lowerCAmelCase_		:				List[Any]=							"""config.json"""






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




											"""simple docstring"""





											pass




class 							__lowercase(							_UpperCamelCase	):
						lowerCAmelCase_		:				Tuple=							"""config.json"""






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




											"""simple docstring"""





											pass




class 							__lowercase(							_UpperCamelCase	):
						lowerCAmelCase_		:				Optional[Any]=							"""config.json"""






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




											"""simple docstring"""





											pass




class 							__lowercase(							_UpperCamelCase	):
						lowerCAmelCase_		:				str=							"""config.json"""






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




											"""simple docstring"""





											pass




class 							__lowercase(							unittest.TestCase	):






						def 		lowerCAmelCase (       self)      ->	int:




											"""simple docstring"""





											with self.assertRaises(_SCREAMING_SNAKE_CASE):
																ConfigMixin.load_config('dummy_path')






						def 		lowerCAmelCase (       self)      ->	Any:




											"""simple docstring"""





											lowerCamelCase__					=SampleObject()
											lowerCamelCase__					=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
											lowerCamelCase__					=SampleObject(_name_or_path='lalala')
											lowerCamelCase__					=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
											lowerCamelCase__					=SampleObject(c=6)
											lowerCamelCase__					=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.
											lowerCamelCase__					=SampleObject(1     ,    c=6)
											lowerCamelCase__					=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 		lowerCAmelCase (       self)      ->	Tuple:




											"""simple docstring"""





											lowerCamelCase__					=SampleObject()
											lowerCamelCase__					=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(_SCREAMING_SNAKE_CASE)
																lowerCamelCase__					=SampleObject.from_config(SampleObject.load_config(_SCREAMING_SNAKE_CASE))
																lowerCamelCase__					=new_obj.config

											# unfreeze configs
											lowerCamelCase__					=dict(_SCREAMING_SNAKE_CASE)
											lowerCamelCase__					=dict(_SCREAMING_SNAKE_CASE)

											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 		lowerCAmelCase (       self)      ->	Tuple:




											"""simple docstring"""





											lowerCamelCase__					=logging.get_logger('diffusers.configuration_utils')
											# 30 for warning
											logger.setLevel(30)

											with CaptureLogger(_SCREAMING_SNAKE_CASE) as cap_logger:
																lowerCamelCase__					=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 		lowerCAmelCase (       self)      ->	Optional[int]:




											"""simple docstring"""





											lowerCamelCase__					=logging.get_logger('diffusers.configuration_utils')
											# 30 for warning
											logger.setLevel(30)

											with CaptureLogger(_SCREAMING_SNAKE_CASE) as cap_logger:
																lowerCamelCase__					=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 		lowerCAmelCase (       self)      ->	Optional[Any]:




											"""simple docstring"""





											lowerCamelCase__					=logging.get_logger('diffusers.configuration_utils')
											# 30 for warning
											logger.setLevel(30)

											with CaptureLogger(_SCREAMING_SNAKE_CASE) as cap_logger:
																lowerCamelCase__					=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 		lowerCAmelCase (       self)      ->	Any:




											"""simple docstring"""





											lowerCamelCase__					=logging.get_logger('diffusers.configuration_utils')
											# 30 for warning
											logger.setLevel(30)

											with CaptureLogger(_SCREAMING_SNAKE_CASE) as cap_logger:
																lowerCamelCase__					=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 		lowerCAmelCase (       self)      ->	Any:




											"""simple docstring"""





											lowerCamelCase__					=logging.get_logger('diffusers.configuration_utils')
											# 30 for warning
											logger.setLevel(30)

											with CaptureLogger(_SCREAMING_SNAKE_CASE) as cap_logger:
																lowerCamelCase__					=DDPMScheduler.from_pretrained(
																    'hf-internal-testing/tiny-stable-diffusion-torch'     ,    subfolder='scheduler'     ,    prediction_type='sample'     ,    beta_end=8     ,    )

											with CaptureLogger(_SCREAMING_SNAKE_CASE) as cap_logger_a:
																lowerCamelCase__					=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 		lowerCAmelCase (       self)      ->	Dict:




											"""simple docstring"""





											lowerCamelCase__					=logging.get_logger('diffusers.configuration_utils')
											# 30 for warning
											logger.setLevel(30)

											with CaptureLogger(_SCREAMING_SNAKE_CASE) as cap_logger:
																lowerCamelCase__					=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 		lowerCAmelCase (       self)      ->	Optional[int]:




											"""simple docstring"""





											lowerCamelCase__					=SampleObject()

											lowerCamelCase__					={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(_SCREAMING_SNAKE_CASE)

																# now loading it with SampleObject2 should put f into `_use_default_values`
																lowerCamelCase__					=SampleObjecta.from_config(_SCREAMING_SNAKE_CASE)

																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`
											lowerCamelCase__					=SampleObjecta.from_config(config.config)
											assert new_config.f == [5, 4]

											config.config._use_default_values.pop()
											lowerCamelCase__					=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]







"""simple docstring"""



import inspect

from diffusers.utils import is_flax_available
from diffusers.utils.testing_utils import require_flax


if is_flax_available():
						import jax




@require_flax
class 							__lowercase:






						def 		lowerCAmelCase (       self)      ->	str:




											"""simple docstring"""





											lowerCamelCase__					,  lowerCamelCase__					=self.prepare_init_args_and_inputs_for_common()

											lowerCamelCase__					=self.model_class(**_SCREAMING_SNAKE_CASE)
											lowerCamelCase__					=model.init(inputs_dict['prng_key']     ,    inputs_dict['sample'])
											jax.lax.stop_gradient(_SCREAMING_SNAKE_CASE)

											lowerCamelCase__					=model.apply(_SCREAMING_SNAKE_CASE     ,    inputs_dict['sample'])

											if isinstance(_SCREAMING_SNAKE_CASE     ,    _SCREAMING_SNAKE_CASE):
																lowerCamelCase__					=output.sample

											self.assertIsNotNone(_SCREAMING_SNAKE_CASE)
											lowerCamelCase__					=inputs_dict['sample'].shape
											self.assertEqual(output.shape     ,    _SCREAMING_SNAKE_CASE     ,    'Input and output shapes do not match')






						def 		lowerCAmelCase (       self)      ->	Optional[Any]:




											"""simple docstring"""





											lowerCamelCase__					,  lowerCamelCase__					=self.prepare_init_args_and_inputs_for_common()

											lowerCamelCase__					=16
											lowerCamelCase__					=(16, 32)

											lowerCamelCase__					=self.model_class(**_SCREAMING_SNAKE_CASE)
											lowerCamelCase__					=model.init(inputs_dict['prng_key']     ,    inputs_dict['sample'])
											jax.lax.stop_gradient(_SCREAMING_SNAKE_CASE)

											lowerCamelCase__					=model.apply(_SCREAMING_SNAKE_CASE     ,    inputs_dict['sample'])

											if isinstance(_SCREAMING_SNAKE_CASE     ,    _SCREAMING_SNAKE_CASE):
																lowerCamelCase__					=output.sample

											self.assertIsNotNone(_SCREAMING_SNAKE_CASE)
											lowerCamelCase__					=inputs_dict['sample'].shape
											self.assertEqual(output.shape     ,    _SCREAMING_SNAKE_CASE     ,    'Input and output shapes do not match')






						def 		lowerCAmelCase (       self)      ->	Optional[Any]:




											"""simple docstring"""





											lowerCamelCase__					='kwargs' in inspect.signature(self.model_class.__init__).parameters
											lowerCamelCase__					=len(self.model_class._deprecated_kwargs) > 0

											if has_kwarg_in_model_class and not has_deprecated_kwarg:
																raise ValueError(
																    F"{self.model_class} has `**kwargs` in its __init__ method but has not defined any deprecated kwargs"
																    ' under the `_deprecated_kwargs` class attribute. Make sure to either remove `**kwargs` if there are'
																    ' no deprecated arguments or add the deprecated argument with `_deprecated_kwargs ='
																    ' [<deprecated_argument>]`')

											if not has_kwarg_in_model_class and has_deprecated_kwarg:
																raise ValueError(
																    F"{self.model_class} doesn't have `**kwargs` in its __init__ method but has defined deprecated kwargs"
																    ' under the `_deprecated_kwargs` class attribute. Make sure to either add the `**kwargs` argument to'
																    F" {self.model_class}.__init__ if there are deprecated arguments or remove the deprecated argument"
																    ' from `_deprecated_kwargs = [<deprecated_argument>]`')