





def  __UpperCamelCase   (     a = 998001)			->int:

					# fetches the next number
					for number in range(n - 1,  9999,  -1):
										lowerCamelCase__      =							str(a)

										# checks whether 'str_number' is a palindrome.
										if str_number == str_number[::-1]:
															lowerCamelCase__      =							999

															# if 'number' is a product of two 3-digit numbers
															# then number is the answer otherwise fetch next number.
															while divisor != 99:
																				if (number % divisor == 0) and (len(str(number // divisor)) == 3.0):
																									return number
																				divisor -= 1
					raise ValueError("That number is larger than our acceptable range.")


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








import unittest

import numpy as np
import torch

from diffusers import DDPMPipeline, DDPMScheduler, UNetaDModel
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu, slow, torch_device


enable_full_determinism()

class SCREAMING_SNAKE_CASE_			(       unittest.TestCase ):





					"""simple docstring"""


					@property
					def        __magic_name__			(			self						):
										torch.manual_seed(0						)
										lowerCamelCase__      =							UNetaDModel(
										    block_out_channels=(32, 64)						,	layers_per_block=2						,	sample_size=32						,	in_channels=3						,	out_channels=3						,	down_block_types=("DownBlock2D", "AttnDownBlock2D")						,	up_block_types=("AttnUpBlock2D", "UpBlock2D")						,	)
										return model





					def        __magic_name__			(			self						):
										lowerCamelCase__      =							"cpu"
										lowerCamelCase__      =							self.dummy_uncond_unet
										lowerCamelCase__      =							DDPMScheduler()

										lowerCamelCase__      =							DDPMPipeline(unet=_lowerCAmelCase						,	scheduler=_lowerCAmelCase						)
										ddpm.to(_lowerCAmelCase						)
										ddpm.set_progress_bar_config(disable=_lowerCAmelCase						)

										lowerCamelCase__      =							torch.Generator(device=_lowerCAmelCase						).manual_seed(0						)
										lowerCamelCase__      =							ddpm(generator=_lowerCAmelCase						,	num_inference_steps=2						,	output_type="numpy"						).images

										lowerCamelCase__      =							torch.Generator(device=_lowerCAmelCase						).manual_seed(0						)
										lowerCamelCase__      =							ddpm(generator=_lowerCAmelCase						,	num_inference_steps=2						,	output_type="numpy"						,	return_dict=_lowerCAmelCase						)[0]

										lowerCamelCase__      =							image[0, -3:, -3:, -1]
										lowerCamelCase__      =							image_from_tuple[0, -3:, -3:, -1]

										assert image.shape == (1, 32, 32, 3)
										lowerCamelCase__      =							np.array(
										    [9.9_56E-01, 5.7_85E-01, 4.6_75E-01, 9.9_30E-01, 0.0, 1.000, 1.1_99E-03, 2.6_48E-04, 5.1_01E-04]						)

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






					def        __magic_name__			(			self						):
										lowerCamelCase__      =							self.dummy_uncond_unet
										lowerCamelCase__      =							DDPMScheduler(prediction_type="sample"						)

										lowerCamelCase__      =							DDPMPipeline(unet=_lowerCAmelCase						,	scheduler=_lowerCAmelCase						)
										ddpm.to(_lowerCAmelCase						)
										ddpm.set_progress_bar_config(disable=_lowerCAmelCase						)

										lowerCamelCase__      =							torch.manual_seed(0						)
										lowerCamelCase__      =							ddpm(generator=_lowerCAmelCase						,	num_inference_steps=2						,	output_type="numpy"						).images

										lowerCamelCase__      =							torch.manual_seed(0						)
										lowerCamelCase__      =							ddpm(generator=_lowerCAmelCase						,	num_inference_steps=2						,	output_type="numpy"						)[0]

										lowerCamelCase__      =							image[0, -3:, -3:, -1]
										lowerCamelCase__      =							image_eps[0, -3:, -3:, -1]

										assert image.shape == (1, 32, 32, 3)
										lowerCamelCase__      =							1E-2 if torch_device != "mps" else 3E-2
										assert np.abs(image_slice.flatten() - image_eps_slice.flatten()						).max() < tolerance

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





					"""simple docstring"""


					def        __magic_name__			(			self						):
										lowerCamelCase__      =							"google/ddpm-cifar10-32"

										lowerCamelCase__      =							UNetaDModel.from_pretrained(_lowerCAmelCase						)
										lowerCamelCase__      =							DDPMScheduler.from_pretrained(_lowerCAmelCase						)

										lowerCamelCase__      =							DDPMPipeline(unet=_lowerCAmelCase						,	scheduler=_lowerCAmelCase						)
										ddpm.to(_lowerCAmelCase						)
										ddpm.set_progress_bar_config(disable=_lowerCAmelCase						)

										lowerCamelCase__      =							torch.manual_seed(0						)
										lowerCamelCase__      =							ddpm(generator=_lowerCAmelCase						,	output_type="numpy"						).images

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

										assert image.shape == (1, 32, 32, 3)
										lowerCamelCase__      =							np.array([0.4_200, 0.3_588, 0.1_939, 0.3_847, 0.3_382, 0.2_647, 0.4_155, 0.3_582, 0.3_385]						)
										assert np.abs(image_slice.flatten() - expected_slice						).max() < 1E-2

