"""simple docstring"""
import unittest

import numpy as np

from transformers.testing_utils import require_torch, require_vision
from transformers.utils import is_torch_available, is_vision_available

from ...test_image_processing_common import ImageProcessingSavingTestMixin


if is_torch_available():
					import torch

if is_vision_available():
					from PIL import Image

					from transformers import ChineseCLIPImageProcessor



class   lowerCAmelCase_    (			unittest.TestCase					):



				"""simple docstring"""

				def __init__(				self		,    lowerCAmelCase		,    lowerCAmelCase=7		,    lowerCAmelCase=3		,    lowerCAmelCase=18		,    lowerCAmelCase=30		,    lowerCAmelCase=4_00		,    lowerCAmelCase=True		,    lowerCAmelCase=None		,    lowerCAmelCase=True		,    lowerCAmelCase=None		,    lowerCAmelCase=True		,    lowerCAmelCase=[0.48_14_54_66, 0.4_57_82_75, 0.40_82_10_73]		,    lowerCAmelCase=[0.26_86_29_54, 0.26_13_02_58, 0.27_57_77_11]		,    lowerCAmelCase=True		,    ):






										"""simple docstring"""

										snake_case								=			size if size is not None else {'height': 2_24, 'width': 2_24}
										snake_case								=			crop_size if crop_size is not None else {'height': 18, 'width': 18}
										snake_case								=			parent
										snake_case								=			batch_size
										snake_case								=			num_channels
										snake_case								=			image_size
										snake_case								=			min_resolution
										snake_case								=			max_resolution
										snake_case								=			do_resize
										snake_case								=			size
										snake_case								=			do_center_crop
										snake_case								=			crop_size
										snake_case								=			do_normalize
										snake_case								=			image_mean
										snake_case								=			image_std
										snake_case								=			do_convert_rgb

				def 		snake_case (				self    ):






										"""simple docstring"""

										return {
										    "do_resize": self.do_resize,
										    "size": self.size,
										    "do_center_crop": self.do_center_crop,
										    "crop_size": self.crop_size,
										    "do_normalize": self.do_normalize,
										    "image_mean": self.image_mean,
										    "image_std": self.image_std,
										    "do_convert_rgb": self.do_convert_rgb,
										}

				def 		snake_case (				self		,    lowerCAmelCase=False		,    lowerCAmelCase=False		,    lowerCAmelCase=False    ):






										"""simple docstring"""

										assert not (numpify and torchify), "You cannot specify both numpy and PyTorch tensors at the same time"

										if equal_resolution:
																snake_case								=			[]
																for i in range(self.batch_size    ):
																						image_inputs.append(
																						    np.random.randint(
																						        2_55		,    size=(self.num_channels, self.max_resolution, self.max_resolution)		,    dtype=np.uinta    )    )
										else:
																snake_case								=			[]
																for i in range(self.batch_size    ):
																						snake_case					,snake_case								=			np.random.choice(np.arange(self.min_resolution		,    self.max_resolution    )		,    2    )
																						image_inputs.append(np.random.randint(2_55		,    size=(self.num_channels, width, height)		,    dtype=np.uinta    )    )

										if not numpify and not torchify:
																# PIL expects the channel dimension as last dimension
																snake_case								=			[Image.fromarray(np.moveaxis(lowerCAmelCase		,    0		,    -1    )    ) for x in image_inputs]

										if torchify:
																snake_case								=			[torch.from_numpy(lowerCAmelCase    ) for x in image_inputs]

										return image_inputs





