'''simple docstring'''




import unittest

from transformers import (
    MODEL_FOR_OBJECT_DETECTION_MAPPING,
    AutoFeatureExtractor,
    AutoModelForObjectDetection,
    ObjectDetectionPipeline,
    is_vision_available,
    pipeline,
)
from transformers.testing_utils import (
    is_pipeline_test,
    nested_simplify,
    require_pytesseract,
    require_tf,
    require_timm,
    require_torch,
    require_vision,
    slow,
)

from .test_pipelines_common import ANY


if is_vision_available():
  from PIL import Image
else:




  class        a__ :






       @staticmethod
       def   SCREAMING_SNAKE_CASE__  (					*a						:						int    ,							**a						:						List[Any]       ):





           """simple docstring"""



           pass




@is_pipeline_test
@require_vision
@require_timm
@require_torch
class        a__ (  unittest.TestCase					):
     lowerCamelCase    :	List[Any]				=MODEL_FOR_OBJECT_DETECTION_MAPPING






     def   SCREAMING_SNAKE_CASE__  (					self						:						str    ,							a						:						Tuple    ,							a						:						Tuple    ,							a						:						str       ):





         """simple docstring"""



         __lowerCamelCase            =    ObjectDetectionPipeline(model=a    ,							image_processor=a       )
         return object_detector, ["./tests/fixtures/tests_samples/COCO/000000039769.png"]






     def   SCREAMING_SNAKE_CASE__  (					self						:						int    ,							a						:						List[str]    ,							a						:						int       ):





         """simple docstring"""



         __lowerCamelCase            =    object_detector('''./tests/fixtures/tests_samples/COCO/000000039769.png'''    ,							threshold=0.0       )

         self.assertGreater(len(a       )    ,							0       )
         for detected_object in outputs:
             self.assertEqual(
                 a    ,							{
                     '''score''': ANY(a       ),
                     '''label''': ANY(a       ),
                     '''box''': {'''xmin''': ANY(a       ), '''ymin''': ANY(a       ), '''xmax''': ANY(a       ), '''ymax''': ANY(a       )},
                 }    ,							)

         import datasets

         __lowerCamelCase            =    datasets.load_dataset('''hf-internal-testing/fixtures_image_utils'''    ,							'''image'''    ,							split='''test'''       )

         __lowerCamelCase            =    [
             Image.open('''./tests/fixtures/tests_samples/COCO/000000039769.png'''       ),
             '''http://images.cocodataset.org/val2017/000000039769.jpg''',
             # RGBA
             dataset[0]['''file'''],
             # LA
             dataset[1]['''file'''],
             # L
             dataset[2]['''file'''],
         ]
         __lowerCamelCase            =    object_detector(a    ,							threshold=0.0       )

         self.assertEqual(len(a       )    ,							len(a       )       )
         for outputs in batch_outputs:
             self.assertGreater(len(a       )    ,							0       )
             for detected_object in outputs:
                 self.assertEqual(
                     a    ,							{
                         '''score''': ANY(a       ),
                         '''label''': ANY(a       ),
                         '''box''': {'''xmin''': ANY(a       ), '''ymin''': ANY(a       ), '''xmax''': ANY(a       ), '''ymax''': ANY(a       )},
                     }    ,							)






     @require_tf
     @unittest.skip('''Object detection not implemented in TF'''       )
     def   SCREAMING_SNAKE_CASE__  (					self						:						List[str]       ):





         """simple docstring"""



         pass






     @require_torch
     def   SCREAMING_SNAKE_CASE__  (					self						:						Union[str, Any]       ):





         """simple docstring"""



         __lowerCamelCase            =    '''hf-internal-testing/tiny-detr-mobilenetsv3'''

         __lowerCamelCase            =    AutoModelForObjectDetection.from_pretrained(a       )
         __lowerCamelCase            =    AutoFeatureExtractor.from_pretrained(a       )
         __lowerCamelCase            =    ObjectDetectionPipeline(model=a    ,							feature_extractor=a       )

         __lowerCamelCase            =    object_detector('''http://images.cocodataset.org/val2017/000000039769.jpg'''    ,							threshold=0.0       )

         self.assertEqual(
             nested_simplify(a    ,							decimals=4       )    ,							[
                 {'''score''': 0.33_76, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 1_59, '''ymin''': 1_20, '''xmax''': 4_80, '''ymax''': 3_59}},
                 {'''score''': 0.33_76, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 1_59, '''ymin''': 1_20, '''xmax''': 4_80, '''ymax''': 3_59}},
             ]    ,							)

         __lowerCamelCase            =    object_detector(
             [
                 '''http://images.cocodataset.org/val2017/000000039769.jpg''',
                 '''http://images.cocodataset.org/val2017/000000039769.jpg''',
             ]    ,							threshold=0.0    ,							)

         self.assertEqual(
             nested_simplify(a    ,							decimals=4       )    ,							[
                 [
                     {'''score''': 0.33_76, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 1_59, '''ymin''': 1_20, '''xmax''': 4_80, '''ymax''': 3_59}},
                     {'''score''': 0.33_76, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 1_59, '''ymin''': 1_20, '''xmax''': 4_80, '''ymax''': 3_59}},
                 ],
                 [
                     {'''score''': 0.33_76, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 1_59, '''ymin''': 1_20, '''xmax''': 4_80, '''ymax''': 3_59}},
                     {'''score''': 0.33_76, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 1_59, '''ymin''': 1_20, '''xmax''': 4_80, '''ymax''': 3_59}},
                 ],
             ]    ,							)






     @require_torch
     @slow
     def   SCREAMING_SNAKE_CASE__  (					self						:						Union[str, Any]       ):





         """simple docstring"""



         __lowerCamelCase            =    '''facebook/detr-resnet-50'''

         __lowerCamelCase            =    AutoModelForObjectDetection.from_pretrained(a       )
         __lowerCamelCase            =    AutoFeatureExtractor.from_pretrained(a       )
         __lowerCamelCase            =    ObjectDetectionPipeline(model=a    ,							feature_extractor=a       )

         __lowerCamelCase            =    object_detector('''http://images.cocodataset.org/val2017/000000039769.jpg'''       )
         self.assertEqual(
             nested_simplify(a    ,							decimals=4       )    ,							[
                 {'''score''': 0.99_82, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 70, '''xmax''': 1_75, '''ymax''': 1_17}},
                 {'''score''': 0.99_60, '''label''': '''remote''', '''box''': {'''xmin''': 3_33, '''ymin''': 72, '''xmax''': 3_68, '''ymax''': 1_87}},
                 {'''score''': 0.99_55, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 6_39, '''ymax''': 4_73}},
                 {'''score''': 0.99_88, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 3_14, '''ymax''': 4_70}},
                 {'''score''': 0.99_87, '''label''': '''cat''', '''box''': {'''xmin''': 3_45, '''ymin''': 23, '''xmax''': 6_40, '''ymax''': 3_68}},
             ]    ,							)

         __lowerCamelCase            =    object_detector(
             [
                 '''http://images.cocodataset.org/val2017/000000039769.jpg''',
                 '''http://images.cocodataset.org/val2017/000000039769.jpg''',
             ]       )
         self.assertEqual(
             nested_simplify(a    ,							decimals=4       )    ,							[
                 [
                     {'''score''': 0.99_82, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 70, '''xmax''': 1_75, '''ymax''': 1_17}},
                     {'''score''': 0.99_60, '''label''': '''remote''', '''box''': {'''xmin''': 3_33, '''ymin''': 72, '''xmax''': 3_68, '''ymax''': 1_87}},
                     {'''score''': 0.99_55, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 6_39, '''ymax''': 4_73}},
                     {'''score''': 0.99_88, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 3_14, '''ymax''': 4_70}},
                     {'''score''': 0.99_87, '''label''': '''cat''', '''box''': {'''xmin''': 3_45, '''ymin''': 23, '''xmax''': 6_40, '''ymax''': 3_68}},
                 ],
                 [
                     {'''score''': 0.99_82, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 70, '''xmax''': 1_75, '''ymax''': 1_17}},
                     {'''score''': 0.99_60, '''label''': '''remote''', '''box''': {'''xmin''': 3_33, '''ymin''': 72, '''xmax''': 3_68, '''ymax''': 1_87}},
                     {'''score''': 0.99_55, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 6_39, '''ymax''': 4_73}},
                     {'''score''': 0.99_88, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 3_14, '''ymax''': 4_70}},
                     {'''score''': 0.99_87, '''label''': '''cat''', '''box''': {'''xmin''': 3_45, '''ymin''': 23, '''xmax''': 6_40, '''ymax''': 3_68}},
                 ],
             ]    ,							)






     @require_torch
     @slow
     def   SCREAMING_SNAKE_CASE__  (					self						:						Union[str, Any]       ):





         """simple docstring"""



         __lowerCamelCase            =    '''facebook/detr-resnet-50'''

         __lowerCamelCase            =    pipeline('''object-detection'''    ,							model=a       )

         __lowerCamelCase            =    object_detector('''http://images.cocodataset.org/val2017/000000039769.jpg'''       )
         self.assertEqual(
             nested_simplify(a    ,							decimals=4       )    ,							[
                 {'''score''': 0.99_82, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 70, '''xmax''': 1_75, '''ymax''': 1_17}},
                 {'''score''': 0.99_60, '''label''': '''remote''', '''box''': {'''xmin''': 3_33, '''ymin''': 72, '''xmax''': 3_68, '''ymax''': 1_87}},
                 {'''score''': 0.99_55, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 6_39, '''ymax''': 4_73}},
                 {'''score''': 0.99_88, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 3_14, '''ymax''': 4_70}},
                 {'''score''': 0.99_87, '''label''': '''cat''', '''box''': {'''xmin''': 3_45, '''ymin''': 23, '''xmax''': 6_40, '''ymax''': 3_68}},
             ]    ,							)

         __lowerCamelCase            =    object_detector(
             [
                 '''http://images.cocodataset.org/val2017/000000039769.jpg''',
                 '''http://images.cocodataset.org/val2017/000000039769.jpg''',
             ]       )
         self.assertEqual(
             nested_simplify(a    ,							decimals=4       )    ,							[
                 [
                     {'''score''': 0.99_82, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 70, '''xmax''': 1_75, '''ymax''': 1_17}},
                     {'''score''': 0.99_60, '''label''': '''remote''', '''box''': {'''xmin''': 3_33, '''ymin''': 72, '''xmax''': 3_68, '''ymax''': 1_87}},
                     {'''score''': 0.99_55, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 6_39, '''ymax''': 4_73}},
                     {'''score''': 0.99_88, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 3_14, '''ymax''': 4_70}},
                     {'''score''': 0.99_87, '''label''': '''cat''', '''box''': {'''xmin''': 3_45, '''ymin''': 23, '''xmax''': 6_40, '''ymax''': 3_68}},
                 ],
                 [
                     {'''score''': 0.99_82, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 70, '''xmax''': 1_75, '''ymax''': 1_17}},
                     {'''score''': 0.99_60, '''label''': '''remote''', '''box''': {'''xmin''': 3_33, '''ymin''': 72, '''xmax''': 3_68, '''ymax''': 1_87}},
                     {'''score''': 0.99_55, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 6_39, '''ymax''': 4_73}},
                     {'''score''': 0.99_88, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 3_14, '''ymax''': 4_70}},
                     {'''score''': 0.99_87, '''label''': '''cat''', '''box''': {'''xmin''': 3_45, '''ymin''': 23, '''xmax''': 6_40, '''ymax''': 3_68}},
                 ],
             ]    ,							)






     @require_torch
     @slow
     def   SCREAMING_SNAKE_CASE__  (					self						:						str       ):





         """simple docstring"""



         __lowerCamelCase            =    0.99_85
         __lowerCamelCase            =    '''facebook/detr-resnet-50'''

         __lowerCamelCase            =    pipeline('''object-detection'''    ,							model=a       )

         __lowerCamelCase            =    object_detector('''http://images.cocodataset.org/val2017/000000039769.jpg'''    ,							threshold=a       )
         self.assertEqual(
             nested_simplify(a    ,							decimals=4       )    ,							[
                 {'''score''': 0.99_88, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 3_14, '''ymax''': 4_70}},
                 {'''score''': 0.99_87, '''label''': '''cat''', '''box''': {'''xmin''': 3_45, '''ymin''': 23, '''xmax''': 6_40, '''ymax''': 3_68}},
             ]    ,							)






     @require_torch
     @require_pytesseract
     @slow
     def   SCREAMING_SNAKE_CASE__  (					self						:						Optional[Any]       ):





         """simple docstring"""



         __lowerCamelCase            =    '''Narsil/layoutlmv3-finetuned-funsd'''
         __lowerCamelCase            =    0.99_93

         __lowerCamelCase            =    pipeline('''object-detection'''    ,							model=a    ,							threshold=a       )

         __lowerCamelCase            =    object_detector(
             '''https://huggingface.co/spaces/impira/docquery/resolve/2359223c1837a7587402bda0f2643382a6eefeab/invoice.png'''       )
         self.assertEqual(
             nested_simplify(a    ,							decimals=4       )    ,							[
                 {'''score''': 0.99_93, '''label''': '''I-ANSWER''', '''box''': {'''xmin''': 2_94, '''ymin''': 2_54, '''xmax''': 3_43, '''ymax''': 2_64}},
                 {'''score''': 0.99_93, '''label''': '''I-ANSWER''', '''box''': {'''xmin''': 2_94, '''ymin''': 2_54, '''xmax''': 3_43, '''ymax''': 2_64}},
             ]    ,							)

'''simple docstring'''




def __lowerCAmelCase					(				UpperCamelCase__							)      ->       bool:
    if number < 0:
        raise ValueError('''number must not be negative'''							)
    return number & (number - 1) == 0


if __name__ == "__main__":
  import doctest

  doctest.testmod()
