

from typing import List, Optional, Union

from ...image_utils import ImageInput
from ...processing_utils import ProcessorMixin
from ...tokenization_utils_base import BatchEncoding, PaddingStrategy, PreTokenizedInput, TextInput, TruncationStrategy
from ...utils import TensorType



class 					_a		(__magic_name__       ):


					'''simple docstring'''






					UpperCAmelCase__:     Dict													= ['''image_processor''', '''tokenizer''']
					UpperCAmelCase__:     Optional[Any]													= '''BlipImageProcessor'''
					UpperCAmelCase__:     str													= '''AutoTokenizer'''






					def __init__(				self					, A__					, A__    ):
						A__							:					List[Any]       =	False
						super().__init__(A__					, A__    )
						A__							:					Optional[Any]       =	self.image_processor






					def __call__(				self					, A__ = None					, A__ = None					, A__ = True					, A__ = False					, A__ = None					, A__ = None					, A__ = 0					, A__ = None					, A__ = None					, A__ = False					, A__ = False					, A__ = False					, A__ = False					, A__ = False					, A__ = True					, A__ = None					, **A__					, ):
						if images is None and text is None:
							raise ValueError("""You have to specify either images or text."""    )

						# Get only text
						if images is None:
							A__							:					Optional[int]       =	self.tokenizer
							A__							:					int       =	self.tokenizer(
							    text=A__					, add_special_tokens=A__					, padding=A__					, truncation=A__					, max_length=A__					, stride=A__					, pad_to_multiple_of=A__					, return_attention_mask=A__					, return_overflowing_tokens=A__					, return_special_tokens_mask=A__					, return_offsets_mapping=A__					, return_token_type_ids=A__					, return_length=A__					, verbose=A__					, return_tensors=A__					, **A__					, )
							return text_encoding

						# add pixel_values
						A__							:					Union[str, Any]       =	self.image_processor(A__					, return_tensors=A__    )

						if text is not None:
							A__							:					Tuple       =	self.tokenizer(
							    text=A__					, add_special_tokens=A__					, padding=A__					, truncation=A__					, max_length=A__					, stride=A__					, pad_to_multiple_of=A__					, return_attention_mask=A__					, return_overflowing_tokens=A__					, return_special_tokens_mask=A__					, return_offsets_mapping=A__					, return_token_type_ids=A__					, return_length=A__					, verbose=A__					, return_tensors=A__					, **A__					, )
						else:
							A__							:					List[str]       =	None

						if text_encoding is not None:
							encoding_image_processor.update(A__    )

						return encoding_image_processor






					def 						__A    (				self					, *A__					, **A__    ):
						return self.tokenizer.batch_decode(*A__					, **A__    )






					def 						__A    (				self					, *A__					, **A__    ):
						return self.tokenizer.decode(*A__					, **A__    )






					@property
					# Copied from transformers.models.blip.processing_blip.BlipProcessor.model_input_names
					def 						__A    (				self    ):
						A__							:					str       =	self.tokenizer.model_input_names
						A__							:					Union[str, Any]       =	self.image_processor.model_input_names
						return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names    )    )






# tests directory-specific settings - this file is run automatically
# by pytest before any tests are run

import doctest
import sys
import warnings
from os.path import abspath, dirname, join

import _pytest

from transformers.testing_utils import HfDoctestModule, HfDocTestParser


# allow having multiple repository checkouts and not needing to remember to rerun
# 'pip install -e .[dev]' when switching between checkouts and running tests.
A_ :				Optional[int]						 =    abspath(join(dirname(__file__), 'src'))
sys.path.insert(1, git_repo_path)

# silence FutureWarning warnings in tests since often we can't act on them until
# they become normal warnings - i.e. the tests still need to test the current functionality
warnings.simplefilter(action='ignore', category=FutureWarning)

def 		UpperCamelCase      (lowercase_:				List[str]      )  ->   Any:
	config.addinivalue_line(
	    """markers"""					,   """is_pt_tf_cross_test: mark test to run only when PT and TF interactions are tested"""      )
	config.addinivalue_line(
	    """markers"""					,   """is_pt_flax_cross_test: mark test to run only when PT and FLAX interactions are tested"""      )
	config.addinivalue_line("""markers"""					,   """is_pipeline_test: mark test to run only when pipelines are tested"""      )
	config.addinivalue_line("""markers"""					,   """is_staging_test: mark test to run only in the staging environment"""      )
	config.addinivalue_line("""markers"""					,   """accelerate_tests: mark test that require accelerate"""      )
	config.addinivalue_line("""markers"""					,   """tool_tests: mark the tool tests that are run on their specific schedule"""      )

def 		UpperCamelCase      (lowercase_:				Optional[int]      )  ->   Optional[Any]:
	from transformers.testing_utils import pytest_addoption_shared

	pytest_addoption_shared(lowercase_      )

def 		UpperCamelCase      (lowercase_:				List[str]      )  ->   Optional[Any]:
	from transformers.testing_utils import pytest_terminal_summary_main

	A__							:					List[Any]       =	terminalreporter.config.getoption("""--make-reports"""      )
	if make_reports:
		pytest_terminal_summary_main(lowercase_					,   id=lowercase_      )

def 		UpperCamelCase      (lowercase_:				Union[str, Any]					,   lowercase_:				int      )  ->   List[str]:
	# If no tests are collected, pytest exists with code 5, which makes the CI fail.
	if exitstatus == 5:
		A__							:					Tuple       =	0


# Doctest custom flag to ignore output.
A_ :				Tuple						 =    doctest.register_optionflag('IGNORE_RESULT')

A_ :				Dict						 =    doctest.OutputChecker



class 					_a		(__magic_name__       ):


					'''simple docstring'''






					def 						__A    (				self					, A__					, A__					, A__    ):
						if IGNORE_RESULT & optionflags:
							return True
						return OutputChecker.check_output(self					, A__					, A__					, A__    )



A_ :				str						 =    CustomOutputChecker
A_ :				Dict						 =    HfDoctestModule


A_ :				Optional[int]						 =    HfDocTestParser



