



import tempfile

import numpy as np
import torch
from transformers import AutoTokenizer, TaEncoderModel

from diffusers import DDPMScheduler, UNetaDConditionModel
from diffusers.models.attention_processor import AttnAddedKVProcessor
from diffusers.pipelines.deepfloyd_if import IFWatermarker
from diffusers.utils.testing_utils import torch_device

from ..test_pipelines_common import to_np


class 	__snake_case   :
		def 						SCREAMING_SNAKE_CASE_					(							self						):







						"""simple docstring"""
						torch.manual_seed(0						)
						lowerCAmelCase__		  =  TaEncoderModel.from_pretrained('hf-internal-testing/tiny-random-t5'						)

						torch.manual_seed(0						)
						lowerCAmelCase__		  =  AutoTokenizer.from_pretrained('hf-internal-testing/tiny-random-t5'						)

						torch.manual_seed(0						)
						lowerCAmelCase__		  =  UNetaDConditionModel(
						    sample_size=32    ,layers_per_block=1    ,block_out_channels=[32, 64]    ,down_block_types=[
						        'ResnetDownsampleBlock2D',
						        'SimpleCrossAttnDownBlock2D',
						    ]    ,mid_block_type='UNetMidBlock2DSimpleCrossAttn'    ,up_block_types=['SimpleCrossAttnUpBlock2D', 'ResnetUpsampleBlock2D']    ,in_channels=3    ,out_channels=6    ,cross_attention_dim=32    ,encoder_hid_dim=32    ,attention_head_dim=8    ,addition_embed_type='text'    ,addition_embed_type_num_heads=2    ,cross_attention_norm='group_norm'    ,resnet_time_scale_shift='scale_shift'    ,act_fn='gelu'    ,)
						unet.set_attn_processor(AttnAddedKVProcessor()						)  # For reproducibility tests

						torch.manual_seed(0						)
						lowerCAmelCase__		  =  DDPMScheduler(
						    num_train_timesteps=1000    ,beta_schedule='squaredcos_cap_v2'    ,beta_start=0.0001    ,beta_end=0.02    ,thresholding=lowerCAmelCase__    ,dynamic_thresholding_ratio=0.95    ,sample_max_value=1.0    ,prediction_type='epsilon'    ,variance_type='learned_range'    ,)

						torch.manual_seed(0						)
						lowerCAmelCase__		  =  IFWatermarker()

						return {
						    "text_encoder": text_encoder,
						    "tokenizer": tokenizer,
						    "unet": unet,
						    "scheduler": scheduler,
						    "watermarker": watermarker,
						    "safety_checker": None,
						    "feature_extractor": None,
						}
		def 						SCREAMING_SNAKE_CASE_					(							self						):







						"""simple docstring"""
						torch.manual_seed(0						)
						lowerCAmelCase__		  =  TaEncoderModel.from_pretrained('hf-internal-testing/tiny-random-t5'						)

						torch.manual_seed(0						)
						lowerCAmelCase__		  =  AutoTokenizer.from_pretrained('hf-internal-testing/tiny-random-t5'						)

						torch.manual_seed(0						)
						lowerCAmelCase__		  =  UNetaDConditionModel(
						    sample_size=32    ,layers_per_block=[1, 2]    ,block_out_channels=[32, 64]    ,down_block_types=[
						        'ResnetDownsampleBlock2D',
						        'SimpleCrossAttnDownBlock2D',
						    ]    ,mid_block_type='UNetMidBlock2DSimpleCrossAttn'    ,up_block_types=['SimpleCrossAttnUpBlock2D', 'ResnetUpsampleBlock2D']    ,in_channels=6    ,out_channels=6    ,cross_attention_dim=32    ,encoder_hid_dim=32    ,attention_head_dim=8    ,addition_embed_type='text'    ,addition_embed_type_num_heads=2    ,cross_attention_norm='group_norm'    ,resnet_time_scale_shift='scale_shift'    ,act_fn='gelu'    ,class_embed_type='timestep'    ,mid_block_scale_factor=1.414    ,time_embedding_act_fn='gelu'    ,time_embedding_dim=32    ,)
						unet.set_attn_processor(AttnAddedKVProcessor()						)  # For reproducibility tests

						torch.manual_seed(0						)
						lowerCAmelCase__		  =  DDPMScheduler(
						    num_train_timesteps=1000    ,beta_schedule='squaredcos_cap_v2'    ,beta_start=0.0001    ,beta_end=0.02    ,thresholding=lowerCAmelCase__    ,dynamic_thresholding_ratio=0.95    ,sample_max_value=1.0    ,prediction_type='epsilon'    ,variance_type='learned_range'    ,)

						torch.manual_seed(0						)
						lowerCAmelCase__		  =  DDPMScheduler(
						    num_train_timesteps=1000    ,beta_schedule='squaredcos_cap_v2'    ,beta_start=0.0001    ,beta_end=0.02    ,)

						torch.manual_seed(0						)
						lowerCAmelCase__		  =  IFWatermarker()

						return {
						    "text_encoder": text_encoder,
						    "tokenizer": tokenizer,
						    "unet": unet,
						    "scheduler": scheduler,
						    "image_noising_scheduler": image_noising_scheduler,
						    "watermarker": watermarker,
						    "safety_checker": None,
						    "feature_extractor": None,
						}
		def 						SCREAMING_SNAKE_CASE_					(							self						):







						"""simple docstring"""
						lowerCAmelCase__		  =  self.get_dummy_components()
						lowerCAmelCase__		  =  self.pipeline_class(**lowerCAmelCase__						)
						pipe.to(lowerCAmelCase__						)
						pipe.set_progress_bar_config(disable=lowerCAmelCase__						)

						lowerCAmelCase__		  =  self.get_dummy_inputs(lowerCAmelCase__						)

						lowerCAmelCase__		  =  inputs['prompt']
						lowerCAmelCase__		  =  inputs['generator']
						lowerCAmelCase__		  =  inputs['num_inference_steps']
						lowerCAmelCase__		  =  inputs['output_type']

						if "image" in inputs:
										lowerCAmelCase__		  =  inputs['image']
						else:
										lowerCAmelCase__		  =  None

						if "mask_image" in inputs:
										lowerCAmelCase__		  =  inputs['mask_image']
						else:
										lowerCAmelCase__		  =  None

						if "original_image" in inputs:
										lowerCAmelCase__		  =  inputs['original_image']
						else:
										lowerCAmelCase__		  =  None

						lowerCAmelCase__		  =  pipe.encode_prompt(lowerCAmelCase__						)

						# inputs with prompt converted to embeddings
						lowerCAmelCase__		  =  {
						    'prompt_embeds': prompt_embeds,
						    'negative_prompt_embeds': negative_prompt_embeds,
						    'generator': generator,
						    'num_inference_steps': num_inference_steps,
						    'output_type': output_type,
						}

						if image is not None:
										lowerCAmelCase__		  =  image

						if mask_image is not None:
										lowerCAmelCase__		  =  mask_image

						if original_image is not None:
										lowerCAmelCase__		  =  original_image

						# set all optional components to None
						for optional_component in pipe._optional_components:
										setattr(lowerCAmelCase__    ,lowerCAmelCase__    ,lowerCAmelCase__						)

						lowerCAmelCase__		  =  pipe(**lowerCAmelCase__						)[0]

						with tempfile.TemporaryDirectory() as tmpdir:
										pipe.save_pretrained(lowerCAmelCase__						)
										lowerCAmelCase__		  =  self.pipeline_class.from_pretrained(lowerCAmelCase__						)
										pipe_loaded.to(lowerCAmelCase__						)
										pipe_loaded.set_progress_bar_config(disable=lowerCAmelCase__						)

						pipe_loaded.unet.set_attn_processor(AttnAddedKVProcessor()						)  # For reproducibility tests

						for optional_component in pipe._optional_components:
										self.assertTrue(
										    getattr(lowerCAmelCase__    ,lowerCAmelCase__						) is None    ,f'`{optional_component}` did not stay set to None after loading.'    ,)

						lowerCAmelCase__		  =  self.get_dummy_inputs(lowerCAmelCase__						)

						lowerCAmelCase__		  =  inputs['generator']
						lowerCAmelCase__		  =  inputs['num_inference_steps']
						lowerCAmelCase__		  =  inputs['output_type']

						# inputs with prompt converted to embeddings
						lowerCAmelCase__		  =  {
						    'prompt_embeds': prompt_embeds,
						    'negative_prompt_embeds': negative_prompt_embeds,
						    'generator': generator,
						    'num_inference_steps': num_inference_steps,
						    'output_type': output_type,
						}

						if image is not None:
										lowerCAmelCase__		  =  image

						if mask_image is not None:
										lowerCAmelCase__		  =  mask_image

						if original_image is not None:
										lowerCAmelCase__		  =  original_image

						lowerCAmelCase__		  =  pipe_loaded(**lowerCAmelCase__						)[0]

						lowerCAmelCase__		  =  np.abs(to_np(lowerCAmelCase__						) - to_np(lowerCAmelCase__						)						).max()
						self.assertLess(lowerCAmelCase__    ,1e-4						)



		def 						SCREAMING_SNAKE_CASE_					(							self						):







						"""simple docstring"""
						lowerCAmelCase__		  =  self.get_dummy_components()
						lowerCAmelCase__		  =  self.pipeline_class(**lowerCAmelCase__						)
						pipe.to(lowerCAmelCase__						)
						pipe.set_progress_bar_config(disable=lowerCAmelCase__						)

						lowerCAmelCase__		  =  self.get_dummy_inputs(lowerCAmelCase__						)
						lowerCAmelCase__		  =  pipe(**lowerCAmelCase__						)[0]

						with tempfile.TemporaryDirectory() as tmpdir:
										pipe.save_pretrained(lowerCAmelCase__						)
										lowerCAmelCase__		  =  self.pipeline_class.from_pretrained(lowerCAmelCase__						)
										pipe_loaded.to(lowerCAmelCase__						)
										pipe_loaded.set_progress_bar_config(disable=lowerCAmelCase__						)

						pipe_loaded.unet.set_attn_processor(AttnAddedKVProcessor()						)  # For reproducibility tests

						lowerCAmelCase__		  =  self.get_dummy_inputs(lowerCAmelCase__						)
						lowerCAmelCase__		  =  pipe_loaded(**lowerCAmelCase__						)[0]

						lowerCAmelCase__		  =  np.abs(to_np(lowerCAmelCase__						) - to_np(lowerCAmelCase__						)						).max()
						self.assertLess(lowerCAmelCase__    ,1e-4						)




