






'''simple docstring'''




import gc
import importlib.metadata
import tempfile
import unittest

from packaging import version

from transformers import (
    AutoModel,
    AutoModelForCausalLM,
    AutoModelForSeqaSeqLM,
    AutoModelForSequenceClassification,
    AutoTokenizer,
    BitsAndBytesConfig,
    pipeline,
)
from transformers.testing_utils import (
    is_torch_available,
    require_accelerate,
    require_bitsandbytes,
    require_torch,
    require_torch_gpu,
    require_torch_multi_gpu,
    slow,
)

def 	__UpperCAmelCase       ( __magic_name__						)->    str:



			"""simple docstring"""



			if model.config.model_type == "gpt2":
						return model.transformer.h[0].mlp.c_fc
			return model.transformer.h[0].mlp.dense_ah_to_h


if is_torch_available():
		import torch
		import torch.nn as nn







		class    A_	(nn.Module							):
									"""simple docstring"""




									def __init__(		self			:Optional[int]       ,							lowerCAmelCase__			:nn.Module       ,							lowerCAmelCase__			:int				)				->  List[Any]:


												'''simple docstring'''




												super().__init__()
												snake_case_				:					int   =       module
												snake_case_				:					Dict   =       nn.Sequential(
												    nn.Linear(module.in_features       ,							lowerCAmelCase__       ,							bias=lowerCAmelCase__				)       ,							nn.Linear(lowerCAmelCase__       ,							module.out_features       ,							bias=lowerCAmelCase__				)       ,							)
												snake_case_				:					List[str]   =       (2.0 / (5 * min(module.in_features       ,							module.out_features				))) ** 0.5
												nn.init.normal_(self.adapter[0].weight       ,							std=lowerCAmelCase__				)
												nn.init.zeros_(self.adapter[1].weight				)
												self.adapter.to(module.weight.device				)






									def 							_A	(		self			:Optional[int]       ,							lowerCAmelCase__			:str       ,							*lowerCAmelCase__			:Optional[Any]       ,							**lowerCAmelCase__			:Tuple				)				->  List[str]:


												'''simple docstring'''




												return self.module(lowerCAmelCase__       ,							*lowerCAmelCase__       ,							**lowerCAmelCase__				) + self.adapter(lowerCAmelCase__				)







@require_bitsandbytes
@require_accelerate
@require_torch
@require_torch_gpu
@slow
class    A_	(unittest.TestCase							):
							"""simple docstring"""




							a__   		=	'''bigscience/bloom-1b7'''

							# Constant values
							a__   		=	2.109659552692574

							a__   		=	'''Hello my name is'''
							a__   		=	set()
							EXPECTED_OUTPUTS.add('''Hello my name is John and I am a professional photographer. I'''							)
							EXPECTED_OUTPUTS.add('''Hello my name is John.\nI am a friend of your father.\n'''							)
							EXPECTED_OUTPUTS.add('''Hello my name is John Doe, I am a student at the University'''							)
							a__   		=	10

							def 							_A	(		self			:List[Any]				)				->  Union[str, Any]:


										'''simple docstring'''




										snake_case_				:					Union[str, Any]   =       AutoTokenizer.from_pretrained(self.model_name				)







