'''simple docstring'''

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





   @staticmethod
   def 						UpperCAmelCase_	(	*_lowerCamelCase    ,     **_lowerCamelCase ):
      pass


@is_pipeline_test
@require_vision
@require_torch
class     __UpperCAmelCase       ( unittest.TestCase		):
  __A :				List[Any]											= MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING





  def 						UpperCAmelCase_	(	self    ,     _lowerCamelCase    ,     _lowerCamelCase    ,     _lowerCamelCase ):
     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 						UpperCAmelCase_	(	self    ,     _lowerCamelCase    ,     _lowerCamelCase ):
     lowerCAmelCase_			=      object_detector(examples[0]    ,     threshold=0.0 )

     lowerCAmelCase_			=      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 ):
     pass





  @require_torch
  def 						UpperCAmelCase_	(	self ):
     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(_lowerCamelCase    ,     decimals=4 )    ,     [
             {'''score''': 0.72_35, '''label''': '''cat''', '''box''': {'''xmin''': 204, '''ymin''': 167, '''xmax''': 232, '''ymax''': 190}},
             {'''score''': 0.72_18, '''label''': '''remote''', '''box''': {'''xmin''': 204, '''ymin''': 167, '''xmax''': 232, '''ymax''': 190}},
             {'''score''': 0.71_84, '''label''': '''couch''', '''box''': {'''xmin''': 204, '''ymin''': 167, '''xmax''': 232, '''ymax''': 190}},
             {'''score''': 0.67_48, '''label''': '''remote''', '''box''': {'''xmin''': 571, '''ymin''': 83, '''xmax''': 598, '''ymax''': 103}},
             {'''score''': 0.66_56, '''label''': '''cat''', '''box''': {'''xmin''': 571, '''ymin''': 83, '''xmax''': 598, '''ymax''': 103}},
             {'''score''': 0.66_14, '''label''': '''couch''', '''box''': {'''xmin''': 571, '''ymin''': 83, '''xmax''': 598, '''ymax''': 103}},
             {'''score''': 0.64_56, '''label''': '''remote''', '''box''': {'''xmin''': 494, '''ymin''': 105, '''xmax''': 521, '''ymax''': 127}},
             {'''score''': 0.6_42, '''label''': '''remote''', '''box''': {'''xmin''': 67, '''ymin''': 274, '''xmax''': 93, '''ymax''': 297}},
             {'''score''': 0.64_19, '''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(_lowerCamelCase    ,     decimals=4 )    ,     [
             [
                 {'''score''': 0.72_35, '''label''': '''cat''', '''box''': {'''xmin''': 204, '''ymin''': 167, '''xmax''': 232, '''ymax''': 190}},
                 {'''score''': 0.72_18, '''label''': '''remote''', '''box''': {'''xmin''': 204, '''ymin''': 167, '''xmax''': 232, '''ymax''': 190}},
                 {'''score''': 0.71_84, '''label''': '''couch''', '''box''': {'''xmin''': 204, '''ymin''': 167, '''xmax''': 232, '''ymax''': 190}},
                 {'''score''': 0.67_48, '''label''': '''remote''', '''box''': {'''xmin''': 571, '''ymin''': 83, '''xmax''': 598, '''ymax''': 103}},
                 {'''score''': 0.66_56, '''label''': '''cat''', '''box''': {'''xmin''': 571, '''ymin''': 83, '''xmax''': 598, '''ymax''': 103}},
                 {'''score''': 0.66_14, '''label''': '''couch''', '''box''': {'''xmin''': 571, '''ymin''': 83, '''xmax''': 598, '''ymax''': 103}},
                 {'''score''': 0.64_56, '''label''': '''remote''', '''box''': {'''xmin''': 494, '''ymin''': 105, '''xmax''': 521, '''ymax''': 127}},
                 {'''score''': 0.6_42, '''label''': '''remote''', '''box''': {'''xmin''': 67, '''ymin''': 274, '''xmax''': 93, '''ymax''': 297}},
                 {'''score''': 0.64_19, '''label''': '''cat''', '''box''': {'''xmin''': 494, '''ymin''': 105, '''xmax''': 521, '''ymax''': 127}},
             ]
         ]    ,     )





  @require_torch
  @slow
  def 						UpperCAmelCase_	(	self ):
     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(_lowerCamelCase    ,     decimals=4 )    ,     [
             {'''score''': 0.28_68, '''label''': '''cat''', '''box''': {'''xmin''': 324, '''ymin''': 20, '''xmax''': 640, '''ymax''': 373}},
             {'''score''': 0.2_77, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 72, '''xmax''': 177, '''ymax''': 115}},
             {'''score''': 0.25_37, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 55, '''xmax''': 315, '''ymax''': 472}},
             {'''score''': 0.14_74, '''label''': '''remote''', '''box''': {'''xmin''': 335, '''ymin''': 74, '''xmax''': 371, '''ymax''': 187}},
             {'''score''': 0.12_08, '''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(_lowerCamelCase    ,     decimals=4 )    ,     [
             [
                 {'''score''': 0.28_68, '''label''': '''cat''', '''box''': {'''xmin''': 324, '''ymin''': 20, '''xmax''': 640, '''ymax''': 373}},
                 {'''score''': 0.2_77, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 72, '''xmax''': 177, '''ymax''': 115}},
                 {'''score''': 0.25_37, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 55, '''xmax''': 315, '''ymax''': 472}},
                 {'''score''': 0.14_74, '''label''': '''remote''', '''box''': {'''xmin''': 335, '''ymin''': 74, '''xmax''': 371, '''ymax''': 187}},
                 {'''score''': 0.12_08, '''label''': '''couch''', '''box''': {'''xmin''': 4, '''ymin''': 0, '''xmax''': 642, '''ymax''': 476}},
             ],
             [
                 {'''score''': 0.28_68, '''label''': '''cat''', '''box''': {'''xmin''': 324, '''ymin''': 20, '''xmax''': 640, '''ymax''': 373}},
                 {'''score''': 0.2_77, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 72, '''xmax''': 177, '''ymax''': 115}},
                 {'''score''': 0.25_37, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 55, '''xmax''': 315, '''ymax''': 472}},
                 {'''score''': 0.14_74, '''label''': '''remote''', '''box''': {'''xmin''': 335, '''ymin''': 74, '''xmax''': 371, '''ymax''': 187}},
                 {'''score''': 0.12_08, '''label''': '''couch''', '''box''': {'''xmin''': 4, '''ymin''': 0, '''xmax''': 642, '''ymax''': 476}},
             ],
         ]    ,     )





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





  @require_torch
  @slow
  def 						UpperCAmelCase_	(	self ):
     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=_lowerCamelCase    ,     )
     self.assertEqual(
         nested_simplify(_lowerCamelCase    ,     decimals=4 )    ,     [
             {'''score''': 0.28_68, '''label''': '''cat''', '''box''': {'''xmin''': 324, '''ymin''': 20, '''xmax''': 640, '''ymax''': 373}},
             {'''score''': 0.2_77, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 72, '''xmax''': 177, '''ymax''': 115}},
             {'''score''': 0.25_37, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 55, '''xmax''': 315, '''ymax''': 472}},
         ]    ,     )







  @require_torch
  @slow
  def 						UpperCAmelCase_	(	self ):
     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=_lowerCamelCase    ,     )
     self.assertEqual(
         nested_simplify(_lowerCamelCase    ,     decimals=4 )    ,     [
             {'''score''': 0.28_68, '''label''': '''cat''', '''box''': {'''xmin''': 324, '''ymin''': 20, '''xmax''': 640, '''ymax''': 373}},
             {'''score''': 0.2_77, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 72, '''xmax''': 177, '''ymax''': 115}},
         ]    ,     )