import unittest

from transformers import MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING, is_vision_available, pipeline
from transformers.testing_utils import (
    is_pipeline_test,
    nested_simplify,
    require_tf,
    require_torch,
    require_vision,
    slow,
)

from .test_pipelines_common import ANY


if is_vision_available():
				from PIL import Image
else:







				class 	__lowercase    :





											"""simple docstring"""







											@staticmethod
											def 					UpperCamelCase__     (      *lowerCAmelCase__			,						**lowerCAmelCase__       ):





														"""simple docstring"""




														pass







@is_pipeline_test
@require_vision
@require_torch
class 	__lowercase    (unittest.TestCase  ):





							"""simple docstring"""







							_UpperCAmelCase      =						MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING






							def 					UpperCamelCase__     (      self			,						lowerCAmelCase__			,						lowerCAmelCase__			,						lowerCAmelCase__       ):





										"""simple docstring"""




										SCREAMING_SNAKE_CASE_		:     List[str]					=					pipeline(
										    'zero-shot-object-detection'			,						model='hf-internal-testing/tiny-random-owlvit-object-detection'       )

										SCREAMING_SNAKE_CASE_		:     Optional[Any]					=					[
										    {
										        'image': './tests/fixtures/tests_samples/COCO/000000039769.png',
										        'candidate_labels': ['cat', 'remote', 'couch'],
										    }
										]
										return object_detector, examples






							def 					UpperCamelCase__     (      self			,						lowerCAmelCase__			,						lowerCAmelCase__       ):





										"""simple docstring"""




										SCREAMING_SNAKE_CASE_		:     Optional[Any]					=					object_detector(examples[0]			,						threshold=0.0       )

										SCREAMING_SNAKE_CASE_		:     int					=					len(lowerCAmelCase__       )
										self.assertGreater(lowerCAmelCase__			,						0       )
										self.assertEqual(
										    lowerCAmelCase__			,						[
										        {
										            'score': ANY(lowerCAmelCase__       ),
										            'label': ANY(lowerCAmelCase__       ),
										            'box': {'xmin': ANY(lowerCAmelCase__       ), 'ymin': ANY(lowerCAmelCase__       ), 'xmax': ANY(lowerCAmelCase__       ), 'ymax': ANY(lowerCAmelCase__       )},
										        }
										        for i in range(lowerCAmelCase__       )
										    ]			,						)






							@require_tf
							@unittest.skip('Zero Shot Object Detection not implemented in TF'       )
							def 					UpperCamelCase__     (      self       ):





										"""simple docstring"""




										pass






							@require_torch
							def 					UpperCamelCase__     (      self       ):





										"""simple docstring"""




										SCREAMING_SNAKE_CASE_		:     List[Any]					=					pipeline(
										    'zero-shot-object-detection'			,						model='hf-internal-testing/tiny-random-owlvit-object-detection'       )

										SCREAMING_SNAKE_CASE_		:     str					=					object_detector(
										    './tests/fixtures/tests_samples/COCO/000000039769.png'			,						candidate_labels=['cat', 'remote', 'couch']			,						threshold=0.64			,						)

										self.assertEqual(
										    nested_simplify(lowerCAmelCase__			,						decimals=4       )			,						[
										        {'score': 0.7_235, 'label': 'cat', 'box': {'xmin': 2_0_4, 'ymin': 1_6_7, 'xmax': 2_3_2, 'ymax': 1_9_0}},
										        {'score': 0.7_218, 'label': 'remote', 'box': {'xmin': 2_0_4, 'ymin': 1_6_7, 'xmax': 2_3_2, 'ymax': 1_9_0}},
										        {'score': 0.7_184, 'label': 'couch', 'box': {'xmin': 2_0_4, 'ymin': 1_6_7, 'xmax': 2_3_2, 'ymax': 1_9_0}},
										        {'score': 0.6_748, 'label': 'remote', 'box': {'xmin': 5_7_1, 'ymin': 8_3, 'xmax': 5_9_8, 'ymax': 1_0_3}},
										        {'score': 0.6_656, 'label': 'cat', 'box': {'xmin': 5_7_1, 'ymin': 8_3, 'xmax': 5_9_8, 'ymax': 1_0_3}},
										        {'score': 0.6_614, 'label': 'couch', 'box': {'xmin': 5_7_1, 'ymin': 8_3, 'xmax': 5_9_8, 'ymax': 1_0_3}},
										        {'score': 0.6_456, 'label': 'remote', 'box': {'xmin': 4_9_4, 'ymin': 1_0_5, 'xmax': 5_2_1, 'ymax': 1_2_7}},
										        {'score': 0.642, 'label': 'remote', 'box': {'xmin': 6_7, 'ymin': 2_7_4, 'xmax': 9_3, 'ymax': 2_9_7}},
										        {'score': 0.6_419, 'label': 'cat', 'box': {'xmin': 4_9_4, 'ymin': 1_0_5, 'xmax': 5_2_1, 'ymax': 1_2_7}},
										    ]			,						)

										SCREAMING_SNAKE_CASE_		:     Optional[Any]					=					object_detector(
										    [
										        {
										            'image': './tests/fixtures/tests_samples/COCO/000000039769.png',
										            'candidate_labels': ['cat', 'remote', 'couch'],
										        }
										    ]			,						threshold=0.64			,						)

										self.assertEqual(
										    nested_simplify(lowerCAmelCase__			,						decimals=4       )			,						[
										        [
										            {'score': 0.7_235, 'label': 'cat', 'box': {'xmin': 2_0_4, 'ymin': 1_6_7, 'xmax': 2_3_2, 'ymax': 1_9_0}},
										            {'score': 0.7_218, 'label': 'remote', 'box': {'xmin': 2_0_4, 'ymin': 1_6_7, 'xmax': 2_3_2, 'ymax': 1_9_0}},
										            {'score': 0.7_184, 'label': 'couch', 'box': {'xmin': 2_0_4, 'ymin': 1_6_7, 'xmax': 2_3_2, 'ymax': 1_9_0}},
										            {'score': 0.6_748, 'label': 'remote', 'box': {'xmin': 5_7_1, 'ymin': 8_3, 'xmax': 5_9_8, 'ymax': 1_0_3}},
										            {'score': 0.6_656, 'label': 'cat', 'box': {'xmin': 5_7_1, 'ymin': 8_3, 'xmax': 5_9_8, 'ymax': 1_0_3}},
										            {'score': 0.6_614, 'label': 'couch', 'box': {'xmin': 5_7_1, 'ymin': 8_3, 'xmax': 5_9_8, 'ymax': 1_0_3}},
										            {'score': 0.6_456, 'label': 'remote', 'box': {'xmin': 4_9_4, 'ymin': 1_0_5, 'xmax': 5_2_1, 'ymax': 1_2_7}},
										            {'score': 0.642, 'label': 'remote', 'box': {'xmin': 6_7, 'ymin': 2_7_4, 'xmax': 9_3, 'ymax': 2_9_7}},
										            {'score': 0.6_419, 'label': 'cat', 'box': {'xmin': 4_9_4, 'ymin': 1_0_5, 'xmax': 5_2_1, 'ymax': 1_2_7}},
										        ]
										    ]			,						)






							@require_torch
							@slow
							def 					UpperCamelCase__     (      self       ):





										"""simple docstring"""




										SCREAMING_SNAKE_CASE_		:     List[str]					=					pipeline('zero-shot-object-detection'       )

										SCREAMING_SNAKE_CASE_		:     List[str]					=					object_detector(
										    'http://images.cocodataset.org/val2017/000000039769.jpg'			,						candidate_labels=['cat', 'remote', 'couch']			,						)
										self.assertEqual(
										    nested_simplify(lowerCAmelCase__			,						decimals=4       )			,						[
										        {'score': 0.2_868, 'label': 'cat', 'box': {'xmin': 3_2_4, 'ymin': 2_0, 'xmax': 6_4_0, 'ymax': 3_7_3}},
										        {'score': 0.277, 'label': 'remote', 'box': {'xmin': 4_0, 'ymin': 7_2, 'xmax': 1_7_7, 'ymax': 1_1_5}},
										        {'score': 0.2_537, 'label': 'cat', 'box': {'xmin': 1, 'ymin': 5_5, 'xmax': 3_1_5, 'ymax': 4_7_2}},
										        {'score': 0.1_474, 'label': 'remote', 'box': {'xmin': 3_3_5, 'ymin': 7_4, 'xmax': 3_7_1, 'ymax': 1_8_7}},
										        {'score': 0.1_208, 'label': 'couch', 'box': {'xmin': 4, 'ymin': 0, 'xmax': 6_4_2, 'ymax': 4_7_6}},
										    ]			,						)

										SCREAMING_SNAKE_CASE_		:     List[Any]					=					object_detector(
										    [
										        {
										            'image': 'http://images.cocodataset.org/val2017/000000039769.jpg',
										            'candidate_labels': ['cat', 'remote', 'couch'],
										        },
										        {
										            'image': 'http://images.cocodataset.org/val2017/000000039769.jpg',
										            'candidate_labels': ['cat', 'remote', 'couch'],
										        },
										    ]			,						)
										self.assertEqual(
										    nested_simplify(lowerCAmelCase__			,						decimals=4       )			,						[
										        [
										            {'score': 0.2_868, 'label': 'cat', 'box': {'xmin': 3_2_4, 'ymin': 2_0, 'xmax': 6_4_0, 'ymax': 3_7_3}},
										            {'score': 0.277, 'label': 'remote', 'box': {'xmin': 4_0, 'ymin': 7_2, 'xmax': 1_7_7, 'ymax': 1_1_5}},
										            {'score': 0.2_537, 'label': 'cat', 'box': {'xmin': 1, 'ymin': 5_5, 'xmax': 3_1_5, 'ymax': 4_7_2}},
										            {'score': 0.1_474, 'label': 'remote', 'box': {'xmin': 3_3_5, 'ymin': 7_4, 'xmax': 3_7_1, 'ymax': 1_8_7}},
										            {'score': 0.1_208, 'label': 'couch', 'box': {'xmin': 4, 'ymin': 0, 'xmax': 6_4_2, 'ymax': 4_7_6}},
										        ],
										        [
										            {'score': 0.2_868, 'label': 'cat', 'box': {'xmin': 3_2_4, 'ymin': 2_0, 'xmax': 6_4_0, 'ymax': 3_7_3}},
										            {'score': 0.277, 'label': 'remote', 'box': {'xmin': 4_0, 'ymin': 7_2, 'xmax': 1_7_7, 'ymax': 1_1_5}},
										            {'score': 0.2_537, 'label': 'cat', 'box': {'xmin': 1, 'ymin': 5_5, 'xmax': 3_1_5, 'ymax': 4_7_2}},
										            {'score': 0.1_474, 'label': 'remote', 'box': {'xmin': 3_3_5, 'ymin': 7_4, 'xmax': 3_7_1, 'ymax': 1_8_7}},
										            {'score': 0.1_208, 'label': 'couch', 'box': {'xmin': 4, 'ymin': 0, 'xmax': 6_4_2, 'ymax': 4_7_6}},
										        ],
										    ]			,						)






							@require_tf
							@unittest.skip('Zero Shot Object Detection not implemented in TF'       )
							def 					UpperCamelCase__     (      self       ):





										"""simple docstring"""




										pass






							@require_torch
							@slow
							def 					UpperCamelCase__     (      self       ):





										"""simple docstring"""




										SCREAMING_SNAKE_CASE_		:     str					=					0.2
										SCREAMING_SNAKE_CASE_		:     str					=					pipeline('zero-shot-object-detection'       )

										SCREAMING_SNAKE_CASE_		:     Union[str, Any]					=					object_detector(
										    'http://images.cocodataset.org/val2017/000000039769.jpg'			,						candidate_labels=['cat', 'remote', 'couch']			,						threshold=lowerCAmelCase__			,						)
										self.assertEqual(
										    nested_simplify(lowerCAmelCase__			,						decimals=4       )			,						[
										        {'score': 0.2_868, 'label': 'cat', 'box': {'xmin': 3_2_4, 'ymin': 2_0, 'xmax': 6_4_0, 'ymax': 3_7_3}},
										        {'score': 0.277, 'label': 'remote', 'box': {'xmin': 4_0, 'ymin': 7_2, 'xmax': 1_7_7, 'ymax': 1_1_5}},
										        {'score': 0.2_537, 'label': 'cat', 'box': {'xmin': 1, 'ymin': 5_5, 'xmax': 3_1_5, 'ymax': 4_7_2}},
										    ]			,						)






							@require_torch
							@slow
							def 					UpperCamelCase__     (      self       ):





										"""simple docstring"""




										SCREAMING_SNAKE_CASE_		:     Dict					=					2
										SCREAMING_SNAKE_CASE_		:     int					=					pipeline('zero-shot-object-detection'       )

										SCREAMING_SNAKE_CASE_		:     Tuple					=					object_detector(
										    'http://images.cocodataset.org/val2017/000000039769.jpg'			,						candidate_labels=['cat', 'remote', 'couch']			,						top_k=lowerCAmelCase__			,						)
										self.assertEqual(
										    nested_simplify(lowerCAmelCase__			,						decimals=4       )			,						[
										        {'score': 0.2_868, 'label': 'cat', 'box': {'xmin': 3_2_4, 'ymin': 2_0, 'xmax': 6_4_0, 'ymax': 3_7_3}},
										        {'score': 0.277, 'label': 'remote', 'box': {'xmin': 4_0, 'ymin': 7_2, 'xmax': 1_7_7, 'ymax': 1_1_5}},
										    ]			,						)