class    A_	(a_							):
							"""simple docstring"""




							def 							_A	(		self			:Optional[int]				)				->  Union[str, Any]:


										'''simple docstring'''




										super().setUp()

										# Models and tokenizer
										snake_case_				:					List[Any]   =       AutoModelForCausalLM.from_pretrained(
										    self.model_name       ,							torch_dtype=torch.floataa       ,							device_map="auto"				)
										snake_case_				:					str   =       AutoModelForCausalLM.from_pretrained(self.model_name       ,							load_in_abit=lowerCAmelCase__       ,							device_map="auto"				)

							def 							_A	(		self			:Any				)				->  Any:


										'''simple docstring'''




										del self.model_fpaa
										del self.model_abit

										gc.collect()
										torch.cuda.empty_cache()

							def 							_A	(		self			:Dict				)				->  Dict:


										'''simple docstring'''




										snake_case_				:					List[Any]   =       self.model_abit.config

										self.assertTrue(hasattr(lowerCAmelCase__       ,							"quantization_config"				)				)

										snake_case_				:					List[Any]   =       config.to_dict()
										snake_case_				:					Optional[int]   =       config.to_diff_dict()

										snake_case_				:					int   =       config.to_json_string()

							def 							_A	(		self			:List[str]				)				->  int:


										'''simple docstring'''




										from bitsandbytes.nn import Paramsabit

										snake_case_				:					Union[str, Any]   =       self.model_fpaa.get_memory_footprint()
										snake_case_				:					Any   =       self.model_abit.get_memory_footprint()

										self.assertAlmostEqual(mem_fpaa / mem_abit       ,							self.EXPECTED_RELATIVE_DIFFERENCE				)
										snake_case_				:					str   =       get_some_linear_layer(self.model_abit				)
										self.assertTrue(linear.weight.__class__ == Paramsabit				)

							def 							_A	(		self			:Union[str, Any]				)				->  List[Any]:


										'''simple docstring'''




										from transformers import TaPreTrainedModel

										self.model_fpaa.get_memory_footprint()
										self.model_abit.get_memory_footprint()

										for name, module in self.model_abit.named_modules():
													if isinstance(lowerCAmelCase__       ,							torch.nn.Linear				):
																if name not in ["lm_head"] + TaPreTrainedModel._keep_in_fpaa_modules:
																			# 4-bit parameters are packed in uint8 variables
																			self.assertTrue(module.weight.dtype == torch.uinta				)

							def 							_A	(		self			:Dict				)				->  Optional[int]:


										'''simple docstring'''




										snake_case_				:					Dict   =       self.tokenizer(self.input_text       ,							return_tensors="pt"				)
										snake_case_				:					Union[str, Any]   =       self.model_abit.generate(input_ids=encoded_input["input_ids"].to(0				)       ,							max_new_tokens=10				)

										self.assertIn(self.tokenizer.decode(output_sequences[0]       ,							skip_special_tokens=lowerCAmelCase__				)       ,							self.EXPECTED_OUTPUTS				)

							def 							_A	(		self			:Union[str, Any]				)				->  List[str]:


										'''simple docstring'''




										snake_case_				:					Optional[int]   =       BitsAndBytesConfig()
										snake_case_				:					int   =       True

										snake_case_				:					Tuple   =       AutoModelForCausalLM.from_pretrained(
										    self.model_name       ,							quantization_config=lowerCAmelCase__       ,							device_map="auto"				)

										snake_case_				:					List[str]   =       self.tokenizer(self.input_text       ,							return_tensors="pt"				)
										snake_case_				:					Any   =       model_abit_from_config.generate(
										    input_ids=encoded_input["input_ids"].to(0				)       ,							max_new_tokens=10				)

										self.assertIn(self.tokenizer.decode(output_sequences[0]       ,							skip_special_tokens=lowerCAmelCase__				)       ,							self.EXPECTED_OUTPUTS				)

							def 							_A	(		self			:Optional[int]				)				->  Optional[Any]:


										'''simple docstring'''




										with self.assertRaises(lowerCAmelCase__				), tempfile.TemporaryDirectory() as tmpdirname:
													self.model_abit.save_pretrained(lowerCAmelCase__				)

							def 							_A	(		self			:Optional[int]				)				->  str:


										'''simple docstring'''




										snake_case_				:					Tuple   =       BitsAndBytesConfig()

										with self.assertRaises(lowerCAmelCase__				):
													snake_case_				:					Union[str, Any]   =       AutoModelForCausalLM.from_pretrained(
													    self.model_name       ,							quantization_config=lowerCAmelCase__       ,							load_in_abit=lowerCAmelCase__       ,							device_map="auto"       ,							bnb_abit_quant_type="nf4"       ,							)

							def 							_A	(		self			:Any				)				->  int:


										'''simple docstring'''




										with self.assertRaises(lowerCAmelCase__				):
													# Tries with `str`
													self.model_abit.to("cpu"				)

										with self.assertRaises(lowerCAmelCase__				):
													# Tries with a `dtype``
													self.model_abit.to(torch.floataa				)

										with self.assertRaises(lowerCAmelCase__				):
													# Tries with a `device`
													self.model_abit.to(torch.device("cuda:0"				)				)

										with self.assertRaises(lowerCAmelCase__				):
													# Tries with a `device`
													self.model_abit.float()

										with self.assertRaises(lowerCAmelCase__				):
													# Tries with a `device`
													self.model_abit.half()

										# Test if we did not break anything
										snake_case_				:					Any   =       self.tokenizer(self.input_text       ,							return_tensors="pt"				)

										snake_case_				:					Optional[Any]   =       self.model_fpaa.to(torch.floataa				)
										snake_case_				:					Optional[int]   =       self.model_fpaa.generate(input_ids=encoded_input["input_ids"].to(0				)       ,							max_new_tokens=10				)

										# Check this does not throw an error
										snake_case_				:					Union[str, Any]   =       self.model_fpaa.to("cpu"				)

										# Check this does not throw an error
										snake_case_				:					Optional[Any]   =       self.model_fpaa.half()

										# Check this does not throw an error
										snake_case_				:					int   =       self.model_fpaa.float()






							def 							_A	(		self			:Optional[Any]				)				->  Dict:


										'''simple docstring'''




										snake_case_				:					Any   =       AutoModelForSeqaSeqLM.from_pretrained("t5-small"       ,							load_in_abit=lowerCAmelCase__       ,							device_map="auto"				)
										self.assertTrue(model.decoder.block[0].layer[2].DenseReluDense.wo.weight.dtype == torch.floataa				)







