
'''simple docstring'''
import gc
import unittest

import numpy as np
import torch
from transformers import CLIPTextConfig, CLIPTextModel, CLIPTokenizer

from diffusers import (
    AutoencoderKL,
    DDIMParallelScheduler,
    DDPMParallelScheduler,
    StableDiffusionParadigmsPipeline,
    UNetaDConditionModel,
)
from diffusers.utils import slow, torch_device
from diffusers.utils.testing_utils import (
    enable_full_determinism,
    require_torch_gpu,
)

from ..pipeline_params import TEXT_TO_IMAGE_BATCH_PARAMS, TEXT_TO_IMAGE_IMAGE_PARAMS, TEXT_TO_IMAGE_PARAMS
from ..test_pipelines_common import PipelineLatentTesterMixin, PipelineTesterMixin


enable_full_determinism()







class 			__A					(			_snake_case     ,    _snake_case     ,    unittest.TestCase      ):
 lowerCamelCase												=StableDiffusionParadigmsPipeline
 lowerCamelCase												=TEXT_TO_IMAGE_PARAMS
 lowerCamelCase												=TEXT_TO_IMAGE_BATCH_PARAMS
 lowerCamelCase												=TEXT_TO_IMAGE_IMAGE_PARAMS
 lowerCamelCase												=TEXT_TO_IMAGE_IMAGE_PARAMS
 def 		lowercase_( self      :     Optional[Any]							):



   """simple docstring"""





   torch.manual_seed(0							)
   __A		:  Optional[int]       				=		UNetaDConditionModel(
       block_out_channels=(32, 64)					, layers_per_block=2					, sample_size=32					, in_channels=4					, out_channels=4					, down_block_types=("""DownBlock2D""", """CrossAttnDownBlock2D""")					, up_block_types=("""CrossAttnUpBlock2D""", """UpBlock2D""")					, cross_attention_dim=32					, attention_head_dim=(2, 4)					, use_linear_projection=lowercase__					, )
   __A		:  str       				=		DDIMParallelScheduler(
       beta_start=0.00_085					, beta_end=0.012					, beta_schedule="""scaled_linear"""					, clip_sample=lowercase__					, set_alpha_to_one=lowercase__					, )
   torch.manual_seed(0							)
   __A		:  Tuple       				=		AutoencoderKL(
       block_out_channels=[32, 64]					, in_channels=3					, out_channels=3					, down_block_types=["""DownEncoderBlock2D""", """DownEncoderBlock2D"""]					, up_block_types=["""UpDecoderBlock2D""", """UpDecoderBlock2D"""]					, latent_channels=4					, sample_size=1_28					, )
   torch.manual_seed(0							)
   __A		:  Optional[Any]       				=		CLIPTextConfig(
       bos_token_id=0					, eos_token_id=2					, hidden_size=32					, intermediate_size=37					, layer_norm_eps=1e-0_5					, num_attention_heads=4					, num_hidden_layers=5					, pad_token_id=1					, vocab_size=10_00					, hidden_act="""gelu"""					, projection_dim=5_12					, )
   __A		:  Optional[Any]       				=		CLIPTextModel(lowercase__							)
   __A		:  Union[str, Any]       				=		CLIPTokenizer.from_pretrained("""hf-internal-testing/tiny-random-clip"""							)

   __A		:  Any       				=		{
       """unet""": unet,
       """scheduler""": scheduler,
       """vae""": vae,
       """text_encoder""": text_encoder,
       """tokenizer""": tokenizer,
       """safety_checker""": None,
       """feature_extractor""": None,
   }
   return components
 def 		lowercase_( self      :     Tuple					, lowerCamelCase      :     Tuple					, lowerCamelCase      :     str=0							):



   """simple docstring"""





   if str(lowercase__							).startswith("""mps"""							):
     __A		:  int       				=		torch.manual_seed(lowercase__							)
   else:
     __A		:  List[Any]       				=		torch.Generator(device=lowercase__							).manual_seed(lowercase__							)
   __A		:  Optional[Any]       				=		{
       """prompt""": """a photograph of an astronaut riding a horse""",
       """generator""": generator,
       """num_inference_steps""": 10,
       """guidance_scale""": 6.0,
       """output_type""": """numpy""",
       """parallel""": 3,
       """debug""": True,
   }
   return inputs
 def 		lowercase_( self      :     Optional[Any]							):



   """simple docstring"""





   __A		:  Any       				=		"""cpu"""  # ensure determinism for the device-dependent torch.Generator
   __A		:  List[Any]       				=		self.get_dummy_components()
   __A		:  Dict       				=		StableDiffusionParadigmsPipeline(**lowercase__							)
   __A		:  Any       				=		sd_pipe.to(lowercase__							)
   sd_pipe.set_progress_bar_config(disable=lowercase__							)

   __A		:  str       				=		self.get_dummy_inputs(lowercase__							)
   __A		:  List[Any]       				=		sd_pipe(**lowercase__							).images
   __A		:  Optional[Any]       				=		image[0, -3:, -3:, -1]
   assert image.shape == (1, 64, 64, 3)

   __A		:  List[Any]       				=		np.array([0.4_773, 0.5_417, 0.4_723, 0.4_925, 0.5_631, 0.4_752, 0.5_240, 0.4_935, 0.5_023]							)

   assert np.abs(image_slice.flatten() - expected_slice							).max() < 1e-2
 def 		lowercase_( self      :     List[str]							):



   """simple docstring"""





   __A		:  Dict       				=		"""cpu"""  # ensure determinism for the device-dependent torch.Generator
   __A		:  List[str]       				=		self.get_dummy_components()
   torch.manual_seed(0							)
   __A		:  Dict       				=		DDPMParallelScheduler()
   torch.manual_seed(0							)
   __A		:  str       				=		StableDiffusionParadigmsPipeline(**lowercase__							)
   __A		:  int       				=		sd_pipe.to(lowercase__							)
   sd_pipe.set_progress_bar_config(disable=lowercase__							)

   __A		:  List[Any]       				=		self.get_dummy_inputs(lowercase__							)
   __A		:  Optional[Any]       				=		sd_pipe(**lowercase__							).images
   __A		:  List[str]       				=		image[0, -3:, -3:, -1]
   assert image.shape == (1, 64, 64, 3)

   __A		:  List[str]       				=		np.array([0.3_573, 0.4_420, 0.4_960, 0.4_799, 0.3_796, 0.3_879, 0.4_819, 0.4_365, 0.4_468]							)

   assert np.abs(image_slice.flatten() - expected_slice							).max() < 1e-2
 def 		lowercase_( self      :     Optional[Any]							):



   """simple docstring"""





   super().test_inference_batch_consistent(batch_sizes=[1, 2]							)
 def 		lowercase_( self      :     Union[str, Any]							):



   """simple docstring"""





   super().test_inference_batch_single_identical(batch_size=2					, expected_max_diff=3e-3							)






 def 		lowercase_( self      :     Optional[int]							):



   """simple docstring"""





   __A		:  Dict       				=		"""cpu"""  # ensure determinism for the device-dependent torch.Generator
   __A		:  Optional[Any]       				=		self.get_dummy_components()
   __A		:  Any       				=		StableDiffusionParadigmsPipeline(**lowercase__							)
   __A		:  Optional[Any]       				=		sd_pipe.to(lowercase__							)
   sd_pipe.set_progress_bar_config(disable=lowercase__							)

   __A		:  List[Any]       				=		self.get_dummy_inputs(lowercase__							)
   __A		:  List[Any]       				=		"""french fries"""
   __A		:  int       				=		sd_pipe(**lowercase__					, negative_prompt=lowercase__							)
   __A		:  str       				=		output.images
   __A		:  Union[str, Any]       				=		image[0, -3:, -3:, -1]

   assert image.shape == (1, 64, 64, 3)

   __A		:  List[Any]       				=		np.array([0.4_771, 0.5_420, 0.4_683, 0.4_918, 0.5_636, 0.4_725, 0.5_230, 0.4_923, 0.5_015]							)

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