@require_torch
@require_vision
class   lowerCAmelCase_    (			lowerCAmelCase     ,    unittest.TestCase					):



				"""simple docstring"""
				_lowerCAmelCase     :    int			  =						ChineseCLIPImageProcessor if is_vision_available() else None

				def 		snake_case (				self    ):






										"""simple docstring"""

										snake_case								=			ChineseCLIPImageProcessingTester(self		,    do_center_crop=lowerCAmelCase    )

				@property
				def 		snake_case (				self    ):






										"""simple docstring"""

										return self.image_processor_tester.prepare_image_processor_dict()

				def 		snake_case (				self    ):






										"""simple docstring"""

										snake_case								=			self.image_processing_class(**self.image_processor_dict    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'do_resize'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'size'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'do_center_crop'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'center_crop'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'do_normalize'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'image_mean'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'image_std'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'do_convert_rgb'    )    )

				def 		snake_case (				self    ):






										"""simple docstring"""

										snake_case								=			self.image_processing_class.from_dict(self.image_processor_dict    )
										self.assertEqual(image_processor.size		,    {'height': 2_24, 'width': 2_24}    )
										self.assertEqual(image_processor.crop_size		,    {'height': 18, 'width': 18}    )

										snake_case								=			self.image_processing_class.from_dict(self.image_processor_dict		,    size=42		,    crop_size=84    )
										self.assertEqual(image_processor.size		,    {'shortest_edge': 42}    )
										self.assertEqual(image_processor.crop_size		,    {'height': 84, 'width': 84}    )

				def 		snake_case (				self    ):






										"""simple docstring"""

										pass

				def 		snake_case (				self    ):






										"""simple docstring"""

										snake_case								=			self.image_processing_class(**self.image_processor_dict    )
										# create random PIL images
										snake_case								=			self.image_processor_tester.prepare_inputs(equal_resolution=lowerCAmelCase    )
										for image in image_inputs:
																self.assertIsInstance(lowerCAmelCase		,    Image.Image    )

										# Test not batched input
										snake_case								=			image_processing(image_inputs[0]		,    return_tensors='pt'    ).pixel_values
										self.assertEqual(
										    encoded_images.shape		,    (
										        1,
										        self.image_processor_tester.num_channels,
										        self.image_processor_tester.crop_size['height'],
										        self.image_processor_tester.crop_size['width'],
										    )		,    )

										# Test batched
										snake_case								=			image_processing(lowerCAmelCase		,    return_tensors='pt'    ).pixel_values
										self.assertEqual(
										    encoded_images.shape		,    (
										        self.image_processor_tester.batch_size,
										        self.image_processor_tester.num_channels,
										        self.image_processor_tester.crop_size['height'],
										        self.image_processor_tester.crop_size['width'],
										    )		,    )

				def 		snake_case (				self    ):






										"""simple docstring"""

										snake_case								=			self.image_processing_class(**self.image_processor_dict    )
										# create random numpy tensors
										snake_case								=			self.image_processor_tester.prepare_inputs(equal_resolution=lowerCAmelCase		,    numpify=lowerCAmelCase    )
										for image in image_inputs:
																self.assertIsInstance(lowerCAmelCase		,    np.ndarray    )

										# Test not batched input
										snake_case								=			image_processing(image_inputs[0]		,    return_tensors='pt'    ).pixel_values
										self.assertEqual(
										    encoded_images.shape		,    (
										        1,
										        self.image_processor_tester.num_channels,
										        self.image_processor_tester.crop_size['height'],
										        self.image_processor_tester.crop_size['width'],
										    )		,    )

										# Test batched
										snake_case								=			image_processing(lowerCAmelCase		,    return_tensors='pt'    ).pixel_values
										self.assertEqual(
										    encoded_images.shape		,    (
										        self.image_processor_tester.batch_size,
										        self.image_processor_tester.num_channels,
										        self.image_processor_tester.crop_size['height'],
										        self.image_processor_tester.crop_size['width'],
										    )		,    )

				def 		snake_case (				self    ):






										"""simple docstring"""

										snake_case								=			self.image_processing_class(**self.image_processor_dict    )
										# create random PyTorch tensors
										snake_case								=			self.image_processor_tester.prepare_inputs(equal_resolution=lowerCAmelCase		,    torchify=lowerCAmelCase    )
										for image in image_inputs:
																self.assertIsInstance(lowerCAmelCase		,    torch.Tensor    )

										# Test not batched input
										snake_case								=			image_processing(image_inputs[0]		,    return_tensors='pt'    ).pixel_values
										self.assertEqual(
										    encoded_images.shape		,    (
										        1,
										        self.image_processor_tester.num_channels,
										        self.image_processor_tester.crop_size['height'],
										        self.image_processor_tester.crop_size['width'],
										    )		,    )

										# Test batched
										snake_case								=			image_processing(lowerCAmelCase		,    return_tensors='pt'    ).pixel_values
										self.assertEqual(
										    encoded_images.shape		,    (
										        self.image_processor_tester.batch_size,
										        self.image_processor_tester.num_channels,
										        self.image_processor_tester.crop_size['height'],
										        self.image_processor_tester.crop_size['width'],
										    )		,    )





