


'''simple docstring'''
from ...processing_utils import ProcessorMixin
from ...tokenization_utils_base import BatchEncoding

class     _lowerCamelCase       (     snake_case_					):




 '''simple docstring'''
 __lowercase					:		Union[str, Any]     				=    '''ClapFeatureExtractor'''
 __lowercase					:		List[str]     				=    ('''RobertaTokenizer''', '''RobertaTokenizerFast''')


 def __init__(   self   ,   __lowercase   ,   __lowercase    ):

  """simple docstring"""







  super().__init__(__lowercase   ,   __lowercase    )


 def __call__(   self   ,   __lowercase=None   ,   __lowercase=None   ,   __lowercase=None   ,   **__lowercase    ):

  """simple docstring"""







  __A	:		Any	  =      kwargs.pop('sampling_rate'   ,   __lowercase    )

  if text is None and audios is None:
   raise ValueError('You have to specify either text or audios. Both cannot be none.'    )

  if text is not None:
   __A	:		List[str]	  =      self.tokenizer(__lowercase   ,   return_tensors=__lowercase   ,   **__lowercase    )

  if audios is not None:
   __A	:		Dict	  =      self.feature_extractor(
       __lowercase   ,   sampling_rate=__lowercase   ,   return_tensors=__lowercase   ,   **__lowercase    )

  if text is not None and audios is not None:
   __A	:		Optional[int]	  =      audio_features.input_features
   return encoding
  elif text is not None:
   return encoding
  else:
   return BatchEncoding(data=dict(**__lowercase    )   ,   tensor_type=__lowercase    )


 def 			snake_case__ (   self   ,   *__lowercase   ,   **__lowercase    ):

  """simple docstring"""







  return self.tokenizer.batch_decode(*__lowercase   ,   **__lowercase    )


 def 			snake_case__ (   self   ,   *__lowercase   ,   **__lowercase    ):

  """simple docstring"""







  return self.tokenizer.decode(*__lowercase   ,   **__lowercase    )







 @property
 def 			snake_case__ (   self    ):

  """simple docstring"""







  __A	:		Optional[int]	  =      self.tokenizer.model_input_names
  __A	:		int	  =      self.feature_extractor.model_input_names
  return list(dict.fromkeys(tokenizer_input_names + feature_extractor_input_names    )    )










'''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.
from typing import TYPE_CHECKING

import torch

from ..models.auto import AutoModelForVisualQuestionAnswering, AutoProcessor
from ..utils import requires_backends
from .base import PipelineTool


if TYPE_CHECKING:
 from PIL import Image

class     _lowerCamelCase       (     snake_case_					):




 '''simple docstring'''
 __lowercase					:		int     				=    '''dandelin/vilt-b32-finetuned-vqa'''
 __lowercase					:		int     				=    (
     '''This is a tool that answers a question about an image. It takes an input named `image` which should be the '''
     '''image containing the information, as well as a `question` which should be the question in English. It '''
     '''returns a text that is the answer to the question.'''
 )
 __lowercase					:		Union[str, Any]     				=    '''image_qa'''
 __lowercase					:		Optional[Any]     				=    AutoProcessor
 __lowercase					:		Tuple     				=    AutoModelForVisualQuestionAnswering

 __lowercase					:		Tuple     				=    ['''image''', '''text''']
 __lowercase					:		List[str]     				=    ['''text''']


 def __init__(   self   ,   *__lowercase   ,   **__lowercase    ):

  """simple docstring"""







  requires_backends(self   ,   ['vision']    )
  super().__init__(*__lowercase   ,   **__lowercase    )


 def 			snake_case__ (   self   ,   __lowercase   ,   __lowercase    ):

  """simple docstring"""







  return self.pre_processor(__lowercase   ,   __lowercase   ,   return_tensors='pt'    )


 def 			snake_case__ (   self   ,   __lowercase    ):

  """simple docstring"""







  with torch.no_grad():
   return self.model(**__lowercase    ).logits







 def 			snake_case__ (   self   ,   __lowercase    ):

  """simple docstring"""







  __A	:		List[str]	  =      outputs.argmax(-1    ).item()
  return self.model.config.idalabel[idx]






