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







												'''simple docstring'''



												@staticmethod
												def        SCREAMING_SNAKE_CASE(			*lowerCAmelCase__							:List[str]		,    **lowerCAmelCase__							:int     )  ->Dict:
																pass





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







						'''simple docstring'''



						@require_torch
						def        SCREAMING_SNAKE_CASE(			self							:Union[str, Any]     )  ->Dict:
										lowercase         =      pipeline(
										    model="hf-internal-testing/tiny-random-clip-zero-shot-image-classification"		,    )
										lowercase         =      Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"     )
										lowercase         =      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_33, "label": "a"}, {"score": 0.3_33, "label": "b"}, {"score": 0.3_33, "label": "c"}],
										        [{"score": 0.3_33, "label": "a"}, {"score": 0.3_33, "label": "c"}, {"score": 0.3_33, "label": "b"}],
										    ]		,    )

										lowercase         =      image_classifier([image] * 5		,    candidate_labels=["A", "B", "C"]		,    batch_size=2     )
										self.assertEqual(
										    nested_simplify(lowerCAmelCase__     )		,    [
										        [
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										        ],
										        [
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										        ],
										        [
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										        ],
										        [
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										        ],
										        [
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										        ],
										    ]		,    )





						@require_tf
						def        SCREAMING_SNAKE_CASE(			self							:Union[str, Any]     )  ->Any:
										lowercase         =      pipeline(
										    model="hf-internal-testing/tiny-random-clip-zero-shot-image-classification"		,    framework="tf"     )
										lowercase         =      Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"     )
										lowercase         =      image_classifier(lowerCAmelCase__		,    candidate_labels=["a", "b", "c"]     )

										self.assertEqual(
										    nested_simplify(lowerCAmelCase__     )		,    [{"score": 0.3_33, "label": "a"}, {"score": 0.3_33, "label": "b"}, {"score": 0.3_33, "label": "c"}]		,    )

										lowercase         =      image_classifier([image] * 5		,    candidate_labels=["A", "B", "C"]		,    batch_size=2     )
										self.assertEqual(
										    nested_simplify(lowerCAmelCase__     )		,    [
										        [
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										        ],
										        [
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										        ],
										        [
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										        ],
										        [
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										        ],
										        [
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										            {"score": 0.3_33, "label": ANY(lowerCAmelCase__     )},
										        ],
										    ]		,    )





						@slow
						@require_torch
						def        SCREAMING_SNAKE_CASE(			self							:Optional[int]     )  ->Tuple:
										lowercase         =      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         =      Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"     )
										lowercase         =      image_classifier(lowerCAmelCase__		,    candidate_labels=["cat", "plane", "remote"]     )

										self.assertEqual(
										    nested_simplify(lowerCAmelCase__     )		,    [
										        {"score": 0.5_11, "label": "remote"},
										        {"score": 0.4_85, "label": "cat"},
										        {"score": 0.0_04, "label": "plane"},
										    ]		,    )

										lowercase         =      image_classifier([image] * 5		,    candidate_labels=["cat", "plane", "remote"]		,    batch_size=2     )
										self.assertEqual(
										    nested_simplify(lowerCAmelCase__     )		,    [
										        [
										            {"score": 0.5_11, "label": "remote"},
										            {"score": 0.4_85, "label": "cat"},
										            {"score": 0.0_04, "label": "plane"},
										        ],
										    ]
										    * 5		,    )





						@slow
						@require_tf
						def        SCREAMING_SNAKE_CASE(			self							:Dict     )  ->int:
										lowercase         =      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         =      Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"     )
										lowercase         =      image_classifier(lowerCAmelCase__		,    candidate_labels=["cat", "plane", "remote"]     )
										self.assertEqual(
										    nested_simplify(lowerCAmelCase__     )		,    [
										        {"score": 0.5_11, "label": "remote"},
										        {"score": 0.4_85, "label": "cat"},
										        {"score": 0.0_04, "label": "plane"},
										    ]		,    )

										lowercase         =      image_classifier([image] * 5		,    candidate_labels=["cat", "plane", "remote"]		,    batch_size=2     )
										self.assertEqual(
										    nested_simplify(lowerCAmelCase__     )		,    [
										        [
										            {"score": 0.5_11, "label": "remote"},
										            {"score": 0.4_85, "label": "cat"},
										            {"score": 0.0_04, "label": "plane"},
										        ],
										    ]
										    * 5		,    )


from ...configuration_utils import PretrainedConfig
from ...utils import logging


_snake_case      :							List[str]     	=    logging.get_logger(__name__)

_snake_case      :							int     	=    {
    "google/switch-base-8": "https://huggingface.co/google/switch-base-8/blob/main/config.json",
}





