

'''simple docstring'''






import gc
import unittest

import numpy as np
import torch

from diffusers import StableDiffusionKDiffusionPipeline
from diffusers.utils import slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu


enable_full_determinism()






@slow
@require_torch_gpu
class      lowercase_      (unittest.TestCase ):




  """simple docstring"""




  def    SCREAMING_SNAKE_CASE ( self  :	str     ):
   # clean up the VRAM after each test
   super().tearDown()
   gc.collect()
   torch.cuda.empty_cache()






  def    SCREAMING_SNAKE_CASE ( self  :	Optional[int]     ):
   __lowercase				    =					StableDiffusionKDiffusionPipeline.from_pretrained('''CompVis/stable-diffusion-v1-4'''     )
   __lowercase				    =					sd_pipe.to(lowercase__     )
   sd_pipe.set_progress_bar_config(disable=lowercase__     )

   sd_pipe.set_scheduler('''sample_euler'''     )

   __lowercase				    =					'''A painting of a squirrel eating a burger'''
   __lowercase				    =					torch.manual_seed(0     )
   __lowercase				    =					sd_pipe([prompt]   ,generator=lowercase__   ,guidance_scale=9.0   ,num_inference_steps=2_0   ,output_type='''np'''     )

   __lowercase				    =					output.images

   __lowercase				    =					image[0, -3:, -3:, -1]

   assert image.shape == (1, 5_1_2, 5_1_2, 3)
   __lowercase				    =					np.array([0.0_4_4_7, 0.0_4_9_2, 0.0_4_6_8, 0.0_4_0_8, 0.0_3_8_3, 0.0_4_0_8, 0.0_3_5_4, 0.0_3_8_0, 0.0_3_3_9]     )

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






  def    SCREAMING_SNAKE_CASE ( self  :	Union[str, Any]     ):
   __lowercase				    =					StableDiffusionKDiffusionPipeline.from_pretrained('''stabilityai/stable-diffusion-2-1-base'''     )
   __lowercase				    =					sd_pipe.to(lowercase__     )
   sd_pipe.set_progress_bar_config(disable=lowercase__     )

   sd_pipe.set_scheduler('''sample_euler'''     )

   __lowercase				    =					'''A painting of a squirrel eating a burger'''
   __lowercase				    =					torch.manual_seed(0     )
   __lowercase				    =					sd_pipe([prompt]   ,generator=lowercase__   ,guidance_scale=9.0   ,num_inference_steps=2_0   ,output_type='''np'''     )

   __lowercase				    =					output.images

   __lowercase				    =					image[0, -3:, -3:, -1]

   assert image.shape == (1, 5_1_2, 5_1_2, 3)
   __lowercase				    =					np.array([0.1_2_3_7, 0.1_3_2_0, 0.1_4_3_8, 0.1_3_5_9, 0.1_3_9_0, 0.1_1_3_2, 0.1_2_7_7, 0.1_1_7_5, 0.1_1_1_2]     )

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






  def    SCREAMING_SNAKE_CASE ( self  :	List[Any]     ):
   __lowercase				    =					StableDiffusionKDiffusionPipeline.from_pretrained('''stabilityai/stable-diffusion-2-1-base'''     )
   __lowercase				    =					sd_pipe.to(lowercase__     )
   sd_pipe.set_progress_bar_config(disable=lowercase__     )

   sd_pipe.set_scheduler('''sample_dpmpp_2m'''     )

   __lowercase				    =					'''A painting of a squirrel eating a burger'''
   __lowercase				    =					torch.manual_seed(0     )
   __lowercase				    =					sd_pipe(
       [prompt]   ,generator=lowercase__   ,guidance_scale=7.5   ,num_inference_steps=1_5   ,output_type='''np'''   ,use_karras_sigmas=lowercase__   ,)

   __lowercase				    =					output.images

   __lowercase				    =					image[0, -3:, -3:, -1]

   assert image.shape == (1, 5_1_2, 5_1_2, 3)
   __lowercase				    =					np.array(
       [0.1_1_3_8_1_6_8_9, 0.1_2_1_1_2_9_2_1, 0.1_3_8_9_4_5_7, 0.1_2_5_4_9_6_0_6, 0.1_2_4_4_9_6_4, 0.1_0_8_3_1_5_1_7, 0.1_1_5_6_2_8_6_6, 0.1_0_8_6_7_8_1_6, 0.1_0_4_9_9_0_4_8]     )

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



"""simple docstring"""




from itertools import product



def     __magic_name__		(					UpperCamelCase     :		int							,		UpperCamelCase     :		int     )     ->						list[int]:
    a__		=			sides_number
    a__		=			max_face_number * dice_number
    a__		=			[0] * (max_total + 1)

    a__		=			1
    a__		=			range(UpperCamelCase							,		max_face_number + 1     )
    for dice_numbers in product(UpperCamelCase							,		repeat=UpperCamelCase     ):
        a__		=			sum(UpperCamelCase     )
        totals_frequencies[total] += 1

    return totals_frequencies



def     __magic_name__		(					)     ->						float:
    a__		=			total_frequency_distribution(
        sides_number=4							,		dice_number=9     )
    a__		=			total_frequency_distribution(
        sides_number=6							,		dice_number=6     )

    a__		=			0
    a__		=			9
    a__		=			4 * 9
    a__		=			6
    for peter_total in range(UpperCamelCase							,		max_peter_total + 1     ):
        peter_wins_count += peter_totals_frequencies[peter_total] * sum(
            colin_totals_frequencies[min_colin_total:peter_total]     )

    a__		=			(4**9) * (6**6)
    a__		=			peter_wins_count / total_games_number

    a__		=			round(UpperCamelCase							,		ndigits=7     )

    return rounded_peter_win_probability


if __name__ == "__main__":
    print(F'''{solution() = }''')


