





"""simple docstring"""


import unittest

from transformers import (
    MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING,
    TF_MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING,
    TextClassificationPipeline,
    pipeline,
)
from transformers.testing_utils import is_pipeline_test, nested_simplify, require_tf, require_torch, slow

from .test_pipelines_common import ANY


# These 2 model types require different inputs than those of the usual text models.
lowerCamelCase__				  =   {"LayoutLMv2Config", "LayoutLMv3Config"}



@is_pipeline_test
class      __SCREAMING_SNAKE_CASE    (						unittest.TestCase   ):







  '''simple docstring'''


  SCREAMING_SNAKE_CASE__							:Dict	     =					MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING
  SCREAMING_SNAKE_CASE__							:List[str]	     =					TF_MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING

  if model_mapping is not None:
    SCREAMING_SNAKE_CASE__							:Optional[int]	     =					{config: model for config, model in model_mapping.items() if config.__name__ not in _TO_SKIP}
  if tf_model_mapping is not None:
    SCREAMING_SNAKE_CASE__							:int	     =					{
        config: model for config, model in tf_model_mapping.items() if config.__name__ not in _TO_SKIP
    }

  @require_torch
  def    __SCREAMING_SNAKE_CASE				(		self   :       int	)		->				Any:
        _UpperCamelCase      :	Tuple						=       pipeline(
            task="text-classification"					,   model="hf-internal-testing/tiny-random-distilbert"					,   framework="pt"	)

        _UpperCamelCase      :	str						=       text_classifier("This is great !"	)
        self.assertEqual(nested_simplify(__a	)					,   [{"label": "LABEL_0", "score": 0.5_04}]	)

        _UpperCamelCase      :	Union[str, Any]						=       text_classifier("This is great !"					,   top_k=2	)
        self.assertEqual(
            nested_simplify(__a	)					,   [{"label": "LABEL_0", "score": 0.5_04}, {"label": "LABEL_1", "score": 0.4_96}]	)

        _UpperCamelCase      :	int						=       text_classifier(["This is great !", "This is bad"]					,   top_k=2	)
        self.assertEqual(
            nested_simplify(__a	)					,   [
                [{"label": "LABEL_0", "score": 0.5_04}, {"label": "LABEL_1", "score": 0.4_96}],
                [{"label": "LABEL_0", "score": 0.5_04}, {"label": "LABEL_1", "score": 0.4_96}],
            ]					,   )

        _UpperCamelCase      :	Tuple						=       text_classifier("This is great !"					,   top_k=1	)
        self.assertEqual(nested_simplify(__a	)					,   [{"label": "LABEL_0", "score": 0.5_04}]	)

        # Legacy behavior
        _UpperCamelCase      :	Any						=       text_classifier("This is great !"					,   return_all_scores=__a	)
        self.assertEqual(nested_simplify(__a	)					,   [{"label": "LABEL_0", "score": 0.5_04}]	)

        _UpperCamelCase      :	int						=       text_classifier("This is great !"					,   return_all_scores=__a	)
        self.assertEqual(
            nested_simplify(__a	)					,   [[{"label": "LABEL_0", "score": 0.5_04}, {"label": "LABEL_1", "score": 0.4_96}]]	)

        _UpperCamelCase      :	List[str]						=       text_classifier(["This is great !", "Something else"]					,   return_all_scores=__a	)
        self.assertEqual(
            nested_simplify(__a	)					,   [
                [{"label": "LABEL_0", "score": 0.5_04}, {"label": "LABEL_1", "score": 0.4_96}],
                [{"label": "LABEL_0", "score": 0.5_04}, {"label": "LABEL_1", "score": 0.4_96}],
            ]					,   )

        _UpperCamelCase      :	Optional[Any]						=       text_classifier(["This is great !", "Something else"]					,   return_all_scores=__a	)
        self.assertEqual(
            nested_simplify(__a	)					,   [
                {"label": "LABEL_0", "score": 0.5_04},
                {"label": "LABEL_0", "score": 0.5_04},
            ]					,   )

  @require_torch
  def    __SCREAMING_SNAKE_CASE				(		self   :       str	)		->				Union[str, Any]:
        import torch

        _UpperCamelCase      :	List[str]						=       pipeline(
            task="text-classification"					,   model="hf-internal-testing/tiny-random-distilbert"					,   framework="pt"					,   device=torch.device("cpu"	)					,   )

        _UpperCamelCase      :	Tuple						=       text_classifier("This is great !"	)
        self.assertEqual(nested_simplify(__a	)					,   [{"label": "LABEL_0", "score": 0.5_04}]	)

  @require_tf
  def    __SCREAMING_SNAKE_CASE				(		self   :       int	)		->				Union[str, Any]:
        _UpperCamelCase      :	List[str]						=       pipeline(
            task="text-classification"					,   model="hf-internal-testing/tiny-random-distilbert"					,   framework="tf"	)

        _UpperCamelCase      :	Union[str, Any]						=       text_classifier("This is great !"	)
        self.assertEqual(nested_simplify(__a	)					,   [{"label": "LABEL_0", "score": 0.5_04}]	)

  @slow
  @require_torch
  def    __SCREAMING_SNAKE_CASE				(		self   :       Any	)		->				str:
        _UpperCamelCase      :	str						=       pipeline("text-classification"	)

        _UpperCamelCase      :	List[Any]						=       text_classifier("This is great !"	)
        self.assertEqual(nested_simplify(__a	)					,   [{"label": "POSITIVE", "score": 1.0}]	)
        _UpperCamelCase      :	Optional[Any]						=       text_classifier("This is bad !"	)
        self.assertEqual(nested_simplify(__a	)					,   [{"label": "NEGATIVE", "score": 1.0}]	)
        _UpperCamelCase      :	Any						=       text_classifier("Birds are a type of animal"	)
        self.assertEqual(nested_simplify(__a	)					,   [{"label": "POSITIVE", "score": 0.9_88}]	)

  @slow
  @require_tf
  def    __SCREAMING_SNAKE_CASE				(		self   :       str	)		->				Optional[Any]:
        _UpperCamelCase      :	Tuple						=       pipeline("text-classification"					,   framework="tf"	)

        _UpperCamelCase      :	int						=       text_classifier("This is great !"	)
        self.assertEqual(nested_simplify(__a	)					,   [{"label": "POSITIVE", "score": 1.0}]	)
        _UpperCamelCase      :	str						=       text_classifier("This is bad !"	)
        self.assertEqual(nested_simplify(__a	)					,   [{"label": "NEGATIVE", "score": 1.0}]	)
        _UpperCamelCase      :	Tuple						=       text_classifier("Birds are a type of animal"	)
        self.assertEqual(nested_simplify(__a	)					,   [{"label": "POSITIVE", "score": 0.9_88}]	)

  def    __SCREAMING_SNAKE_CASE				(		self   :       Any					,   __a   :       Any					,   __a   :       str					,   __a   :       Optional[Any]	)		->				int:
        _UpperCamelCase      :	Optional[int]						=       TextClassificationPipeline(model=__a					,   tokenizer=__a	)
        return text_classifier, ["HuggingFace is in", "This is another test"]


  def    __SCREAMING_SNAKE_CASE				(		self   :       Dict					,   __a   :       Tuple					,   __a   :       str	)		->				Tuple:
        _UpperCamelCase      :	List[Any]						=       text_classifier.model
        # Small inputs because BartTokenizer tiny has maximum position embeddings = 22
        _UpperCamelCase      :	List[str]						=       "HuggingFace is in"
        _UpperCamelCase      :	Tuple						=       text_classifier(__a	)

        self.assertEqual(nested_simplify(__a	)					,   [{"label": ANY(__a	), "score": ANY(__a	)}]	)
        self.assertTrue(outputs[0]["label"] in model.config.idalabel.values()	)

        _UpperCamelCase      :	Dict						=       ["HuggingFace is in ", "Paris is in France"]
        _UpperCamelCase      :	List[Any]						=       text_classifier(__a	)
        self.assertEqual(
            nested_simplify(__a	)					,   [{"label": ANY(__a	), "score": ANY(__a	)}, {"label": ANY(__a	), "score": ANY(__a	)}]					,   )
        self.assertTrue(outputs[0]["label"] in model.config.idalabel.values()	)
        self.assertTrue(outputs[1]["label"] in model.config.idalabel.values()	)

        # Forcing to get all results with `top_k=None`
        # This is NOT the legacy format
        _UpperCamelCase      :	List[Any]						=       text_classifier(__a					,   top_k=__a	)
        _UpperCamelCase      :	Optional[Any]						=       len(model.config.idalabel.values()	)
        self.assertEqual(
            nested_simplify(__a	)					,   [[{"label": ANY(__a	), "score": ANY(__a	)}] * N, [{"label": ANY(__a	), "score": ANY(__a	)}] * N]					,   )

        _UpperCamelCase      :	List[str]						=       {"text": "HuggingFace is in ", "text_pair": "Paris is in France"}
        _UpperCamelCase      :	List[str]						=       text_classifier(__a	)
        self.assertEqual(
            nested_simplify(__a	)					,   {"label": ANY(__a	), "score": ANY(__a	)}					,   )
        self.assertTrue(outputs["label"] in model.config.idalabel.values()	)

        # This might be used a text pair, but tokenizer + pipe interaction
        # makes it hard to understand that it's not using the pair properly
        # https://github.com/huggingface/transformers/issues/17305
        # We disabled this usage instead as it was outputting wrong outputs.
        _UpperCamelCase      :	Optional[int]						=       [["HuggingFace is in ", "Paris is in France"]]
        with self.assertRaises(__a	):
              text_classifier(__a	)

        # This used to be valid for doing text pairs
        # We're keeping it working because of backward compatibility
        _UpperCamelCase      :	Optional[Any]						=       text_classifier([[["HuggingFace is in ", "Paris is in France"]]]	)
        self.assertEqual(
            nested_simplify(__a	)					,   [{"label": ANY(__a	), "score": ANY(__a	)}]					,   )
        self.assertTrue(outputs[0]["label"] in model.config.idalabel.values()	)







