


"""simple docstring"""
# Copyright 2023 The HuggingFace Inc. team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import torch

from ..models.auto import AutoModelForSequenceClassification, AutoTokenizer
from .base import PipelineTool




class 	lowercase__				(					A_				):
   __UpperCAmelCase							       =					'''facebook/bart-large-mnli'''
   __UpperCAmelCase							       =					(
       '''This is a tool that classifies an English text using provided labels. It takes two inputs: `text`, which '''
       '''should be the text to classify, and `labels`, which should be the list of labels to use for classification. '''
       '''It returns the most likely label in the list of provided `labels` for the input text.'''
   )
   __UpperCAmelCase							       =					'''text_classifier'''
   __UpperCAmelCase							       =					AutoTokenizer
   __UpperCAmelCase							       =					AutoModelForSequenceClassification

   __UpperCAmelCase							       =					['''text''', ['''text''']]
   __UpperCAmelCase							       =					['''text''']





   def 		UpperCamelCase_  (							self)  ->  Union[str, Any]:
      super().setup()
      _lowerCamelCase	:					List[Any]   =		self.model.config
      _lowerCamelCase	:					Union[str, Any]   =		-1
      for idx, label in config.idalabel.items():
         if label.lower().startswith("""entail"""):
            _lowerCamelCase	:					Tuple   =		int(SCREAMING_SNAKE_CASE)
      if self.entailment_id == -1:
         raise ValueError("""Could not determine the entailment ID from the model config, please pass it at init.""")





   def 		UpperCamelCase_  (							self      ,   SCREAMING_SNAKE_CASE      ,   SCREAMING_SNAKE_CASE)  ->  Any:
      _lowerCamelCase	:					Union[str, Any]   =		labels
      return self.pre_processor(
          [text] * len(SCREAMING_SNAKE_CASE)      ,   [F'This example is {label}' for label in labels]      ,   return_tensors="""pt"""      ,   padding="""max_length"""      ,   )





   def 		UpperCamelCase_  (							self      ,   SCREAMING_SNAKE_CASE)  ->  Any:
      _lowerCamelCase	:					int   =		outputs.logits
      _lowerCamelCase	:					List[Any]   =		torch.argmax(logits[:, 2]).item()
      return self._labels[label_id]





"""simple docstring"""
from datetime import datetime

import matplotlib.pyplot as plt
import torch

def 				_snake_case      (   __snake_case							:      List[str]   ):




   """simple docstring"""







   for param in module.parameters():
      _lowerCamelCase	:					Optional[Any]   =		False

def 				_snake_case      (   ):




   """simple docstring"""







   _lowerCamelCase	:					Any   =		"""cuda""" if torch.cuda.is_available() else """cpu"""
   if torch.backends.mps.is_available() and torch.backends.mps.is_built():
      _lowerCamelCase	:					Any   =		"""mps"""
   if device == "mps":
      print(
          """WARNING: MPS currently doesn't seem to work, and messes up backpropagation without any visible torch"""
          """ errors. I recommend using CUDA on a colab notebook or CPU instead if you're facing inexplicable issues"""
          """ with generations."""   )
   return device

def 				_snake_case      (   __snake_case							:      Union[str, Any]   ):




   """simple docstring"""







   _lowerCamelCase	:					int   =		plt.imshow(__snake_case   )
   fig.axes.get_xaxis().set_visible(__snake_case   )
   fig.axes.get_yaxis().set_visible(__snake_case   )
   plt.show()





def 				_snake_case      (   ):




   """simple docstring"""







   _lowerCamelCase	:					Tuple   =		datetime.now()
   _lowerCamelCase	:					Optional[Any]   =		current_time.strftime("""%H:%M:%S"""   )
   return timestamp

