


import unittest

from transformers import is_vision_available
from transformers.pipelines import 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     UpperCamelCase  (      *lowerCamelCase,   **lowerCamelCase) ->     str:




            """simple docstring"""

            pass






@is_pipeline_test
@require_vision
class _lowerCamelCase(		unittest.TestCase     ):
       @require_torch
       def     UpperCamelCase  (      self) ->     Optional[int]:




           """simple docstring"""

           _lowercase :							str   	=	pipeline(
               model='hf-internal-testing/tiny-random-clip-zero-shot-image-classification',   )
           _lowercase :							Optional[Any]   	=	Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png')
           _lowercase :							Tuple   	=	image_classifier(lowerCamelCase,   candidate_labels=['a', 'b', 'c'])

           # The floating scores are so close, we enter floating error approximation and the order is not guaranteed across
           # python and torch versions.
           self.assertIn(
               nested_simplify(lowerCamelCase),   [
                   [{'score': 0.3_3_3, 'label': 'a'}, {'score': 0.3_3_3, 'label': 'b'}, {'score': 0.3_3_3, 'label': 'c'}],
                   [{'score': 0.3_3_3, 'label': 'a'}, {'score': 0.3_3_3, 'label': 'c'}, {'score': 0.3_3_3, 'label': 'b'}],
               ],   )

           _lowercase :							Dict   	=	image_classifier([image] * 5,   candidate_labels=['A', 'B', 'C'],   batch_size=2)
           self.assertEqual(
               nested_simplify(lowerCamelCase),   [
                   [
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                   ],
                   [
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                   ],
                   [
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                   ],
                   [
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                   ],
                   [
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                   ],
               ],   )
       @require_tf
       def     UpperCamelCase  (      self) ->     Union[str, Any]:




           """simple docstring"""

           _lowercase :							Dict   	=	pipeline(
               model='hf-internal-testing/tiny-random-clip-zero-shot-image-classification',   framework='tf')
           _lowercase :							Dict   	=	Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png')
           _lowercase :							List[Any]   	=	image_classifier(lowerCamelCase,   candidate_labels=['a', 'b', 'c'])

           self.assertEqual(
               nested_simplify(lowerCamelCase),   [{'score': 0.3_3_3, 'label': 'a'}, {'score': 0.3_3_3, 'label': 'b'}, {'score': 0.3_3_3, 'label': 'c'}],   )

           _lowercase :							Optional[int]   	=	image_classifier([image] * 5,   candidate_labels=['A', 'B', 'C'],   batch_size=2)
           self.assertEqual(
               nested_simplify(lowerCamelCase),   [
                   [
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                   ],
                   [
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                   ],
                   [
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                   ],
                   [
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                   ],
                   [
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                       {'score': 0.3_3_3, 'label': ANY(lowerCamelCase)},
                   ],
               ],   )
       @slow
       @require_torch
       def     UpperCamelCase  (      self) ->     Dict:




           """simple docstring"""

           _lowercase :							Optional[int]   	=	pipeline(
               task='zero-shot-image-classification',   model='openai/clip-vit-base-patch32',   )
           # This is an image of 2 cats with remotes and no planes
           _lowercase :							str   	=	Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png')
           _lowercase :							Tuple   	=	image_classifier(lowerCamelCase,   candidate_labels=['cat', 'plane', 'remote'])

           self.assertEqual(
               nested_simplify(lowerCamelCase),   [
                   {'score': 0.5_1_1, 'label': 'remote'},
                   {'score': 0.4_8_5, 'label': 'cat'},
                   {'score': 0.0_0_4, 'label': 'plane'},
               ],   )

           _lowercase :							Union[str, Any]   	=	image_classifier([image] * 5,   candidate_labels=['cat', 'plane', 'remote'],   batch_size=2)
           self.assertEqual(
               nested_simplify(lowerCamelCase),   [
                   [
                       {'score': 0.5_1_1, 'label': 'remote'},
                       {'score': 0.4_8_5, 'label': 'cat'},
                       {'score': 0.0_0_4, 'label': 'plane'},
                   ],
               ]
               * 5,   )




       @slow
       @require_tf
       def     UpperCamelCase  (      self) ->     Optional[int]:




           """simple docstring"""

           _lowercase :							Optional[int]   	=	pipeline(
               task='zero-shot-image-classification',   model='openai/clip-vit-base-patch32',   framework='tf')
           # This is an image of 2 cats with remotes and no planes
           _lowercase :							Optional[int]   	=	Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png')
           _lowercase :							Tuple   	=	image_classifier(lowerCamelCase,   candidate_labels=['cat', 'plane', 'remote'])
           self.assertEqual(
               nested_simplify(lowerCamelCase),   [
                   {'score': 0.5_1_1, 'label': 'remote'},
                   {'score': 0.4_8_5, 'label': 'cat'},
                   {'score': 0.0_0_4, 'label': 'plane'},
               ],   )

           _lowercase :							List[str]   	=	image_classifier([image] * 5,   candidate_labels=['cat', 'plane', 'remote'],   batch_size=2)
           self.assertEqual(
               nested_simplify(lowerCamelCase),   [
                   [
                       {'score': 0.5_1_1, 'label': 'remote'},
                       {'score': 0.4_8_5, 'label': 'cat'},
                       {'score': 0.0_0_4, 'label': 'plane'},
                   ],
               ]
               * 5,   )






def        UpperCamelCase_(   lowerCamelCase_				)					->		int:
    assert (
        isinstance(lowerCamelCase_							,				lowerCamelCase_				) and number_of_steps > 0
    ), F'''number_of_steps needs to be positive integer, your input {number_of_steps}'''
    if number_of_steps == 1:
        return 1
    _lowercase	,       _lowercase :							Dict   	=	1, 1
    for _ in range(number_of_steps - 1				):
        _lowercase	,       _lowercase :							Tuple   	=	current + previous, current
    return current


if __name__ == "__main__":
 import doctest

 doctest.testmod()