@require_bitsandbytes
@require_accelerate
@require_torch
@require_torch_gpu
@slow
class    A_	(unittest.TestCase							):
							"""simple docstring"""




							@classmethod
							def 							_A	(		cls			:List[Any]				)				->  Dict:


										'''simple docstring'''




										snake_case_				:					Any   =       "t5-small"
										snake_case_				:					Union[str, Any]   =       "google/flan-t5-small"  # flan-t5 uses dense-act instead of dense-relu-dense
										snake_case_				:					int   =       AutoTokenizer.from_pretrained(cls.model_name				)
										snake_case_				:					str   =       "Translate in German: Hello, my dog is cute"

							def 							_A	(		self			:int				)				->  Optional[Any]:


										'''simple docstring'''




										gc.collect()
										torch.cuda.empty_cache()

							def 							_A	(		self			:Dict				)				->  Any:


										'''simple docstring'''




										from transformers import TaForConditionalGeneration

										snake_case_				:					List[Any]   =       TaForConditionalGeneration._keep_in_fpaa_modules
										snake_case_				:					Optional[Any]   =       None

										# test with `t5-small`
										snake_case_				:					Any   =       TaForConditionalGeneration.from_pretrained(self.model_name       ,							load_in_abit=lowerCAmelCase__       ,							device_map="auto"				)
										snake_case_				:					Union[str, Any]   =       self.tokenizer(self.input_text       ,							return_tensors="pt"				).to(0				)
										snake_case_				:					int   =       model.generate(**lowerCAmelCase__				)

										# test with `flan-t5-small`
										snake_case_				:					Tuple   =       TaForConditionalGeneration.from_pretrained(
										    self.dense_act_model_name       ,							load_in_abit=lowerCAmelCase__       ,							device_map="auto"				)
										snake_case_				:					List[str]   =       self.tokenizer(self.input_text       ,							return_tensors="pt"				).to(0				)
										snake_case_				:					Optional[Any]   =       model.generate(**lowerCAmelCase__				)
										snake_case_				:					List[str]   =       modules






							def 							_A	(		self			:Tuple				)				->  Any:


										'''simple docstring'''




										import bitsandbytes as bnb

										from transformers import TaForConditionalGeneration

										# test with `t5-small`
										snake_case_				:					Tuple   =       TaForConditionalGeneration.from_pretrained(self.model_name       ,							load_in_abit=lowerCAmelCase__       ,							device_map="auto"				)

										# there was a bug with decoders - this test checks that it is fixed
										self.assertTrue(isinstance(model.decoder.block[0].layer[0].SelfAttention.q       ,							bnb.nn.Linearabit				)				)

										snake_case_				:					Any   =       self.tokenizer(self.input_text       ,							return_tensors="pt"				).to(0				)
										snake_case_				:					List[str]   =       model.generate(**lowerCAmelCase__				)

										# test with `flan-t5-small`
										snake_case_				:					Tuple   =       TaForConditionalGeneration.from_pretrained(
										    self.dense_act_model_name       ,							load_in_abit=lowerCAmelCase__       ,							device_map="auto"				)
										snake_case_				:					Dict   =       self.tokenizer(self.input_text       ,							return_tensors="pt"				).to(0				)
										snake_case_				:					Optional[Any]   =       model.generate(**lowerCAmelCase__				)







