



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        __lowerCAmelCase   :




   @staticmethod
   def 				lowerCamelCase					(  *__UpperCAmelCase		, **__UpperCAmelCase ):



      '''simple docstring'''
      pass



@is_pipeline_test
@require_vision
@require_torch
class        __lowerCAmelCase   (		unittest.TestCase      ):
 lowerCAmelCase__				    =     MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING




 def 				lowerCamelCase					(  self		, __UpperCAmelCase		, __UpperCAmelCase		, __UpperCAmelCase ):



    '''simple docstring'''
    __lowerCamelCase  							=			pipeline(
        '''zero-shot-object-detection'''		, model='''hf-internal-testing/tiny-random-owlvit-object-detection''' )

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




 def 				lowerCamelCase					(  self		, __UpperCAmelCase		, __UpperCAmelCase ):



    '''simple docstring'''
    __lowerCamelCase  							=			object_detector(examples[0]		, threshold=0.0 )

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




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



    '''simple docstring'''
    pass




 @require_torch
 def 				lowerCamelCase					(  self ):



    '''simple docstring'''
    __lowerCamelCase  							=			pipeline(
        '''zero-shot-object-detection'''		, model='''hf-internal-testing/tiny-random-owlvit-object-detection''' )

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

    self.assertEqual(
        nested_simplify(__lowercase		, decimals=4 )		, [
            {'''score''': 0.7_235, '''label''': '''cat''', '''box''': {'''xmin''': 204, '''ymin''': 167, '''xmax''': 232, '''ymax''': 190}},
            {'''score''': 0.7_218, '''label''': '''remote''', '''box''': {'''xmin''': 204, '''ymin''': 167, '''xmax''': 232, '''ymax''': 190}},
            {'''score''': 0.7_184, '''label''': '''couch''', '''box''': {'''xmin''': 204, '''ymin''': 167, '''xmax''': 232, '''ymax''': 190}},
            {'''score''': 0.6_748, '''label''': '''remote''', '''box''': {'''xmin''': 571, '''ymin''': 83, '''xmax''': 598, '''ymax''': 103}},
            {'''score''': 0.6_656, '''label''': '''cat''', '''box''': {'''xmin''': 571, '''ymin''': 83, '''xmax''': 598, '''ymax''': 103}},
            {'''score''': 0.6_614, '''label''': '''couch''', '''box''': {'''xmin''': 571, '''ymin''': 83, '''xmax''': 598, '''ymax''': 103}},
            {'''score''': 0.6_456, '''label''': '''remote''', '''box''': {'''xmin''': 494, '''ymin''': 105, '''xmax''': 521, '''ymax''': 127}},
            {'''score''': 0.642, '''label''': '''remote''', '''box''': {'''xmin''': 67, '''ymin''': 274, '''xmax''': 93, '''ymax''': 297}},
            {'''score''': 0.6_419, '''label''': '''cat''', '''box''': {'''xmin''': 494, '''ymin''': 105, '''xmax''': 521, '''ymax''': 127}},
        ]		, )

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

    self.assertEqual(
        nested_simplify(__lowercase		, decimals=4 )		, [
            [
                {'''score''': 0.7_235, '''label''': '''cat''', '''box''': {'''xmin''': 204, '''ymin''': 167, '''xmax''': 232, '''ymax''': 190}},
                {'''score''': 0.7_218, '''label''': '''remote''', '''box''': {'''xmin''': 204, '''ymin''': 167, '''xmax''': 232, '''ymax''': 190}},
                {'''score''': 0.7_184, '''label''': '''couch''', '''box''': {'''xmin''': 204, '''ymin''': 167, '''xmax''': 232, '''ymax''': 190}},
                {'''score''': 0.6_748, '''label''': '''remote''', '''box''': {'''xmin''': 571, '''ymin''': 83, '''xmax''': 598, '''ymax''': 103}},
                {'''score''': 0.6_656, '''label''': '''cat''', '''box''': {'''xmin''': 571, '''ymin''': 83, '''xmax''': 598, '''ymax''': 103}},
                {'''score''': 0.6_614, '''label''': '''couch''', '''box''': {'''xmin''': 571, '''ymin''': 83, '''xmax''': 598, '''ymax''': 103}},
                {'''score''': 0.6_456, '''label''': '''remote''', '''box''': {'''xmin''': 494, '''ymin''': 105, '''xmax''': 521, '''ymax''': 127}},
                {'''score''': 0.642, '''label''': '''remote''', '''box''': {'''xmin''': 67, '''ymin''': 274, '''xmax''': 93, '''ymax''': 297}},
                {'''score''': 0.6_419, '''label''': '''cat''', '''box''': {'''xmin''': 494, '''ymin''': 105, '''xmax''': 521, '''ymax''': 127}},
            ]
        ]		, )




 @require_torch
 @slow
 def 				lowerCamelCase					(  self ):



    '''simple docstring'''
    __lowerCamelCase  							=			pipeline('''zero-shot-object-detection''' )

    __lowerCamelCase  							=			object_detector(
        '''http://images.cocodataset.org/val2017/000000039769.jpg'''		, candidate_labels=['''cat''', '''remote''', '''couch''']		, )
    self.assertEqual(
        nested_simplify(__lowercase		, decimals=4 )		, [
            {'''score''': 0.2_868, '''label''': '''cat''', '''box''': {'''xmin''': 324, '''ymin''': 20, '''xmax''': 640, '''ymax''': 373}},
            {'''score''': 0.277, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 72, '''xmax''': 177, '''ymax''': 115}},
            {'''score''': 0.2_537, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 55, '''xmax''': 315, '''ymax''': 472}},
            {'''score''': 0.1_474, '''label''': '''remote''', '''box''': {'''xmin''': 335, '''ymin''': 74, '''xmax''': 371, '''ymax''': 187}},
            {'''score''': 0.1_208, '''label''': '''couch''', '''box''': {'''xmin''': 4, '''ymin''': 0, '''xmax''': 642, '''ymax''': 476}},
        ]		, )

    __lowerCamelCase  							=			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(__lowercase		, decimals=4 )		, [
            [
                {'''score''': 0.2_868, '''label''': '''cat''', '''box''': {'''xmin''': 324, '''ymin''': 20, '''xmax''': 640, '''ymax''': 373}},
                {'''score''': 0.277, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 72, '''xmax''': 177, '''ymax''': 115}},
                {'''score''': 0.2_537, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 55, '''xmax''': 315, '''ymax''': 472}},
                {'''score''': 0.1_474, '''label''': '''remote''', '''box''': {'''xmin''': 335, '''ymin''': 74, '''xmax''': 371, '''ymax''': 187}},
                {'''score''': 0.1_208, '''label''': '''couch''', '''box''': {'''xmin''': 4, '''ymin''': 0, '''xmax''': 642, '''ymax''': 476}},
            ],
            [
                {'''score''': 0.2_868, '''label''': '''cat''', '''box''': {'''xmin''': 324, '''ymin''': 20, '''xmax''': 640, '''ymax''': 373}},
                {'''score''': 0.277, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 72, '''xmax''': 177, '''ymax''': 115}},
                {'''score''': 0.2_537, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 55, '''xmax''': 315, '''ymax''': 472}},
                {'''score''': 0.1_474, '''label''': '''remote''', '''box''': {'''xmin''': 335, '''ymin''': 74, '''xmax''': 371, '''ymax''': 187}},
                {'''score''': 0.1_208, '''label''': '''couch''', '''box''': {'''xmin''': 4, '''ymin''': 0, '''xmax''': 642, '''ymax''': 476}},
            ],
        ]		, )




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



    '''simple docstring'''
    pass




 @require_torch
 @slow
 def 				lowerCamelCase					(  self ):



    '''simple docstring'''
    __lowerCamelCase  							=			0.2
    __lowerCamelCase  							=			pipeline('''zero-shot-object-detection''' )

    __lowerCamelCase  							=			object_detector(
        '''http://images.cocodataset.org/val2017/000000039769.jpg'''		, candidate_labels=['''cat''', '''remote''', '''couch''']		, threshold=__lowercase		, )
    self.assertEqual(
        nested_simplify(__lowercase		, decimals=4 )		, [
            {'''score''': 0.2_868, '''label''': '''cat''', '''box''': {'''xmin''': 324, '''ymin''': 20, '''xmax''': 640, '''ymax''': 373}},
            {'''score''': 0.277, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 72, '''xmax''': 177, '''ymax''': 115}},
            {'''score''': 0.2_537, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 55, '''xmax''': 315, '''ymax''': 472}},
        ]		, )




 @require_torch
 @slow
 def 				lowerCamelCase					(  self ):



    '''simple docstring'''
    __lowerCamelCase  							=			2
    __lowerCamelCase  							=			pipeline('''zero-shot-object-detection''' )

    __lowerCamelCase  							=			object_detector(
        '''http://images.cocodataset.org/val2017/000000039769.jpg'''		, candidate_labels=['''cat''', '''remote''', '''couch''']		, top_k=__lowercase		, )
    self.assertEqual(
        nested_simplify(__lowercase		, decimals=4 )		, [
            {'''score''': 0.2_868, '''label''': '''cat''', '''box''': {'''xmin''': 324, '''ymin''': 20, '''xmax''': 640, '''ymax''': 373}},
            {'''score''': 0.277, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 72, '''xmax''': 177, '''ymax''': 115}},
        ]		, )