@require_torch
@require_vision
class   lowerCAmelCase_    (			lowerCAmelCase     ,    unittest.TestCase					):



				"""simple docstring"""
				_lowerCAmelCase     :    str			  =						ChineseCLIPImageProcessor if is_vision_available() else None

				def 		snake_case (				self    ):






										"""simple docstring"""

										snake_case								=			ChineseCLIPImageProcessingTester(self		,    num_channels=4		,    do_center_crop=lowerCAmelCase    )
										snake_case								=			3

				@property
				def 		snake_case (				self    ):






										"""simple docstring"""

										return self.image_processor_tester.prepare_image_processor_dict()

				def 		snake_case (				self    ):






										"""simple docstring"""

										snake_case								=			self.image_processing_class(**self.image_processor_dict    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'do_resize'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'size'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'do_center_crop'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'center_crop'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'do_normalize'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'image_mean'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'image_std'    )    )
										self.assertTrue(hasattr(lowerCAmelCase		,    'do_convert_rgb'    )    )

				def 		snake_case (				self    ):






										"""simple docstring"""

										pass

				def 		snake_case (				self    ):






										"""simple docstring"""

										snake_case								=			self.image_processing_class(**self.image_processor_dict    )
										# create random PIL images
										snake_case								=			self.image_processor_tester.prepare_inputs(equal_resolution=lowerCAmelCase    )
										for image in image_inputs:
																self.assertIsInstance(lowerCAmelCase		,    Image.Image    )

										# Test not batched input
										snake_case								=			image_processing(image_inputs[0]		,    return_tensors='pt'    ).pixel_values
										self.assertEqual(
										    encoded_images.shape		,    (
										        1,
										        self.expected_encoded_image_num_channels,
										        self.image_processor_tester.crop_size['height'],
										        self.image_processor_tester.crop_size['width'],
										    )		,    )

										# Test batched
										snake_case								=			image_processing(lowerCAmelCase		,    return_tensors='pt'    ).pixel_values
										self.assertEqual(
										    encoded_images.shape		,    (
										        self.image_processor_tester.batch_size,
										        self.expected_encoded_image_num_channels,
										        self.image_processor_tester.crop_size['height'],
										        self.image_processor_tester.crop_size['width'],
										    )		,    )







"""simple docstring"""
SCREAMING_SNAKE_CASE__      						=  "0.18.2"

from .configuration_utils import ConfigMixin
from .utils import (
    OptionalDependencyNotAvailable,
    is_flax_available,
    is_inflect_available,
    is_invisible_watermark_available,
    is_k_diffusion_available,
    is_k_diffusion_version,
    is_librosa_available,
    is_note_seq_available,
    is_onnx_available,
    is_scipy_available,
    is_torch_available,
    is_torchsde_available,
    is_transformers_available,
    is_transformers_version,
    is_unidecode_available,
    logging,
)


try:
					if not is_onnx_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					from .utils.dummy_onnx_objects import *  # noqa F403
else:
					from .pipelines import OnnxRuntimeModel

try:
					if not is_torch_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					from .utils.dummy_pt_objects import *  # noqa F403
