


'''simple docstring'''
from typing import Optional

from ..utils.logging import get_logger
from .audio_classificiation import AudioClassification
from .automatic_speech_recognition import AutomaticSpeechRecognition
from .base import TaskTemplate
from .image_classification import ImageClassification
from .language_modeling import LanguageModeling
from .question_answering import QuestionAnsweringExtractive
from .summarization import Summarization
from .text_classification import TextClassification


__SCREAMING_SNAKE_CASE				:							Any		       =		[
    '''AutomaticSpeechRecognition''',
    '''AudioClassification''',
    '''ImageClassification''',
    '''LanguageModeling''',
    '''QuestionAnsweringExtractive''',
    '''Summarization''',
    '''TaskTemplate''',
    '''TextClassification''',
]

__SCREAMING_SNAKE_CASE				:							Dict		       =		get_logger(__name__)


__SCREAMING_SNAKE_CASE				:							int		       =		{
    AutomaticSpeechRecognition.task: AutomaticSpeechRecognition,
    AudioClassification.task: AudioClassification,
    ImageClassification.task: ImageClassification,
    LanguageModeling.task: LanguageModeling,
    QuestionAnsweringExtractive.task: QuestionAnsweringExtractive,
    Summarization.task: Summarization,
    TextClassification.task: TextClassification,
}







def 			a_							(  UpperCamelCase_   ):
							A_ 						=		task_template_dict.get("task"   )
							if task_name is None:
														logger.warning(f"Couldn't find template for task '{task_name}'. Available templates: {list(UpperCamelCase_   )}"   )
														return None
							A_ 						=		NAMEaTEMPLATE.get(UpperCamelCase_   )
							return template.from_dict(UpperCamelCase_   )



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






class 				__lowerCAmelCase      (      lowercase	):

						"""simple docstring"""






						_UpperCAmelCase		:					int      	=["image_processor", "tokenizer"]
						_UpperCAmelCase		:					Dict      	="EfficientNetImageProcessor"
						_UpperCAmelCase		:					Union[str, Any]      	=("BertTokenizer", "BertTokenizerFast")






						def __init__(     self       :			List[Any]   ,     lowerCAmelCase       :			Any   ,     lowerCAmelCase       :			int  ):
													super().__init__(lowerCAmelCase   ,     lowerCAmelCase  )






						def __call__(     self       :			str   ,     lowerCAmelCase       :			Tuple=None   ,     lowerCAmelCase       :			List[Any]=None   ,     lowerCAmelCase       :			Optional[int]="max_length"   ,     lowerCAmelCase       :			Tuple=64   ,     lowerCAmelCase       :			Dict=None   ,     **lowerCAmelCase       :			Any  ):
													if text is None and images is None:
																				raise ValueError("You have to specify either text or images. Both cannot be none."  )

													if text is not None:
																				A_ 						=		self.tokenizer(
																				    lowerCAmelCase   ,     padding=lowerCAmelCase   ,     max_length=lowerCAmelCase   ,     return_tensors=lowerCAmelCase   ,     **lowerCAmelCase  )

													if images is not None:
																				A_ 						=		self.image_processor(lowerCAmelCase   ,     return_tensors=lowerCAmelCase   ,     **lowerCAmelCase  )

													if text is not None and images is not None:
																				A_ 						=		image_features.pixel_values
																				return encoding
													elif text is not None:
																				return encoding
													else:
																				return BatchEncoding(data=dict(**lowerCAmelCase  )   ,     tensor_type=lowerCAmelCase  )






						def 							_UpperCAmelCase					(     self       :			List[str]   ,     *lowerCAmelCase       :			Optional[int]   ,     **lowerCAmelCase       :			str  ):
													return self.tokenizer.batch_decode(*lowerCAmelCase   ,     **lowerCAmelCase  )






						def 							_UpperCAmelCase					(     self       :			str   ,     *lowerCAmelCase       :			Any   ,     **lowerCAmelCase       :			Dict  ):
													return self.tokenizer.decode(*lowerCAmelCase   ,     **lowerCAmelCase  )






						@property
						def 							_UpperCAmelCase					(     self       :			List[Any]  ):
													A_ 						=		self.tokenizer.model_input_names
													A_ 						=		self.image_processor.model_input_names
													return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names  )  )