class    A_	(a_							):
							"""simple docstring"""




							def 							_A	(		self			:List[str]				)				->  List[str]:


										'''simple docstring'''




										super().setUp()
										# model_name
										snake_case_				:					Union[str, Any]   =       "bigscience/bloom-560m"
										snake_case_				:					Optional[Any]   =       "t5-small"

										# Different types of model

										snake_case_				:					Optional[int]   =       AutoModel.from_pretrained(self.model_name       ,							load_in_abit=lowerCAmelCase__       ,							device_map="auto"				)
										# Sequence classification model
										snake_case_				:					str   =       AutoModelForSequenceClassification.from_pretrained(
										    self.model_name       ,							load_in_abit=lowerCAmelCase__       ,							device_map="auto"				)
										# CausalLM model
										snake_case_				:					Union[str, Any]   =       AutoModelForCausalLM.from_pretrained(self.model_name       ,							load_in_abit=lowerCAmelCase__       ,							device_map="auto"				)
										# Seq2seq model
										snake_case_				:					Optional[int]   =       AutoModelForSeqaSeqLM.from_pretrained(
										    self.seq_to_seq_name       ,							load_in_abit=lowerCAmelCase__       ,							device_map="auto"				)

							def 							_A	(		self			:Dict				)				->  Optional[int]:


										'''simple docstring'''




										del self.base_model
										del self.sequence_model
										del self.model_abit
										del self.seq_to_seq_model

										gc.collect()
										torch.cuda.empty_cache()






							def 							_A	(		self			:Any				)				->  Dict:


										'''simple docstring'''




										from bitsandbytes.nn import Paramsabit

										self.assertTrue(self.base_model.h[-1].mlp.dense_ah_to_h.weight.__class__ == Paramsabit				)

										# Other heads should be nn.Parameter
										self.assertTrue(self.model_abit.lm_head.weight.__class__ == torch.nn.Parameter				)
										self.assertTrue(self.sequence_model.score.weight.__class__ == torch.nn.Parameter				)
										self.assertTrue(self.seq_to_seq_model.lm_head.weight.__class__ == torch.nn.Parameter				)







class    A_	(a_							):
							"""simple docstring"""




							def 							_A	(		self			:Optional[Any]				)				->  Optional[int]:


										'''simple docstring'''




										super().setUp()

							def 							_A	(		self			:Optional[Any]				)				->  List[Any]:


										'''simple docstring'''




										del self.pipe

										gc.collect()
										torch.cuda.empty_cache()






							def 							_A	(		self			:Any				)				->  Dict:


										'''simple docstring'''




										snake_case_				:					Optional[int]   =       pipeline(
										    "text-generation"       ,							model=self.model_name       ,							model_kwargs={"device_map": "auto", "load_in_4bit": True, "torch_dtype": torch.floataa}       ,							max_new_tokens=self.MAX_NEW_TOKENS       ,							)

										# Real second forward pass
										snake_case_				:					Dict   =       self.pipe(self.input_text				)
										self.assertIn(pipeline_output[0]["generated_text"]       ,							self.EXPECTED_OUTPUTS				)







@require_torch_multi_gpu
class    A_	(a_							):
							"""simple docstring"""




							def 							_A	(		self			:Union[str, Any]				)				->  Union[str, Any]:


										'''simple docstring'''




										super().setUp()






							def 							_A	(		self			:Optional[Any]				)				->  List[Any]:


										'''simple docstring'''




										snake_case_				:					Any   =       AutoModelForCausalLM.from_pretrained(
										    self.model_name       ,							load_in_abit=lowerCAmelCase__       ,							device_map="balanced"				)

										# Check correct device map
										self.assertEqual(set(model_parallel.hf_device_map.values()				)       ,							{0, 1}				)

										# Check that inference pass works on the model
										snake_case_				:					Any   =       self.tokenizer(self.input_text       ,							return_tensors="pt"				)

										# Second real batch
										snake_case_				:					Tuple   =       model_parallel.generate(input_ids=encoded_input["input_ids"].to(0				)       ,							max_new_tokens=10				)
										self.assertIn(self.tokenizer.decode(output_parallel[0]       ,							skip_special_tokens=lowerCAmelCase__				)       ,							self.EXPECTED_OUTPUTS				)