class   UpperCamelCase_      (      __a		):







						'''simple docstring'''



						UpperCamelCase      :  List[str]				   =					'''switch_transformers'''
						UpperCamelCase      :  Dict				   =					['''past_key_values''']
						UpperCamelCase      :  Union[str, Any]				   =					{'''hidden_size''': '''d_model''', '''num_attention_heads''': '''num_heads''', '''num_hidden_layers''': '''num_layers'''}





						def __init__(			self							:int		,    lowerCAmelCase__							:str=32128		,    lowerCAmelCase__							:Union[str, Any]=768		,    lowerCAmelCase__							:Tuple=64		,    lowerCAmelCase__							:Any=2048		,    lowerCAmelCase__							:Optional[int]=64		,    lowerCAmelCase__							:Any=12		,    lowerCAmelCase__							:Any=3		,    lowerCAmelCase__							:Union[str, Any]=12		,    lowerCAmelCase__							:Tuple=3		,    lowerCAmelCase__							:str=12		,    lowerCAmelCase__							:Dict=8		,    lowerCAmelCase__							:Union[str, Any]=False		,    lowerCAmelCase__							:List[str]=0.01		,    lowerCAmelCase__							:Union[str, Any]="float32"		,    lowerCAmelCase__							:Optional[int]=False		,    lowerCAmelCase__							:Optional[Any]=32		,    lowerCAmelCase__							:int=128		,    lowerCAmelCase__							:Optional[Any]=0.1		,    lowerCAmelCase__							:Optional[Any]=1E-6		,    lowerCAmelCase__							:Any=0.0_01		,    lowerCAmelCase__							:Union[str, Any]=0.0_01		,    lowerCAmelCase__							:List[Any]=1.0		,    lowerCAmelCase__							:Optional[Any]="relu"		,    lowerCAmelCase__							:Optional[int]=True		,    lowerCAmelCase__							:List[Any]=False		,    lowerCAmelCase__							:int=True		,    lowerCAmelCase__							:int=0		,    lowerCAmelCase__							:Optional[Any]=1		,    **lowerCAmelCase__							:List[Any]		,    )  ->Dict:
										lowercase         =      vocab_size
										lowercase         =      d_model
										lowercase         =      d_kv
										lowercase         =      d_ff

										lowercase         =      num_sparse_encoder_layers

										lowercase         =      num_layers
										lowercase         =      (
										    num_decoder_layers if num_decoder_layers is not None else self.num_layers
										)  # default = symmetry
										lowercase         =      num_sparse_decoder_layers

										# This tells us, each how many encoder layer we'll have to set a sparse layer.
										if self.num_sparse_encoder_layers > 0:
														lowercase         =      self.num_layers // self.num_sparse_encoder_layers
										else:
														lowercase         =      self.num_layers  # HACK: this will create 0 sparse layers

										# This tells us, each how many encoder layer we'll have to set a sparse layer.
										if self.num_sparse_decoder_layers > 0:
														lowercase         =      self.num_decoder_layers // self.num_sparse_decoder_layers
										else:
														lowercase         =      self.num_decoder_layers  # HACK: this will create 0 sparse layers

										lowercase         =      num_heads
										lowercase         =      num_experts
										lowercase         =      expert_capacity
										lowercase         =      router_bias
										lowercase         =      router_jitter_noise
										if router_dtype not in ["float32", "float16", "bfloat16"]:
														raise ValueError(F'''`router_dtype` must be one of \'float32\', \'float16\' or \'bfloat16\', got {router_dtype}'''     )
										lowercase         =      router_dtype

										lowercase         =      router_ignore_padding_tokens
										lowercase         =      relative_attention_num_buckets
										lowercase         =      relative_attention_max_distance

										lowercase         =      dropout_rate
										lowercase         =      layer_norm_epsilon
										lowercase         =      initializer_factor
										lowercase         =      feed_forward_proj
										lowercase         =      use_cache
										lowercase         =      add_router_probs

										lowercase         =      router_z_loss_coef
										lowercase         =      router_aux_loss_coef

										lowercase         =      self.feed_forward_proj.split("-"     )
										lowercase         =      act_info[-1]
										lowercase         =      act_info[0] == "gated"

										if len(lowerCAmelCase__     ) > 1 and act_info[0] != "gated" or len(lowerCAmelCase__     ) > 2:
														raise ValueError(
														    F'''`feed_forward_proj`: {feed_forward_proj} is not a valid activation function of the dense layer.'''
														    "Please make sure `feed_forward_proj` is of the format `gated-{ACT_FN}` or `{ACT_FN}`, e.g. "
														    "'gated-gelu' or 'relu'"     )

										# for backwards compatibility
										if feed_forward_proj == "gated-gelu":
														lowercase         =      "gelu_new"

										super().__init__(
										    pad_token_id=lowerCAmelCase__		,    eos_token_id=lowerCAmelCase__		,    is_encoder_decoder=lowerCAmelCase__		,    **lowerCAmelCase__		,    )