"""simple docstring"""


from collections import OrderedDict
from typing import Mapping

from packaging import version

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig
from ...utils import logging


lowerCamelCase__				  =   logging.get_logger(__name__)

lowerCamelCase__				  =   {
    "hustvl/yolos-small": "https://huggingface.co/hustvl/yolos-small/resolve/main/config.json",
    # See all YOLOS models at https://huggingface.co/models?filter=yolos
}



class      __SCREAMING_SNAKE_CASE    (						_UpperCamelCase   ):







  '''simple docstring'''


  SCREAMING_SNAKE_CASE__							:Tuple	     =					"yolos"

  def __init__(		self   :       Dict					,   __a   :       Optional[Any]=768					,   __a   :       List[Any]=12					,   __a   :       Any=12					,   __a   :       List[Any]=3072					,   __a   :       Optional[int]="gelu"					,   __a   :       Dict=0.0					,   __a   :       Optional[Any]=0.0					,   __a   :       Any=0.02					,   __a   :       Optional[int]=1e-1_2					,   __a   :       List[Any]=[512, 864]					,   __a   :       List[str]=16					,   __a   :       str=3					,   __a   :       Optional[Any]=True					,   __a   :       Optional[Any]=100					,   __a   :       List[str]=True					,   __a   :       Any=False					,   __a   :       List[str]=1					,   __a   :       str=5					,   __a   :       Optional[Any]=2					,   __a   :       Tuple=5					,   __a   :       Any=2					,   __a   :       Union[str, Any]=0.1					,   **__a   :       List[str]					,   )		->				List[str]:
        super().__init__(**__a	)

        _UpperCamelCase      :	Dict						=       hidden_size
        _UpperCamelCase      :	Any						=       num_hidden_layers
        _UpperCamelCase      :	str						=       num_attention_heads
        _UpperCamelCase      :	Dict						=       intermediate_size
        _UpperCamelCase      :	List[str]						=       hidden_act
        _UpperCamelCase      :	List[str]						=       hidden_dropout_prob
        _UpperCamelCase      :	str						=       attention_probs_dropout_prob
        _UpperCamelCase      :	Tuple						=       initializer_range
        _UpperCamelCase      :	List[str]						=       layer_norm_eps
        _UpperCamelCase      :	Tuple						=       image_size
        _UpperCamelCase      :	Tuple						=       patch_size
        _UpperCamelCase      :	Dict						=       num_channels
        _UpperCamelCase      :	Any						=       qkv_bias
        _UpperCamelCase      :	str						=       num_detection_tokens
        _UpperCamelCase      :	str						=       use_mid_position_embeddings
        _UpperCamelCase      :	List[str]						=       auxiliary_loss
        # Hungarian matcher
        _UpperCamelCase      :	List[Any]						=       class_cost
        _UpperCamelCase      :	int						=       bbox_cost
        _UpperCamelCase      :	Optional[int]						=       giou_cost
        # Loss coefficients
        _UpperCamelCase      :	List[Any]						=       bbox_loss_coefficient
        _UpperCamelCase      :	str						=       giou_loss_coefficient
        _UpperCamelCase      :	Dict						=       eos_coefficient





class      __SCREAMING_SNAKE_CASE    (						_UpperCamelCase   ):







  '''simple docstring'''


  SCREAMING_SNAKE_CASE__							:List[str]	     =					version.parse("1.11"   )

  @property
  def    __SCREAMING_SNAKE_CASE				(		self   :       str	)		->				Mapping[str, Mapping[int, str]]:
        return OrderedDict(
            [
                ("pixel_values", {0: "batch", 1: "num_channels", 2: "height", 3: "width"}),
            ]	)

  @property
  def    __SCREAMING_SNAKE_CASE				(		self   :       Optional[Any]	)		->				float:
        return 1e-4


  @property
  def    __SCREAMING_SNAKE_CASE				(		self   :       Dict	)		->				int:
        return 12