'''simple docstring'''

from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_tokenizers_available, is_torch_available


A_     :						Optional[Any]    							={
    '''configuration_squeezebert''': [
        '''SQUEEZEBERT_PRETRAINED_CONFIG_ARCHIVE_MAP''',
        '''SqueezeBertConfig''',
        '''SqueezeBertOnnxConfig''',
    ],
    '''tokenization_squeezebert''': ['''SqueezeBertTokenizer'''],
}

try:
 if not is_tokenizers_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 A_     :						Dict    							=['''SqueezeBertTokenizerFast''']

try:
 if not is_torch_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 A_     :						Optional[int]    							=[
     '''SQUEEZEBERT_PRETRAINED_MODEL_ARCHIVE_LIST''',
     '''SqueezeBertForMaskedLM''',
     '''SqueezeBertForMultipleChoice''',
     '''SqueezeBertForQuestionAnswering''',
     '''SqueezeBertForSequenceClassification''',
     '''SqueezeBertForTokenClassification''',
     '''SqueezeBertModel''',
     '''SqueezeBertModule''',
     '''SqueezeBertPreTrainedModel''',
 ]


if TYPE_CHECKING:
 from .configuration_squeezebert import (
     SQUEEZEBERT_PRETRAINED_CONFIG_ARCHIVE_MAP,
     SqueezeBertConfig,
     SqueezeBertOnnxConfig,
 )
 from .tokenization_squeezebert import SqueezeBertTokenizer

 try:
  if not is_tokenizers_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .tokenization_squeezebert_fast import SqueezeBertTokenizerFast

 try:
  if not is_torch_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .modeling_squeezebert import (
      SQUEEZEBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
      SqueezeBertForMaskedLM,
      SqueezeBertForMultipleChoice,
      SqueezeBertForQuestionAnswering,
      SqueezeBertForSequenceClassification,
      SqueezeBertForTokenClassification,
      SqueezeBertModel,
      SqueezeBertModule,
      SqueezeBertPreTrainedModel,
  )

else:
 import sys

 A_     :						List[str]    							=_LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)





