from dataclasses import dataclass
from enum import Enum
from typing import List, Optional, Union

import numpy as np
import PIL
from PIL import Image

from ...utils import BaseOutput, is_torch_available, is_transformers_available




@dataclass
class      lowercase_						(						UpperCamelCase_		):



	"""simple docstring"""





	UpperCAmelCase_						:      List[Any]     =       {
	    """sld_warmup_steps""": 15,
	    """sld_guidance_scale""": 20,
	    """sld_threshold""": 0.0,
	    """sld_momentum_scale""": 0.0,
	    """sld_mom_beta""": 0.0,
	}
	UpperCAmelCase_						:      List[Any]     =       {
	    """sld_warmup_steps""": 10,
	    """sld_guidance_scale""": 1000,
	    """sld_threshold""": 0.01,
	    """sld_momentum_scale""": 0.3,
	    """sld_mom_beta""": 0.4,
	}
	UpperCAmelCase_						:      Optional[Any]     =       {
	    """sld_warmup_steps""": 7,
	    """sld_guidance_scale""": 2000,
	    """sld_threshold""": 0.025,
	    """sld_momentum_scale""": 0.5,
	    """sld_mom_beta""": 0.7,
	}
	UpperCAmelCase_						:      str     =       {
	    """sld_warmup_steps""": 0,
	    """sld_guidance_scale""": 5000,
	    """sld_threshold""": 1.0,
	    """sld_momentum_scale""": 0.5,
	    """sld_mom_beta""": 0.7,
	}




@dataclass
class      lowercase_						(						UpperCamelCase_		):



	"""simple docstring"""





	UpperCAmelCase_						:      Union[List[PIL.Image.Image], np.ndarray]
	UpperCAmelCase_						:      Optional[List[bool]]
	UpperCAmelCase_						:      Optional[Union[List[PIL.Image.Image], np.ndarray]]
	UpperCAmelCase_						:      Optional[str]


if is_transformers_available() and is_torch_available():
	from .pipeline_stable_diffusion_safe import StableDiffusionPipelineSafe
	from .safety_checker import SafeStableDiffusionSafetyChecker




from __future__ import annotations

from enum import Enum




class      lowercase_						(						UpperCamelCase_		):



	"""simple docstring"""





	UpperCAmelCase_						:      str     =       24
	UpperCAmelCase_						:      Dict     =       21
	UpperCAmelCase_						:      List[str]     =       18
	UpperCAmelCase_						:      Optional[int]     =       15
	UpperCAmelCase_						:      str     =       12
	UpperCAmelCase_						:      Union[str, Any]     =       9
	UpperCAmelCase_						:      List[Any]     =       6
	UpperCAmelCase_						:      Any     =       3
	UpperCAmelCase_						:      List[str]     =       2
	UpperCAmelCase_						:      Any     =       1
	UpperCAmelCase_						:      Any     =       -1
	UpperCAmelCase_						:      Any     =       -2
	UpperCAmelCase_						:      Optional[int]     =       -3
	UpperCAmelCase_						:      List[Any]     =       -6
	UpperCAmelCase_						:      Optional[int]     =       -9
	UpperCAmelCase_						:      str     =       -12
	UpperCAmelCase_						:      Union[str, Any]     =       -15
	UpperCAmelCase_						:      List[str]     =       -18
	UpperCAmelCase_						:      str     =       -21
	UpperCAmelCase_						:      Dict     =       -24




class      lowercase_						(						UpperCamelCase_		):



	"""simple docstring"""





	UpperCAmelCase_						:      List[str]     =       8
	UpperCAmelCase_						:      Union[str, Any]     =       7
	UpperCAmelCase_						:      int     =       6
	UpperCAmelCase_						:      int     =       5
	UpperCAmelCase_						:      Any     =       4
	UpperCAmelCase_						:      Dict     =       3
	UpperCAmelCase_						:      Tuple     =       2
	UpperCAmelCase_						:      Any     =       1

def      SCREAMING_SNAKE_CASE_  (		snake_case__     ,						snake_case__     ,						snake_case__     ,						)  ->			float:
							if isinstance(snake_case__     ,						snake_case__							):
														lowerCAmelCase				=	SIUnit[known_prefix.lower()]
							if isinstance(snake_case__     ,						snake_case__							):
														lowerCAmelCase				=	SIUnit[unknown_prefix.lower()]
							lowerCAmelCase				=	known_amount * (
							    1_0 ** (known_prefix.value - unknown_prefix.value)
							)
							return unknown_amount

def      SCREAMING_SNAKE_CASE_  (		snake_case__     ,						snake_case__     ,						snake_case__     ,						)  ->			float:
							if isinstance(snake_case__     ,						snake_case__							):
														lowerCAmelCase				=	BinaryUnit[known_prefix.lower()]
							if isinstance(snake_case__     ,						snake_case__							):
														lowerCAmelCase				=	BinaryUnit[unknown_prefix.lower()]
							lowerCAmelCase				=	known_amount * (
							    2 ** ((known_prefix.value - unknown_prefix.value) * 1_0)
							)
							return unknown_amount


if __name__ == "__main__":
	import doctest

	doctest.testmod()