class    A_	(a_							):
							"""simple docstring"""




							def 							_A	(		self			:List[Any]				)				->  str:


										'''simple docstring'''




										snake_case_				:					Dict   =       "facebook/opt-350m"
										super().setUp()






							def 							_A	(		self			:Any				)				->  Tuple:


										'''simple docstring'''




										if version.parse(importlib.metadata.version("bitsandbytes"				)				) < version.parse("0.37.0"				):
													return

										# Step 1: freeze all parameters
										snake_case_				:					str   =       AutoModelForCausalLM.from_pretrained(self.model_name       ,							load_in_abit=lowerCAmelCase__				)

										self.assertEqual(set(model.hf_device_map.values()				)       ,							{torch.cuda.current_device()}				)

										for param in model.parameters():
													snake_case_				:					Optional[Any]   =       False  # freeze the model - train adapters later
													if param.ndim == 1:
																# cast the small parameters (e.g. layernorm) to fp32 for stability
																snake_case_				:					Optional[Any]   =       param.data.to(torch.floataa				)

        # Step 2: add adapters
										for _, module in model.named_modules():
													if "OPTAttention" in repr(type(lowerCAmelCase__				)				):
																snake_case_				:					Union[str, Any]   =       LoRALayer(module.q_proj       ,							rank=16				)
																snake_case_				:					Dict   =       LoRALayer(module.k_proj       ,							rank=16				)
																snake_case_				:					Optional[Any]   =       LoRALayer(module.v_proj       ,							rank=16				)

        # Step 3: dummy batch
										snake_case_				:					Optional[int]   =       self.tokenizer("Test batch "       ,							return_tensors="pt"				).to(0				)

										# Step 4: Check if the gradient is not None
										with torch.cuda.amp.autocast():
													snake_case_				:					Optional[int]   =       model.forward(**lowerCAmelCase__				)
													out.logits.norm().backward()

										for module in model.modules():
													if isinstance(lowerCAmelCase__       ,							lowerCAmelCase__				):
																self.assertTrue(module.adapter[1].weight.grad is not None				)
																self.assertTrue(module.adapter[1].weight.grad.norm().item() > 0				)
													elif isinstance(lowerCAmelCase__       ,							nn.Embedding				):
																self.assertTrue(module.weight.grad is None				)







class    A_	(a_							):
							"""simple docstring"""




							a__   		=	'''gpt2-xl'''
							a__   		=	3.3191854854152187












'''simple docstring'''




import unittest