else:
					from .models import (
					    AutoencoderKL,
					    ControlNetModel,
					    ModelMixin,
					    PriorTransformer,
					    TaFilmDecoder,
					    TransformeraDModel,
					    UNetaDModel,
					    UNetaDConditionModel,
					    UNetaDModel,
					    UNetaDConditionModel,
					    VQModel,
					)
					from .optimization import (
					    get_constant_schedule,
					    get_constant_schedule_with_warmup,
					    get_cosine_schedule_with_warmup,
					    get_cosine_with_hard_restarts_schedule_with_warmup,
					    get_linear_schedule_with_warmup,
					    get_polynomial_decay_schedule_with_warmup,
					    get_scheduler,
					)
					from .pipelines import (
					    AudioPipelineOutput,
					    ConsistencyModelPipeline,
					    DanceDiffusionPipeline,
					    DDIMPipeline,
					    DDPMPipeline,
					    DiffusionPipeline,
					    DiTPipeline,
					    ImagePipelineOutput,
					    KarrasVePipeline,
					    LDMPipeline,
					    LDMSuperResolutionPipeline,
					    PNDMPipeline,
					    RePaintPipeline,
					    ScoreSdeVePipeline,
					)
					from .schedulers import (
					    CMStochasticIterativeScheduler,
					    DDIMInverseScheduler,
					    DDIMParallelScheduler,
					    DDIMScheduler,
					    DDPMParallelScheduler,
					    DDPMScheduler,
					    DEISMultistepScheduler,
					    DPMSolverMultistepInverseScheduler,
					    DPMSolverMultistepScheduler,
					    DPMSolverSinglestepScheduler,
					    EulerAncestralDiscreteScheduler,
					    EulerDiscreteScheduler,
					    HeunDiscreteScheduler,
					    IPNDMScheduler,
					    KarrasVeScheduler,
					    KDPMaAncestralDiscreteScheduler,
					    KDPMaDiscreteScheduler,
					    PNDMScheduler,
					    RePaintScheduler,
					    SchedulerMixin,
					    ScoreSdeVeScheduler,
					    UnCLIPScheduler,
					    UniPCMultistepScheduler,
					    VQDiffusionScheduler,
					)
					from .training_utils import EMAModel

try:
					if not (is_torch_available() and is_scipy_available()):
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					from .utils.dummy_torch_and_scipy_objects import *  # noqa F403
else:
					from .schedulers import LMSDiscreteScheduler

try:
					if not (is_torch_available() and is_torchsde_available()):
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					from .utils.dummy_torch_and_torchsde_objects import *  # noqa F403
else:
					from .schedulers import DPMSolverSDEScheduler

try:
					if not (is_torch_available() and is_transformers_available()):
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					from .utils.dummy_torch_and_transformers_objects import *  # noqa F403
else:
					from .pipelines import (
					    AltDiffusionImgaImgPipeline,
					    AltDiffusionPipeline,
					    AudioLDMPipeline,
					    CycleDiffusionPipeline,
					    IFImgaImgPipeline,
					    IFImgaImgSuperResolutionPipeline,
					    IFInpaintingPipeline,
					    IFInpaintingSuperResolutionPipeline,
					    IFPipeline,
					    IFSuperResolutionPipeline,
					    ImageTextPipelineOutput,
					    KandinskyImgaImgPipeline,
					    KandinskyInpaintPipeline,
					    KandinskyPipeline,
					    KandinskyPriorPipeline,
					    KandinskyVaaControlnetImgaImgPipeline,
					    KandinskyVaaControlnetPipeline,
					    KandinskyVaaImgaImgPipeline,
					    KandinskyVaaInpaintPipeline,
					    KandinskyVaaPipeline,
					    KandinskyVaaPriorEmbaEmbPipeline,
					    KandinskyVaaPriorPipeline,
					    LDMTextToImagePipeline,
					    PaintByExamplePipeline,
					    SemanticStableDiffusionPipeline,
					    ShapEImgaImgPipeline,
					    ShapEPipeline,
					    StableDiffusionAttendAndExcitePipeline,
					    StableDiffusionControlNetImgaImgPipeline,
					    StableDiffusionControlNetInpaintPipeline,
					    StableDiffusionControlNetPipeline,
					    StableDiffusionDepthaImgPipeline,
					    StableDiffusionDiffEditPipeline,
					    StableDiffusionImageVariationPipeline,
					    StableDiffusionImgaImgPipeline,
					    StableDiffusionInpaintPipeline,
					    StableDiffusionInpaintPipelineLegacy,
					    StableDiffusionInstructPixaPixPipeline,
					    StableDiffusionLatentUpscalePipeline,
					    StableDiffusionLDMaDPipeline,
					    StableDiffusionModelEditingPipeline,
					    StableDiffusionPanoramaPipeline,
					    StableDiffusionParadigmsPipeline,
					    StableDiffusionPipeline,
					    StableDiffusionPipelineSafe,
					    StableDiffusionPixaPixZeroPipeline,
					    StableDiffusionSAGPipeline,
					    StableDiffusionUpscalePipeline,
					    StableUnCLIPImgaImgPipeline,
					    StableUnCLIPPipeline,
					    TextToVideoSDPipeline,
					    TextToVideoZeroPipeline,
					    UnCLIPImageVariationPipeline,
					    UnCLIPPipeline,
					    UniDiffuserModel,
					    UniDiffuserPipeline,
					    UniDiffuserTextDecoder,
					    VersatileDiffusionDualGuidedPipeline,
					    VersatileDiffusionImageVariationPipeline,
					    VersatileDiffusionPipeline,
					    VersatileDiffusionTextToImagePipeline,
					    VideoToVideoSDPipeline,
					    VQDiffusionPipeline,
					)