@slow
@require_torch_gpu
class 			__A					(			unittest.TestCase      ):
 def 		lowercase_( self      :     List[Any]							):



   """simple docstring"""





   super().tearDown()
   gc.collect()
   torch.cuda.empty_cache()
 def 		lowercase_( self      :     Dict					, lowerCamelCase      :     str=0							):



   """simple docstring"""





   __A		:  Optional[int]       				=		torch.Generator(device=lowercase__							).manual_seed(lowercase__							)
   __A		:  Tuple       				=		{
       """prompt""": """a photograph of an astronaut riding a horse""",
       """generator""": generator,
       """num_inference_steps""": 10,
       """guidance_scale""": 7.5,
       """output_type""": """numpy""",
       """parallel""": 3,
       """debug""": True,
   }
   return inputs






 def 		lowercase_( self      :     Union[str, Any]							):



   """simple docstring"""





   __A		:  Any       				=		"""stabilityai/stable-diffusion-2-base"""
   __A		:  List[Any]       				=		DDIMParallelScheduler.from_pretrained(lowercase__					, subfolder="""scheduler"""							)
   __A		:  str       				=		StableDiffusionParadigmsPipeline.from_pretrained(lowercase__					, scheduler=lowercase__					, safety_checker=lowercase__							)
   pipe.to(lowercase__							)
   pipe.set_progress_bar_config(disable=lowercase__							)
   pipe.enable_attention_slicing()

   __A		:  Dict       				=		self.get_inputs()
   __A		:  Optional[Any]       				=		pipe(**lowercase__							).images
   __A		:  Optional[int]       				=		image[0, -3:, -3:, -1].flatten()

   assert image.shape == (1, 5_12, 5_12, 3)

   __A		:  List[Any]       				=		np.array([0.9_622, 0.9_602, 0.9_748, 0.9_591, 0.9_630, 0.9_691, 0.9_661, 0.9_631, 0.9_741]							)

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








