


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




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







@is_pipeline_test
@require_vision
class 		_snake_case  (				unittest.TestCase							):




 @require_torch
 def 	SCREAMING_SNAKE_CASE__    (		self   ):
       a						:Any										=	pipeline(
           model='''hf-internal-testing/tiny-random-clip-zero-shot-image-classification''' ,  )
       a						:int										=	Image.open('''./tests/fixtures/tests_samples/COCO/000000039769.png'''   )
       a						: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.333, '''label''': '''a'''}, {'''score''': 0.333, '''label''': '''b'''}, {'''score''': 0.333, '''label''': '''c'''}],
               [{'''score''': 0.333, '''label''': '''a'''}, {'''score''': 0.333, '''label''': '''c'''}, {'''score''': 0.333, '''label''': '''b'''}],
           ] ,  )

       a						:Optional[int]										=	image_classifier([image] * 5 ,  candidate_labels=['''A''', '''B''', '''C'''] ,  batch_size=2   )
       self.assertEqual(
           nested_simplify(_lowerCamelCase   ) ,  [
               [
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
               ],
               [
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
               ],
               [
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
               ],
               [
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
               ],
               [
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
               ],
           ] ,  )




 @require_tf
 def 	SCREAMING_SNAKE_CASE__    (		self   ):
       a						:Dict										=	pipeline(
           model='''hf-internal-testing/tiny-random-clip-zero-shot-image-classification''' ,  framework='''tf'''   )
       a						:str										=	Image.open('''./tests/fixtures/tests_samples/COCO/000000039769.png'''   )
       a						:int										=	image_classifier(_lowerCamelCase ,  candidate_labels=['''a''', '''b''', '''c''']   )

       self.assertEqual(
           nested_simplify(_lowerCamelCase   ) ,  [{'''score''': 0.333, '''label''': '''a'''}, {'''score''': 0.333, '''label''': '''b'''}, {'''score''': 0.333, '''label''': '''c'''}] ,  )

       a						:int										=	image_classifier([image] * 5 ,  candidate_labels=['''A''', '''B''', '''C'''] ,  batch_size=2   )
       self.assertEqual(
           nested_simplify(_lowerCamelCase   ) ,  [
               [
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
               ],
               [
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
               ],
               [
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
               ],
               [
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
               ],
               [
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
                   {'''score''': 0.333, '''label''': ANY(_lowerCamelCase   )},
               ],
           ] ,  )




 @slow
 @require_torch
 def 	SCREAMING_SNAKE_CASE__    (		self   ):
       a						:Any										=	pipeline(
           task='''zero-shot-image-classification''' ,  model='''openai/clip-vit-base-patch32''' ,  )
       # This is an image of 2 cats with remotes and no planes
       a						:Any										=	Image.open('''./tests/fixtures/tests_samples/COCO/000000039769.png'''   )
       a						:List[Any]										=	image_classifier(_lowerCamelCase ,  candidate_labels=['''cat''', '''plane''', '''remote''']   )

       self.assertEqual(
           nested_simplify(_lowerCamelCase   ) ,  [
               {'''score''': 0.511, '''label''': '''remote'''},
               {'''score''': 0.485, '''label''': '''cat'''},
               {'''score''': 0.004, '''label''': '''plane'''},
           ] ,  )

       a						:Dict										=	image_classifier([image] * 5 ,  candidate_labels=['''cat''', '''plane''', '''remote'''] ,  batch_size=2   )
       self.assertEqual(
           nested_simplify(_lowerCamelCase   ) ,  [
               [
                   {'''score''': 0.511, '''label''': '''remote'''},
                   {'''score''': 0.485, '''label''': '''cat'''},
                   {'''score''': 0.004, '''label''': '''plane'''},
               ],
           ]
           * 5 ,  )




 @slow
 @require_tf
 def 	SCREAMING_SNAKE_CASE__    (		self   ):
       a						:Optional[Any]										=	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
       a						:List[Any]										=	Image.open('''./tests/fixtures/tests_samples/COCO/000000039769.png'''   )
       a						:Tuple										=	image_classifier(_lowerCamelCase ,  candidate_labels=['''cat''', '''plane''', '''remote''']   )
       self.assertEqual(
           nested_simplify(_lowerCamelCase   ) ,  [
               {'''score''': 0.511, '''label''': '''remote'''},
               {'''score''': 0.485, '''label''': '''cat'''},
               {'''score''': 0.004, '''label''': '''plane'''},
           ] ,  )

       a						:Optional[int]										=	image_classifier([image] * 5 ,  candidate_labels=['''cat''', '''plane''', '''remote'''] ,  batch_size=2   )
       self.assertEqual(
           nested_simplify(_lowerCamelCase   ) ,  [
               [
                   {'''score''': 0.511, '''label''': '''remote'''},
                   {'''score''': 0.485, '''label''': '''cat'''},
                   {'''score''': 0.004, '''label''': '''plane'''},
               ],
           ]
           * 5 ,  )









# limitations under the License.

# NOTE: This file is deprecated and will be removed in a future version.
# It only exists so that temporarely `from diffusers.pipelines import DiffusionPipeline` works

from .pipelines import DiffusionPipeline, ImagePipelineOutput  # noqa: F401
from .utils import deprecate


deprecate(
    '''pipelines_utils''',
    '''0.22.0''',
    '''Importing `DiffusionPipeline` or `ImagePipelineOutput` from diffusers.pipeline_utils is deprecated. Please import from diffusers.pipelines.pipeline_utils instead.''',
    standard_warn=False,
    stacklevel=3,
)