try:
					if not (is_torch_available() and is_transformers_available() and is_invisible_watermark_available()):
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					from .utils.dummy_torch_and_transformers_and_invisible_watermark_objects import *  # noqa F403
else:
					from .pipelines import StableDiffusionXLImgaImgPipeline, StableDiffusionXLPipeline

try:
					if not (is_torch_available() and is_transformers_available() and is_k_diffusion_available()):
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					from .utils.dummy_torch_and_transformers_and_k_diffusion_objects import *  # noqa F403
else:
					from .pipelines import StableDiffusionKDiffusionPipeline

try:
					if not (is_torch_available() and is_transformers_available() and is_onnx_available()):
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					from .utils.dummy_torch_and_transformers_and_onnx_objects import *  # noqa F403
else:
					from .pipelines import (
					    OnnxStableDiffusionImgaImgPipeline,
					    OnnxStableDiffusionInpaintPipeline,
					    OnnxStableDiffusionInpaintPipelineLegacy,
					    OnnxStableDiffusionPipeline,
					    OnnxStableDiffusionUpscalePipeline,
					    StableDiffusionOnnxPipeline,
					)

try:
					if not (is_torch_available() and is_librosa_available()):
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					from .utils.dummy_torch_and_librosa_objects import *  # noqa F403
else:
					from .pipelines import AudioDiffusionPipeline, Mel

try:
					if not (is_transformers_available() and is_torch_available() and is_note_seq_available()):
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					from .utils.dummy_transformers_and_torch_and_note_seq_objects import *  # noqa F403
else:
					from .pipelines import SpectrogramDiffusionPipeline

try:
					if not is_flax_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					from .utils.dummy_flax_objects import *  # noqa F403
else:
					from .models.controlnet_flax import FlaxControlNetModel
					from .models.modeling_flax_utils import FlaxModelMixin
					from .models.unet_ad_condition_flax import FlaxUNetaDConditionModel
					from .models.vae_flax import FlaxAutoencoderKL
					from .pipelines import FlaxDiffusionPipeline
					from .schedulers import (
					    FlaxDDIMScheduler,
					    FlaxDDPMScheduler,
					    FlaxDPMSolverMultistepScheduler,
					    FlaxKarrasVeScheduler,
					    FlaxLMSDiscreteScheduler,
					    FlaxPNDMScheduler,
					    FlaxSchedulerMixin,
					    FlaxScoreSdeVeScheduler,
					)


try:
					if not (is_flax_available() and is_transformers_available()):
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					from .utils.dummy_flax_and_transformers_objects import *  # noqa F403
else:
					from .pipelines import (
					    FlaxStableDiffusionControlNetPipeline,
					    FlaxStableDiffusionImgaImgPipeline,
					    FlaxStableDiffusionInpaintPipeline,
					    FlaxStableDiffusionPipeline,
					)

try:
					if not (is_note_seq_available()):
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					from .utils.dummy_note_seq_objects import *  # noqa F403
else:
					from .pipelines import MidiProcessor