import platform
from argparse import ArgumentParser

import huggingface_hub

from .. import __version__ as version
from ..utils import is_accelerate_available, is_torch_available, is_transformers_available, is_xformers_available
from . import BaseDiffusersCLICommand



def 	lowerCAmelCase       (						lowerCAmelCase_       )->       Union[str, Any]:
				return EnvironmentCommand()







class  snake_case__(							UpperCAmelCase__							):







						'''simple docstring'''




						@staticmethod
						def   lowercase_       ( __lowercase							)    ->			List[Any]:
										lowerCAmelCase_       :					List[str]			 = parser.add_parser('''env'''							)
										download_parser.set_defaults(func=__lowercase							)




						def   lowercase_       ( self							)    ->			int:
										lowerCAmelCase_       :					Optional[Any]			 = huggingface_hub.__version__

										lowerCAmelCase_       :					str			 = '''not installed'''
										lowerCAmelCase_       :					str			 = '''NA'''
										if is_torch_available():
														import torch

														lowerCAmelCase_       :					Any			 = torch.__version__
														lowerCAmelCase_       :					str			 = torch.cuda.is_available()

										lowerCAmelCase_       :					List[str]			 = '''not installed'''
										if is_transformers_available():
														import transformers

														lowerCAmelCase_       :					Any			 = transformers.__version__

										lowerCAmelCase_       :					Optional[Any]			 = '''not installed'''
										if is_accelerate_available():
														import accelerate

														lowerCAmelCase_       :					List[Any]			 = accelerate.__version__

										lowerCAmelCase_       :					List[str]			 = '''not installed'''
										if is_xformers_available():
														import xformers

														lowerCAmelCase_       :					Optional[Any]			 = xformers.__version__

										lowerCAmelCase_       :					int			 = {
										    '''`diffusers` version''': version,
										    '''Platform''': platform.platform(),
										    '''Python version''': platform.python_version(),
										    '''PyTorch version (GPU?)''': f"""{pt_version} ({pt_cuda_available})""",
										    '''Huggingface_hub version''': hub_version,
										    '''Transformers version''': transformers_version,
										    '''Accelerate version''': accelerate_version,
										    '''xFormers version''': xformers_version,
										    '''Using GPU in script?''': '''<fill in>''',
										    '''Using distributed or parallel set-up in script?''': '''<fill in>''',
										}

										print('''\nCopy-and-paste the text below in your GitHub issue and FILL OUT the two last points.\n'''							)
										print(self.format_dict(__lowercase							)							)

										return info




						@staticmethod
						def   lowercase_       ( __lowercase							)    ->			str:
										return "\n".join([f"""- {prop}: {val}""" for prop, val in d.items()]							) + "\n"