





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 					lowerCAmelCase							(   lowercase_					):
  __lowerCamelCase		=			'config.json'







  @register_to_config
  def __init__(			self  :Dict    ,							_lowercase  :Any=2    ,							_lowercase  :List[str]=5    ,							_lowercase  :List[Any]=(2, 5)    ,							_lowercase  :List[Any]="for diffusion"    ,							_lowercase  :Union[str, Any]=[1, 3]    ,							):






     '''simple docstring'''





     pass





class 					lowerCAmelCase							(   lowercase_					):
  __lowerCamelCase		=			'config.json'







  @register_to_config
  def __init__(			self  :List[str]    ,							_lowercase  :List[str]=2    ,							_lowercase  :Optional[int]=5    ,							_lowercase  :Dict=(2, 5)    ,							_lowercase  :Optional[int]="for diffusion"    ,							_lowercase  :List[Any]=[1, 3]    ,							):






     '''simple docstring'''





     pass





class 					lowerCAmelCase							(   lowercase_					):
  __lowerCamelCase		=			'config.json'







  @register_to_config
  def __init__(			self  :List[Any]    ,							_lowercase  :str=2    ,							_lowercase  :Union[str, Any]=5    ,							_lowercase  :Dict=(2, 5)    ,							_lowercase  :Union[str, Any]="for diffusion"    ,							_lowercase  :Optional[int]=[1, 3]    ,							_lowercase  :int=[1, 3]    ,							):






     '''simple docstring'''





     pass





class 					lowerCAmelCase							(   lowercase_					):
  __lowerCamelCase		=			'config.json'







  @register_to_config
  def __init__(			self  :Optional[int]    ,							_lowercase  :Optional[Any]=2    ,							_lowercase  :List[str]=5    ,							_lowercase  :str=(2, 5)    ,							_lowercase  :Union[str, Any]="for diffusion"    ,							_lowercase  :str=[1, 5]    ,							_lowercase  :Dict=[5, 4]    ,							):






     '''simple docstring'''





     pass





class 					lowerCAmelCase							(   unittest.TestCase					):







  def   UpperCAmelCase     (			self  :Optional[Any]					):






     '''simple docstring'''





     with self.assertRaises(_lowercase					):
        ConfigMixin.load_config("dummy_path"					)







  def   UpperCAmelCase     (			self  :Optional[Any]					):






     '''simple docstring'''





     lowercase__    =  SampleObject()
     lowercase__    =  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
     lowercase__    =  SampleObject(_name_or_path="lalala"					)
     lowercase__    =  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
     lowercase__    =  SampleObject(c=6					)
     lowercase__    =  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.
     lowercase__    =  SampleObject(1    ,							c=6					)
     lowercase__    =  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   UpperCAmelCase     (			self  :List[str]					):






     '''simple docstring'''





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

     # unfreeze configs
     lowercase__    =  dict(_lowercase					)
     lowercase__    =  dict(_lowercase					)

     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   UpperCAmelCase     (			self  :Optional[int]					):






     '''simple docstring'''





     lowercase__    =  logging.get_logger("diffusers.configuration_utils"					)
     # 30 for warning
     logger.setLevel(30					)

     with CaptureLogger(_lowercase					) as cap_logger:
        lowercase__    =  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   UpperCAmelCase     (			self  :Union[str, Any]					):






     '''simple docstring'''





     lowercase__    =  logging.get_logger("diffusers.configuration_utils"					)
     # 30 for warning
     logger.setLevel(30					)

     with CaptureLogger(_lowercase					) as cap_logger:
        lowercase__    =  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   UpperCAmelCase     (			self  :Optional[int]					):






     '''simple docstring'''





     lowercase__    =  logging.get_logger("diffusers.configuration_utils"					)
     # 30 for warning
     logger.setLevel(30					)

     with CaptureLogger(_lowercase					) as cap_logger:
        lowercase__    =  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   UpperCAmelCase     (			self  :str					):






     '''simple docstring'''





     lowercase__    =  logging.get_logger("diffusers.configuration_utils"					)
     # 30 for warning
     logger.setLevel(30					)

     with CaptureLogger(_lowercase					) as cap_logger:
        lowercase__    =  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   UpperCAmelCase     (			self  :Dict					):






     '''simple docstring'''





     lowercase__    =  logging.get_logger("diffusers.configuration_utils"					)
     # 30 for warning
     logger.setLevel(30					)

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

     with CaptureLogger(_lowercase					) as cap_logger_a:
        lowercase__    =  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   UpperCAmelCase     (			self  :List[Any]					):






     '''simple docstring'''





     lowercase__    =  logging.get_logger("diffusers.configuration_utils"					)
     # 30 for warning
     logger.setLevel(30					)

     with CaptureLogger(_lowercase					) as cap_logger:
        lowercase__    =  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   UpperCAmelCase     (			self  :Optional[Any]					):






     '''simple docstring'''





     lowercase__    =  SampleObject()

     lowercase__    =  {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(_lowercase					)

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

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

     config.config._use_default_values.pop()
     lowercase__    =  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 typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available, is_vision_available


_snake_case				= {"""configuration_bit""": ["""BIT_PRETRAINED_CONFIG_ARCHIVE_MAP""", """BitConfig""", """BitOnnxConfig"""]}

try:
  if not is_torch_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  pass
else:
  _snake_case				= [
      """BIT_PRETRAINED_MODEL_ARCHIVE_LIST""",
      """BitForImageClassification""",
      """BitModel""",
      """BitPreTrainedModel""",
      """BitBackbone""",
  ]


try:
  if not is_vision_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  pass
else:
  _snake_case				= ["""BitImageProcessor"""]


if TYPE_CHECKING:
  from .configuration_bit import BIT_PRETRAINED_CONFIG_ARCHIVE_MAP, BitConfig, BitOnnxConfig

  try:
    if not is_torch_available():
      raise OptionalDependencyNotAvailable()
  except OptionalDependencyNotAvailable:
    pass
  else:
    from .modeling_bit import (
        BIT_PRETRAINED_MODEL_ARCHIVE_LIST,
        BitBackbone,
        BitForImageClassification,
        BitModel,
        BitPreTrainedModel,
    )

  try:
    if not is_vision_available():
      raise OptionalDependencyNotAvailable()
  except OptionalDependencyNotAvailable:
    pass
  else:
    from .image_processing_bit import BitImageProcessor

else:
  import sys

  _snake_case				= _LazyModule(__name__, globals()["""__file__"""], _import_structure)






