





import hashlib
import unittest
from typing import Dict

import numpy as np

from transformers import (
    MODEL_FOR_MASK_GENERATION_MAPPING,
    TF_MODEL_FOR_MASK_GENERATION_MAPPING,
    is_vision_available,
    pipeline,
)
from transformers.pipelines import MaskGenerationPipeline
from transformers.testing_utils import (
    is_pipeline_test,
    nested_simplify,
    require_tf,
    require_torch,
    require_vision,
    slow,
)


if is_vision_available():
     from PIL import Image
else:

     class   A							:



           @staticmethod
           def 						lowerCAmelCase__     (						*_lowerCAmelCase:    Tuple		,	**_lowerCAmelCase:    Union[str, Any]							)    ->     Optional[Any]:
              '''simple docstring'''

              pass




def      a__			(       lowercase__	):






   '''simple docstring'''






   UpperCAmelCase_           =hashlib.mda(image.tobytes()	)
   return m.hexdigest()[:1_0]




def      a__			(       lowercase__	):






   '''simple docstring'''






   UpperCAmelCase_           =np.array(lowercase__	)
   UpperCAmelCase_           =npimg.shape
   return {"hash": hashimage(lowercase__	), "shape": shape}





@is_pipeline_test
@require_vision
@require_torch
class   A							(						unittest.TestCase    ):
      _snake_case				  =dict(
          (list(MODEL_FOR_MASK_GENERATION_MAPPING.items()    ) if MODEL_FOR_MASK_GENERATION_MAPPING else [])    )
      _snake_case				  =dict(
          (list(TF_MODEL_FOR_MASK_GENERATION_MAPPING.items()    ) if TF_MODEL_FOR_MASK_GENERATION_MAPPING else [])    )



      def 						lowerCAmelCase__     (						self:    str		,	_lowerCAmelCase:    Optional[int]		,	_lowerCAmelCase:    int		,	_lowerCAmelCase:    str							)    ->     Any:
         '''simple docstring'''

         UpperCAmelCase_           =MaskGenerationPipeline(model=_lowerCAmelCase		,	image_processor=_lowerCAmelCase							)
         return image_segmenter, [
             "./tests/fixtures/tests_samples/COCO/000000039769.png",
             "./tests/fixtures/tests_samples/COCO/000000039769.png",
         ]



      def 						lowerCAmelCase__     (						self:    Optional[Any]		,	_lowerCAmelCase:    int		,	_lowerCAmelCase:    Optional[Any]							)    ->     Dict:
         '''simple docstring'''

         pass



      @require_tf
      @unittest.skip("Image segmentation not implemented in TF"							)
      def 						lowerCAmelCase__     (						self:    str							)    ->     int:
         '''simple docstring'''

         pass



      @slow
      @require_torch
      def 						lowerCAmelCase__     (						self:    Optional[int]							)    ->     Optional[Any]:
         '''simple docstring'''

         UpperCAmelCase_           =pipeline("mask-generation"		,	model="facebook/sam-vit-huge"							)

         UpperCAmelCase_           =image_segmenter("http://images.cocodataset.org/val2017/000000039769.jpg"		,	points_per_batch=256							)

         # Shortening by hashing
         UpperCAmelCase_           =[]
         for i, o in enumerate(outputs["masks"]							):
            new_outupt += [{"mask": mask_to_test_readable(_lowerCAmelCase							), "scores": outputs["scores"][i]}]

         # fmt: off
         self.assertEqual(
             nested_simplify(_lowerCAmelCase		,	decimals=4							)		,	[
                 {"mask": {"hash": "115ad19f5f", "shape": (480, 640)}, "scores": 1.04_44},
                 {"mask": {"hash": "6affa964c6", "shape": (480, 640)}, "scores": 1.0_21},
                 {"mask": {"hash": "dfe28a0388", "shape": (480, 640)}, "scores": 1.01_67},
                 {"mask": {"hash": "c0a5f4a318", "shape": (480, 640)}, "scores": 1.01_32},
                 {"mask": {"hash": "fe8065c197", "shape": (480, 640)}, "scores": 1.00_53},
                 {"mask": {"hash": "e2d0b7a0b7", "shape": (480, 640)}, "scores": 0.99_67},
                 {"mask": {"hash": "453c7844bd", "shape": (480, 640)}, "scores": 0.9_93},
                 {"mask": {"hash": "3d44f2926d", "shape": (480, 640)}, "scores": 0.99_09},
                 {"mask": {"hash": "64033ddc3f", "shape": (480, 640)}, "scores": 0.98_79},
                 {"mask": {"hash": "801064ff79", "shape": (480, 640)}, "scores": 0.98_34},
                 {"mask": {"hash": "6172f276ef", "shape": (480, 640)}, "scores": 0.97_16},
                 {"mask": {"hash": "b49e60e084", "shape": (480, 640)}, "scores": 0.96_12},
                 {"mask": {"hash": "a811e775fd", "shape": (480, 640)}, "scores": 0.95_99},
                 {"mask": {"hash": "a6a8ebcf4b", "shape": (480, 640)}, "scores": 0.95_52},
                 {"mask": {"hash": "9d8257e080", "shape": (480, 640)}, "scores": 0.95_32},
                 {"mask": {"hash": "32de6454a8", "shape": (480, 640)}, "scores": 0.95_16},
                 {"mask": {"hash": "af3d4af2c8", "shape": (480, 640)}, "scores": 0.94_99},
                 {"mask": {"hash": "3c6db475fb", "shape": (480, 640)}, "scores": 0.94_83},
                 {"mask": {"hash": "c290813fb9", "shape": (480, 640)}, "scores": 0.94_64},
                 {"mask": {"hash": "b6f0b8f606", "shape": (480, 640)}, "scores": 0.9_43},
                 {"mask": {"hash": "92ce16bfdf", "shape": (480, 640)}, "scores": 0.9_43},
                 {"mask": {"hash": "c749b25868", "shape": (480, 640)}, "scores": 0.94_08},
                 {"mask": {"hash": "efb6cab859", "shape": (480, 640)}, "scores": 0.93_35},
                 {"mask": {"hash": "1ff2eafb30", "shape": (480, 640)}, "scores": 0.93_26},
                 {"mask": {"hash": "788b798e24", "shape": (480, 640)}, "scores": 0.92_62},
                 {"mask": {"hash": "abea804f0e", "shape": (480, 640)}, "scores": 0.89_99},
                 {"mask": {"hash": "7b9e8ddb73", "shape": (480, 640)}, "scores": 0.89_86},
                 {"mask": {"hash": "cd24047c8a", "shape": (480, 640)}, "scores": 0.89_84},
                 {"mask": {"hash": "6943e6bcbd", "shape": (480, 640)}, "scores": 0.88_73},
                 {"mask": {"hash": "b5f47c9191", "shape": (480, 640)}, "scores": 0.88_71}
             ]		,	)
         # fmt: on






      @require_torch
      @slow
      def 						lowerCAmelCase__     (						self:    str							)    ->     Any:
         '''simple docstring'''

         UpperCAmelCase_           ="facebook/sam-vit-huge"
         UpperCAmelCase_           =pipeline("mask-generation"		,	model=_lowerCAmelCase							)

         UpperCAmelCase_           =image_segmenter(
             "http://images.cocodataset.org/val2017/000000039769.jpg"		,	pred_iou_thresh=1		,	points_per_batch=256							)

         # Shortening by hashing
         UpperCAmelCase_           =[]
         for i, o in enumerate(outputs["masks"]							):
            new_outupt += [{"mask": mask_to_test_readable(_lowerCAmelCase							), "scores": outputs["scores"][i]}]

         self.assertEqual(
             nested_simplify(_lowerCAmelCase		,	decimals=4							)		,	[
                 {"mask": {"hash": "115ad19f5f", "shape": (480, 640)}, "scores": 1.04_44},
                 {"mask": {"hash": "6affa964c6", "shape": (480, 640)}, "scores": 1.02_10},
                 {"mask": {"hash": "dfe28a0388", "shape": (480, 640)}, "scores": 1.01_67},
                 {"mask": {"hash": "c0a5f4a318", "shape": (480, 640)}, "scores": 1.01_32},
                 {"mask": {"hash": "fe8065c197", "shape": (480, 640)}, "scores": 1.00_53},
             ]		,	)











'''simple docstring'''




__UpperCAmelCase            =       """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