from transformers import (
    MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING,
    TF_MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING,
    Pipeline,
    ZeroShotClassificationPipeline,
    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   :					List[str]   							=					{'''LayoutLMv2Config''', '''LayoutLMv3Config'''}







@is_pipeline_test
class    A_	(unittest.TestCase							):
							"""simple docstring"""




							a__   		=	MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING
							a__   		=	TF_MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING

							if model_mapping is not None:
														a__   		=	{config: model for config, model in model_mapping.items() if config.__name__ not in _TO_SKIP}
							if tf_model_mapping is not None:
														a__   		=	{
														    config: model for config, model in tf_model_mapping.items() if config.__name__ not in _TO_SKIP
														}

							def 							_A	(		self			:Tuple       ,							lowerCAmelCase__			:Tuple       ,							lowerCAmelCase__			:Union[str, Any]       ,							lowerCAmelCase__			:Dict				)				->  Any:


										'''simple docstring'''




										snake_case_				:					Optional[Any]   =       ZeroShotClassificationPipeline(
										    model=lowerCAmelCase__       ,							tokenizer=lowerCAmelCase__       ,							candidate_labels=["polics", "health"]				)
										return classifier, ["Who are you voting for in 2020?", "My stomach hurts."]

							def 							_A	(		self			:List[str]       ,							lowerCAmelCase__			:Optional[int]       ,							lowerCAmelCase__			:Any				)				->  Optional[Any]:


										'''simple docstring'''




										snake_case_				:					Tuple   =       classifier("Who are you voting for in 2020?"       ,							candidate_labels="politics"				)
										self.assertEqual(lowerCAmelCase__       ,							{"sequence": ANY(lowerCAmelCase__				), "labels": [ANY(lowerCAmelCase__				)], "scores": [ANY(lowerCAmelCase__				)]}				)

										# No kwarg
										snake_case_				:					List[Any]   =       classifier("Who are you voting for in 2020?"       ,							["politics"]				)
										self.assertEqual(lowerCAmelCase__       ,							{"sequence": ANY(lowerCAmelCase__				), "labels": [ANY(lowerCAmelCase__				)], "scores": [ANY(lowerCAmelCase__				)]}				)

										snake_case_				:					Dict   =       classifier("Who are you voting for in 2020?"       ,							candidate_labels=["politics"]				)
										self.assertEqual(lowerCAmelCase__       ,							{"sequence": ANY(lowerCAmelCase__				), "labels": [ANY(lowerCAmelCase__				)], "scores": [ANY(lowerCAmelCase__				)]}				)

										snake_case_				:					int   =       classifier("Who are you voting for in 2020?"       ,							candidate_labels="politics, public health"				)
										self.assertEqual(
										    lowerCAmelCase__       ,							{"sequence": ANY(lowerCAmelCase__				), "labels": [ANY(lowerCAmelCase__				), ANY(lowerCAmelCase__				)], "scores": [ANY(lowerCAmelCase__				), ANY(lowerCAmelCase__				)]}				)
										self.assertAlmostEqual(sum(nested_simplify(outputs["scores"]				)				)       ,							1.0				)

										snake_case_				:					Optional[int]   =       classifier("Who are you voting for in 2020?"       ,							candidate_labels=["politics", "public health"]				)
										self.assertEqual(
										    lowerCAmelCase__       ,							{"sequence": ANY(lowerCAmelCase__				), "labels": [ANY(lowerCAmelCase__				), ANY(lowerCAmelCase__				)], "scores": [ANY(lowerCAmelCase__				), ANY(lowerCAmelCase__				)]}				)
										self.assertAlmostEqual(sum(nested_simplify(outputs["scores"]				)				)       ,							1.0				)

										snake_case_				:					str   =       classifier(
										    "Who are you voting for in 2020?"       ,							candidate_labels="politics"       ,							hypothesis_template="This text is about {}"				)
										self.assertEqual(lowerCAmelCase__       ,							{"sequence": ANY(lowerCAmelCase__				), "labels": [ANY(lowerCAmelCase__				)], "scores": [ANY(lowerCAmelCase__				)]}				)

										# https://github.com/huggingface/transformers/issues/13846
										snake_case_				:					Dict   =       classifier(["I am happy"]       ,							["positive", "negative"]				)
										self.assertEqual(
										    lowerCAmelCase__       ,							[
										        {"sequence": ANY(lowerCAmelCase__				), "labels": [ANY(lowerCAmelCase__				), ANY(lowerCAmelCase__				)], "scores": [ANY(lowerCAmelCase__				), ANY(lowerCAmelCase__				)]}
										        for i in range(1				)
										    ]       ,							)
										snake_case_				:					Tuple   =       classifier(["I am happy", "I am sad"]       ,							["positive", "negative"]				)
										self.assertEqual(
										    lowerCAmelCase__       ,							[
										        {"sequence": ANY(lowerCAmelCase__				), "labels": [ANY(lowerCAmelCase__				), ANY(lowerCAmelCase__				)], "scores": [ANY(lowerCAmelCase__				), ANY(lowerCAmelCase__				)]}
										        for i in range(2				)
										    ]       ,							)

										with self.assertRaises(lowerCAmelCase__				):
													classifier(""       ,							candidate_labels="politics"				)

										with self.assertRaises(lowerCAmelCase__				):
													classifier(lowerCAmelCase__       ,							candidate_labels="politics"				)

										with self.assertRaises(lowerCAmelCase__				):
													classifier("Who are you voting for in 2020?"       ,							candidate_labels=""				)

										with self.assertRaises(lowerCAmelCase__				):
													classifier("Who are you voting for in 2020?"       ,							candidate_labels=lowerCAmelCase__				)

										with self.assertRaises(lowerCAmelCase__				):
													classifier(
													    "Who are you voting for in 2020?"       ,							candidate_labels="politics"       ,							hypothesis_template="Not formatting template"       ,							)

										with self.assertRaises(lowerCAmelCase__				):
													classifier(
													    "Who are you voting for in 2020?"       ,							candidate_labels="politics"       ,							hypothesis_template=lowerCAmelCase__       ,							)

										self.run_entailment_id(lowerCAmelCase__				)

							def 							_A	(		self			:List[Any]       ,							lowerCAmelCase__			:Pipeline				)				->  Union[str, Any]:


										'''simple docstring'''




										snake_case_				:					int   =       zero_shot_classifier.model.config
										snake_case_				:					Optional[int]   =       config.labelaid
										snake_case_				:					Tuple   =       zero_shot_classifier.entailment_id

										snake_case_				:					Optional[Any]   =       {"LABEL_0": 0, "LABEL_1": 1, "LABEL_2": 2}
										self.assertEqual(zero_shot_classifier.entailment_id       ,							-1				)

										snake_case_				:					Tuple   =       {"entailment": 0, "neutral": 1, "contradiction": 2}
										self.assertEqual(zero_shot_classifier.entailment_id       ,							0				)

										snake_case_				:					str   =       {"ENTAIL": 0, "NON-ENTAIL": 1}
										self.assertEqual(zero_shot_classifier.entailment_id       ,							0				)

										snake_case_				:					str   =       {"ENTAIL": 2, "NEUTRAL": 1, "CONTR": 0}
										self.assertEqual(zero_shot_classifier.entailment_id       ,							2				)

										snake_case_				:					List[str]   =       original_labelaid
										self.assertEqual(lowerCAmelCase__       ,							zero_shot_classifier.entailment_id				)

							@require_torch
							def 							_A	(		self			:Tuple				)				->  Any:


										'''simple docstring'''




										snake_case_				:					List[Any]   =       pipeline(
										    "zero-shot-classification"       ,							model="sshleifer/tiny-distilbert-base-cased-distilled-squad"       ,							framework="pt"       ,							)
										# There was a regression in 4.10 for this
										# Adding a test so we don't make the mistake again.
										# https://github.com/huggingface/transformers/issues/13381#issuecomment-912343499
										zero_shot_classifier(
										    "Who are you voting for in 2020?" * 100       ,							candidate_labels=["politics", "public health", "science"]				)

							@require_torch
							def 							_A	(		self			:Optional[Any]				)				->  Tuple:


										'''simple docstring'''




										snake_case_				:					Union[str, Any]   =       pipeline(
										    "zero-shot-classification"       ,							model="sshleifer/tiny-distilbert-base-cased-distilled-squad"       ,							framework="pt"       ,							)
										snake_case_				:					int   =       zero_shot_classifier(
										    "Who are you voting for in 2020?"       ,							candidate_labels=["politics", "public health", "science"]				)

										self.assertEqual(
										    nested_simplify(lowerCAmelCase__				)       ,							{
										        "sequence": "Who are you voting for in 2020?",
										        "labels": ["science", "public health", "politics"],
										        "scores": [0.3_3_3, 0.3_3_3, 0.3_3_3],
										    }       ,							)

							@require_tf
							def 							_A	(		self			:Union[str, Any]				)				->  Dict:


										'''simple docstring'''




										snake_case_				:					List[str]   =       pipeline(
										    "zero-shot-classification"       ,							model="sshleifer/tiny-distilbert-base-cased-distilled-squad"       ,							framework="tf"       ,							)
										snake_case_				:					Optional[int]   =       zero_shot_classifier(
										    "Who are you voting for in 2020?"       ,							candidate_labels=["politics", "public health", "science"]				)

										self.assertEqual(
										    nested_simplify(lowerCAmelCase__				)       ,							{
										        "sequence": "Who are you voting for in 2020?",
										        "labels": ["science", "public health", "politics"],
										        "scores": [0.3_3_3, 0.3_3_3, 0.3_3_3],
										    }       ,							)

							@slow
							@require_torch
							def 							_A	(		self			:Union[str, Any]				)				->  int:


										'''simple docstring'''




										snake_case_				:					int   =       pipeline("zero-shot-classification"       ,							model="roberta-large-mnli"       ,							framework="pt"				)
										snake_case_				:					str   =       zero_shot_classifier(
										    "Who are you voting for in 2020?"       ,							candidate_labels=["politics", "public health", "science"]				)

										self.assertEqual(
										    nested_simplify(lowerCAmelCase__				)       ,							{
										        "sequence": "Who are you voting for in 2020?",
										        "labels": ["politics", "public health", "science"],
										        "scores": [0.9_7_6, 0.0_1_5, 0.0_0_9],
										    }       ,							)
										snake_case_				:					Optional[int]   =       zero_shot_classifier(
										    "The dominant sequence transduction models are based on complex recurrent or convolutional neural networks"
										    " in an encoder-decoder configuration. The best performing models also connect the encoder and decoder"
										    " through an attention mechanism. We propose a new simple network architecture, the Transformer, based"
										    " solely on attention mechanisms, dispensing with recurrence and convolutions entirely. Experiments on two"
										    " machine translation tasks show these models to be superior in quality while being more parallelizable"
										    " and requiring significantly less time to train. Our model achieves 28.4 BLEU on the WMT 2014"
										    " English-to-German translation task, improving over the existing best results, including ensembles by"
										    " over 2 BLEU. On the WMT 2014 English-to-French translation task, our model establishes a new"
										    " single-model state-of-the-art BLEU score of 41.8 after training for 3.5 days on eight GPUs, a small"
										    " fraction of the training costs of the best models from the literature. We show that the Transformer"
										    " generalizes well to other tasks by applying it successfully to English constituency parsing both with"
										    " large and limited training data."       ,							candidate_labels=["machine learning", "statistics", "translation", "vision"]       ,							multi_label=lowerCAmelCase__       ,							)
										self.assertEqual(
										    nested_simplify(lowerCAmelCase__				)       ,							{
										        "sequence": (
										            "The dominant sequence transduction models are based on complex recurrent or convolutional neural"
										            " networks in an encoder-decoder configuration. The best performing models also connect the"
										            " encoder and decoder through an attention mechanism. We propose a new simple network"
										            " architecture, the Transformer, based solely on attention mechanisms, dispensing with recurrence"
										            " and convolutions entirely. Experiments on two machine translation tasks show these models to be"
										            " superior in quality while being more parallelizable and requiring significantly less time to"
										            " train. Our model achieves 28.4 BLEU on the WMT 2014 English-to-German translation task,"
										            " improving over the existing best results, including ensembles by over 2 BLEU. On the WMT 2014"
										            " English-to-French translation task, our model establishes a new single-model state-of-the-art"
										            " BLEU score of 41.8 after training for 3.5 days on eight GPUs, a small fraction of the training"
										            " costs of the best models from the literature. We show that the Transformer generalizes well to"
										            " other tasks by applying it successfully to English constituency parsing both with large and"
										            " limited training data."
										        ),
										        "labels": ["translation", "machine learning", "vision", "statistics"],
										        "scores": [0.8_1_7, 0.7_1_3, 0.0_1_8, 0.0_1_8],
										    }       ,							)






							@slow
							@require_tf
							def 							_A	(		self			:List[str]				)				->  str:


										'''simple docstring'''




										snake_case_				:					int   =       pipeline("zero-shot-classification"       ,							model="roberta-large-mnli"       ,							framework="tf"				)
										snake_case_				:					Optional[Any]   =       zero_shot_classifier(
										    "Who are you voting for in 2020?"       ,							candidate_labels=["politics", "public health", "science"]				)

										self.assertEqual(
										    nested_simplify(lowerCAmelCase__				)       ,							{
										        "sequence": "Who are you voting for in 2020?",
										        "labels": ["politics", "public health", "science"],
										        "scores": [0.9_7_6, 0.0_1_5, 0.0_0_9],
										    }       ,							)
										snake_case_				:					Tuple   =       zero_shot_classifier(
										    "The dominant sequence transduction models are based on complex recurrent or convolutional neural networks"
										    " in an encoder-decoder configuration. The best performing models also connect the encoder and decoder"
										    " through an attention mechanism. We propose a new simple network architecture, the Transformer, based"
										    " solely on attention mechanisms, dispensing with recurrence and convolutions entirely. Experiments on two"
										    " machine translation tasks show these models to be superior in quality while being more parallelizable"
										    " and requiring significantly less time to train. Our model achieves 28.4 BLEU on the WMT 2014"
										    " English-to-German translation task, improving over the existing best results, including ensembles by"
										    " over 2 BLEU. On the WMT 2014 English-to-French translation task, our model establishes a new"
										    " single-model state-of-the-art BLEU score of 41.8 after training for 3.5 days on eight GPUs, a small"
										    " fraction of the training costs of the best models from the literature. We show that the Transformer"
										    " generalizes well to other tasks by applying it successfully to English constituency parsing both with"
										    " large and limited training data."       ,							candidate_labels=["machine learning", "statistics", "translation", "vision"]       ,							multi_label=lowerCAmelCase__       ,							)
										self.assertEqual(
										    nested_simplify(lowerCAmelCase__				)       ,							{
										        "sequence": (
										            "The dominant sequence transduction models are based on complex recurrent or convolutional neural"
										            " networks in an encoder-decoder configuration. The best performing models also connect the"
										            " encoder and decoder through an attention mechanism. We propose a new simple network"
										            " architecture, the Transformer, based solely on attention mechanisms, dispensing with recurrence"
										            " and convolutions entirely. Experiments on two machine translation tasks show these models to be"
										            " superior in quality while being more parallelizable and requiring significantly less time to"
										            " train. Our model achieves 28.4 BLEU on the WMT 2014 English-to-German translation task,"
										            " improving over the existing best results, including ensembles by over 2 BLEU. On the WMT 2014"
										            " English-to-French translation task, our model establishes a new single-model state-of-the-art"
										            " BLEU score of 41.8 after training for 3.5 days on eight GPUs, a small fraction of the training"
										            " costs of the best models from the literature. We show that the Transformer generalizes well to"
										            " other tasks by applying it successfully to English constituency parsing both with large and"
										            " limited training data."
										        ),
										        "labels": ["translation", "machine learning", "vision", "statistics"],
										        "scores": [0.8_1_7, 0.7_1_3, 0.0_1_8, 0.0_1_8],
										    }       ,							)