from __future__ import annotations

# Define the Gravitational Constant G and the function
__magic_name__       =     6.6743E-11  # unit of G : m^3 * kg^-1 * s^-2





def 		__snake_case						(    _UpperCAmelCase       ,			_UpperCAmelCase       ,			_UpperCAmelCase       ,			_UpperCAmelCase				):
					"""simple docstring"""






					lowercase						   =       mass_a * mass_a

					if (force, mass_a, mass_a, distance).count(0				) != 1:
										raise ValueError('One and only one argument must be 0'				)
					if force < 0:
										raise ValueError('Gravitational force can not be negative'				)
					if distance < 0:
										raise ValueError('Distance can not be negative'				)
					if mass_a < 0 or mass_a < 0:
										raise ValueError('Mass can not be negative'				)
					if force == 0:
										lowercase						   =       GRAVITATIONAL_CONSTANT * product_of_mass / (distance**2)
										return {"force": force}
					elif mass_a == 0:
										lowercase						   =       (force) * (distance**2) / (GRAVITATIONAL_CONSTANT * mass_a)
										return {"mass_1": mass_a}
					elif mass_a == 0:
										lowercase						   =       (force) * (distance**2) / (GRAVITATIONAL_CONSTANT * mass_a)
										return {"mass_2": mass_a}
					elif distance == 0:
										lowercase						   =       (GRAVITATIONAL_CONSTANT * product_of_mass / (force)) ** 0.5
										return {"distance": distance}
					raise ValueError('One and only one argument must be 0'				)


# Run doctest
if __name__ == "__main__":
		import doctest

		doctest.testmod()






