



"""simple docstring"""

import collections
import types

import numpy as np

from ..utils import (
    add_end_docstrings,
    is_tensorflow_probability_available,
    is_tf_available,
    is_torch_available,
    requires_backends,
)
from .base import PIPELINE_INIT_ARGS, ArgumentHandler, Dataset, Pipeline, PipelineException


if is_torch_available():
							import torch

							from ..models.auto.modeling_auto import (
							    MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING,
							    MODEL_FOR_TABLE_QUESTION_ANSWERING_MAPPING,
							)

if is_tf_available() and is_tensorflow_probability_available():
							import tensorflow as tf
							import tensorflow_probability as tfp

							from ..models.auto.modeling_tf_auto import (
							    TF_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING,
							    TF_MODEL_FOR_TABLE_QUESTION_ANSWERING_MAPPING,
							)
class 						lowerCAmelCase__	(  _lowerCamelCase   ):


	'''simple docstring'''







	def __call__(			self							:					List[Any]    ,					_SCREAMING_SNAKE_CASE							:					Optional[Any]=None    ,					_SCREAMING_SNAKE_CASE							:					Any=None    ,					**_SCREAMING_SNAKE_CASE							:					List[Any]						)	->  Tuple:





					"""simple docstring"""


					requires_backends(self    ,					'pandas'						)
					import pandas as pd

					if table is None:
									raise ValueError('Keyword argument `table` cannot be None.'						)
					elif query is None:
									if isinstance(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE						) and table.get('query'						) is not None and table.get('table'						) is not None:
													SCREAMING_SNAKE_CASE	:       Any 							=    [table]
									elif isinstance(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE						) and len(_SCREAMING_SNAKE_CASE						) > 0:
													if not all(isinstance(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE						) for d in table						):
																	raise ValueError(
																	    f"""Keyword argument `table` should be a list of dict, but is {(type(_SCREAMING_SNAKE_CASE						) for d in table)}"""						)

													if table[0].get('query'						) is not None and table[0].get('table'						) is not None:
																	SCREAMING_SNAKE_CASE	:       Dict 							=    table
													else:
																	raise ValueError(
																	    'If keyword argument `table` is a list of dictionaries, each dictionary should have a `table`'
																	    f""" and `query` key, but only dictionary has keys {table[0].keys()} `table` and `query` keys."""						)
									elif Dataset is not None and isinstance(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE						) or isinstance(_SCREAMING_SNAKE_CASE    ,					types.GeneratorType						):
													return table
									else:
													raise ValueError(
													    'Invalid input. Keyword argument `table` should be either of type `dict` or `list`, but '
													    f"""is {type(_SCREAMING_SNAKE_CASE						)})"""						)
					else:
									SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    [{'table': table, 'query': query}]

					for tqa_pipeline_input in tqa_pipeline_inputs:
									if not isinstance(tqa_pipeline_input['table']    ,					pd.DataFrame						):
													if tqa_pipeline_input["table"] is None:
																	raise ValueError('Table cannot be None.'						)

													SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    pd.DataFrame(tqa_pipeline_input['table']						)

					return tqa_pipeline_inputs




@add_end_docstrings(_lowerCamelCase   )
class 						lowerCAmelCase__	(  _lowerCamelCase   ):


	'''simple docstring'''







	_SCREAMING_SNAKE_CASE  :		Tuple     	=   '''table,query'''





	def __init__(			self							:					List[str]    ,					_SCREAMING_SNAKE_CASE							:					Tuple=TableQuestionAnsweringArgumentHandler()    ,					*_SCREAMING_SNAKE_CASE							:					Optional[int]    ,					**_SCREAMING_SNAKE_CASE							:					List[Any]						)	->  List[str]:





					"""simple docstring"""


					super().__init__(*_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE						)
					SCREAMING_SNAKE_CASE	:       Dict 							=    args_parser

					self.check_model_type(
					    dict(
					        TF_MODEL_FOR_TABLE_QUESTION_ANSWERING_MAPPING.items()
					        + TF_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING.items()						)
					    if self.framework == 'tf'
					    else dict(
					        MODEL_FOR_TABLE_QUESTION_ANSWERING_MAPPING.items() + MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING.items()						)						)

					SCREAMING_SNAKE_CASE	:       int 							=    bool(getattr(self.model.config    ,					'aggregation_labels'    ,					_SCREAMING_SNAKE_CASE						)						) and bool(
					    getattr(self.model.config    ,					'num_aggregation_labels'    ,					_SCREAMING_SNAKE_CASE						)						)
					SCREAMING_SNAKE_CASE	:       List[Any] 							=    'tapas' if hasattr(self.model.config    ,					'aggregation_labels'						) else None





	def  _lowerCAmelCase    (			self							:					Union[str, Any]    ,					**_SCREAMING_SNAKE_CASE							:					Dict						)	->  List[str]:





					"""simple docstring"""


					return self.model(**_SCREAMING_SNAKE_CASE						)





	def  _lowerCAmelCase    (			self							:					int    ,					**_SCREAMING_SNAKE_CASE							:					str						)	->  Dict:





					"""simple docstring"""


					if self.framework == "pt":
									SCREAMING_SNAKE_CASE	:       Tuple 							=    []
									SCREAMING_SNAKE_CASE	:       List[str] 							=    []
									SCREAMING_SNAKE_CASE	:       Tuple 							=    None
									SCREAMING_SNAKE_CASE	:       Optional[int] 							=    inputs['input_ids'].shape[0]

									SCREAMING_SNAKE_CASE	:       Any 							=    inputs['input_ids'].to(self.device						)
									SCREAMING_SNAKE_CASE	:       Optional[int] 							=    inputs['attention_mask'].to(self.device						)
									SCREAMING_SNAKE_CASE	:       Tuple 							=    inputs['token_type_ids'].to(self.device						)
									SCREAMING_SNAKE_CASE	:       List[str] 							=    None

									for index in range(_SCREAMING_SNAKE_CASE						):
													# If sequences have already been processed, the token type IDs will be created according to the previous
													# answer.
													if prev_answers is not None:
																	SCREAMING_SNAKE_CASE	:       str 							=    token_type_ids_example[:, 3]  # shape (seq_len,)
																	SCREAMING_SNAKE_CASE	:       Optional[Any] 							=    np.zeros_like(prev_labels_example.cpu().numpy()						)  # shape (seq_len,)

																	SCREAMING_SNAKE_CASE	:       Any 							=    token_type_ids[index]  # shape (seq_len, 7)
																	for i in range(model_labels.shape[0]						):
																					SCREAMING_SNAKE_CASE	:       Any 							=    token_type_ids_example[:, 0].tolist()[i]
																					SCREAMING_SNAKE_CASE	:       Dict 							=    token_type_ids_example[:, 1].tolist()[i] - 1
																					SCREAMING_SNAKE_CASE	:       Any 							=    token_type_ids_example[:, 2].tolist()[i] - 1

																					if row_id >= 0 and col_id >= 0 and segment_id == 1:
																									SCREAMING_SNAKE_CASE	:       str 							=    int(prev_answers[(col_id, row_id)]						)

																	SCREAMING_SNAKE_CASE	:       int 							=    torch.from_numpy(_SCREAMING_SNAKE_CASE						).type(torch.long						).to(self.device						)

													SCREAMING_SNAKE_CASE	:       List[Any] 							=    input_ids[index]
													SCREAMING_SNAKE_CASE	:       Dict 							=    attention_mask[index]  # shape (seq_len,)
													SCREAMING_SNAKE_CASE	:       Any 							=    token_type_ids[index]  # shape (seq_len, 7)
													SCREAMING_SNAKE_CASE	:       Any 							=    self.model(
													    input_ids=input_ids_example.unsqueeze(0						)    ,					attention_mask=attention_mask_example.unsqueeze(0						)    ,					token_type_ids=token_type_ids_example.unsqueeze(0						)    ,					)
													SCREAMING_SNAKE_CASE	:       Any 							=    outputs.logits

													if self.aggregate:
																	all_aggregations.append(outputs.logits_aggregation						)

													all_logits.append(_SCREAMING_SNAKE_CASE						)

													SCREAMING_SNAKE_CASE	:       Optional[Any] 							=    torch.distributions.Bernoulli(logits=_SCREAMING_SNAKE_CASE						)
													SCREAMING_SNAKE_CASE	:       str 							=    dist_per_token.probs * attention_mask_example.type(torch.floataa						).to(
													    dist_per_token.probs.device						)

													SCREAMING_SNAKE_CASE	:       List[str] 							=    collections.defaultdict(_SCREAMING_SNAKE_CASE						)
													for i, p in enumerate(probabilities.squeeze().tolist()						):
																	SCREAMING_SNAKE_CASE	:       Tuple 							=    token_type_ids_example[:, 0].tolist()[i]
																	SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    token_type_ids_example[:, 1].tolist()[i] - 1
																	SCREAMING_SNAKE_CASE	:       Optional[int] 							=    token_type_ids_example[:, 2].tolist()[i] - 1
																	if col >= 0 and row >= 0 and segment_id == 1:
																					coords_to_probs[(col, row)].append(_SCREAMING_SNAKE_CASE						)

													SCREAMING_SNAKE_CASE	:       List[str] 							=    {key: np.array(coords_to_probs[key]						).mean() > 0.5 for key in coords_to_probs}

									SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    torch.cat(tuple(_SCREAMING_SNAKE_CASE						)    ,					0						)

									return (logits_batch,) if not self.aggregate else (logits_batch, torch.cat(tuple(_SCREAMING_SNAKE_CASE						)    ,					0						))
					else:
									SCREAMING_SNAKE_CASE	:       int 							=    []
									SCREAMING_SNAKE_CASE	:       int 							=    []
									SCREAMING_SNAKE_CASE	:       List[str] 							=    None
									SCREAMING_SNAKE_CASE	:       Any 							=    inputs['input_ids'].shape[0]

									SCREAMING_SNAKE_CASE	:       Optional[int] 							=    inputs['input_ids']
									SCREAMING_SNAKE_CASE	:       List[Any] 							=    inputs['attention_mask']
									SCREAMING_SNAKE_CASE	:       str 							=    inputs['token_type_ids'].numpy()
									SCREAMING_SNAKE_CASE	:       str 							=    None

									for index in range(_SCREAMING_SNAKE_CASE						):
													# If sequences have already been processed, the token type IDs will be created according to the previous
													# answer.
													if prev_answers is not None:
																	SCREAMING_SNAKE_CASE	:       str 							=    token_type_ids_example[:, 3]  # shape (seq_len,)
																	SCREAMING_SNAKE_CASE	:       Any 							=    np.zeros_like(_SCREAMING_SNAKE_CASE    ,					dtype=np.intaa						)  # shape (seq_len,)

																	SCREAMING_SNAKE_CASE	:       Optional[int] 							=    token_type_ids[index]  # shape (seq_len, 7)
																	for i in range(model_labels.shape[0]						):
																					SCREAMING_SNAKE_CASE	:       int 							=    token_type_ids_example[:, 0].tolist()[i]
																					SCREAMING_SNAKE_CASE	:       int 							=    token_type_ids_example[:, 1].tolist()[i] - 1
																					SCREAMING_SNAKE_CASE	:       Tuple 							=    token_type_ids_example[:, 2].tolist()[i] - 1

																					if row_id >= 0 and col_id >= 0 and segment_id == 1:
																									SCREAMING_SNAKE_CASE	:       int 							=    int(prev_answers[(col_id, row_id)]						)

																	SCREAMING_SNAKE_CASE	:       Any 							=    model_labels

													SCREAMING_SNAKE_CASE	:       Any 							=    input_ids[index]
													SCREAMING_SNAKE_CASE	:       str 							=    attention_mask[index]  # shape (seq_len,)
													SCREAMING_SNAKE_CASE	:       List[Any] 							=    token_type_ids[index]  # shape (seq_len, 7)
													SCREAMING_SNAKE_CASE	:       str 							=    self.model(
													    input_ids=np.expand_dims(_SCREAMING_SNAKE_CASE    ,					axis=0						)    ,					attention_mask=np.expand_dims(_SCREAMING_SNAKE_CASE    ,					axis=0						)    ,					token_type_ids=np.expand_dims(_SCREAMING_SNAKE_CASE    ,					axis=0						)    ,					)
													SCREAMING_SNAKE_CASE	:       int 							=    outputs.logits

													if self.aggregate:
																	all_aggregations.append(outputs.logits_aggregation						)

													all_logits.append(_SCREAMING_SNAKE_CASE						)

													SCREAMING_SNAKE_CASE	:       List[Any] 							=    tfp.distributions.Bernoulli(logits=_SCREAMING_SNAKE_CASE						)
													SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    dist_per_token.probs_parameter() * tf.cast(_SCREAMING_SNAKE_CASE    ,					tf.floataa						)

													SCREAMING_SNAKE_CASE	:       int 							=    collections.defaultdict(_SCREAMING_SNAKE_CASE						)
													SCREAMING_SNAKE_CASE	:       Tuple 							=    token_type_ids_example
													for i, p in enumerate(tf.squeeze(_SCREAMING_SNAKE_CASE						).numpy().tolist()						):
																	SCREAMING_SNAKE_CASE	:       Optional[int] 							=    token_type_ids_example[:, 0].tolist()[i]
																	SCREAMING_SNAKE_CASE	:       int 							=    token_type_ids_example[:, 1].tolist()[i] - 1
																	SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    token_type_ids_example[:, 2].tolist()[i] - 1
																	if col >= 0 and row >= 0 and segment_id == 1:
																					coords_to_probs[(col, row)].append(_SCREAMING_SNAKE_CASE						)

													SCREAMING_SNAKE_CASE	:       Optional[int] 							=    {key: np.array(coords_to_probs[key]						).mean() > 0.5 for key in coords_to_probs}

									SCREAMING_SNAKE_CASE	:       str 							=    tf.concat(tuple(_SCREAMING_SNAKE_CASE						)    ,					0						)

									return (logits_batch,) if not self.aggregate else (logits_batch, tf.concat(tuple(_SCREAMING_SNAKE_CASE						)    ,					0						))





	def __call__(			self							:					List[str]    ,					*_SCREAMING_SNAKE_CASE							:					Tuple    ,					**_SCREAMING_SNAKE_CASE							:					List[Any]						)	->  Tuple:





					"""simple docstring"""


					SCREAMING_SNAKE_CASE	:       Dict 							=    self._args_parser(*_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE						)

					SCREAMING_SNAKE_CASE	:       Tuple 							=    super().__call__(_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE						)
					if len(_SCREAMING_SNAKE_CASE						) == 1:
									return results[0]
					return results





	def  _lowerCAmelCase    (			self							:					int    ,					_SCREAMING_SNAKE_CASE							:					Union[str, Any]=None    ,					_SCREAMING_SNAKE_CASE							:					Union[str, Any]=None    ,					_SCREAMING_SNAKE_CASE							:					Any=None    ,					**_SCREAMING_SNAKE_CASE							:					Optional[int]						)	->  List[str]:





					"""simple docstring"""


					SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    {}
					if padding is not None:
									SCREAMING_SNAKE_CASE	:       Any 							=    padding
					if truncation is not None:
									SCREAMING_SNAKE_CASE	:       List[Any] 							=    truncation

					SCREAMING_SNAKE_CASE	:       Tuple 							=    {}
					if sequential is not None:
									SCREAMING_SNAKE_CASE	:       Tuple 							=    sequential
					return preprocess_params, forward_params, {}





	def  _lowerCAmelCase    (			self							:					Union[str, Any]    ,					_SCREAMING_SNAKE_CASE							:					int    ,					_SCREAMING_SNAKE_CASE							:					Dict=None    ,					_SCREAMING_SNAKE_CASE							:					Any=True    ,					_SCREAMING_SNAKE_CASE							:					Optional[int]=None						)	->  Union[str, Any]:





					"""simple docstring"""


					if truncation is None:
									if self.type == "tapas":
													SCREAMING_SNAKE_CASE	:       Optional[int] 							=    'drop_rows_to_fit'
									else:
													SCREAMING_SNAKE_CASE	:       Dict 							=    'do_not_truncate'

					SCREAMING_SNAKE_CASE							,	SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    pipeline_input['table'], pipeline_input['query']
					if table.empty:
									raise ValueError('table is empty'						)
					if query is None or query == "":
									raise ValueError('query is empty'						)
					SCREAMING_SNAKE_CASE	:       Dict 							=    self.tokenizer(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE    ,					return_tensors=self.framework    ,					truncation=_SCREAMING_SNAKE_CASE    ,					padding=_SCREAMING_SNAKE_CASE						)
					SCREAMING_SNAKE_CASE	:       Tuple 							=    table
					return inputs





	def  _lowerCAmelCase    (			self							:					int    ,					_SCREAMING_SNAKE_CASE							:					List[Any]    ,					_SCREAMING_SNAKE_CASE							:					Optional[Any]=False						)	->  Optional[int]:





					"""simple docstring"""


					SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    model_inputs.pop('table'						)

					if self.type == "tapas":
									if sequential:
													SCREAMING_SNAKE_CASE	:       Tuple 							=    self.sequential_inference(**_SCREAMING_SNAKE_CASE						)
									else:
													SCREAMING_SNAKE_CASE	:       List[str] 							=    self.batch_inference(**_SCREAMING_SNAKE_CASE						)
					else:
									SCREAMING_SNAKE_CASE	:       str 							=    self.model.generate(**_SCREAMING_SNAKE_CASE						)
					SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    {'model_inputs': model_inputs, 'table': table, 'outputs': outputs}
					return model_outputs







	def  _lowerCAmelCase    (			self							:					Optional[int]    ,					_SCREAMING_SNAKE_CASE							:					Any						)	->  Optional[Any]:





					"""simple docstring"""


					SCREAMING_SNAKE_CASE	:       Optional[Any] 							=    model_outputs['model_inputs']
					SCREAMING_SNAKE_CASE	:       Optional[Any] 							=    model_outputs['table']
					SCREAMING_SNAKE_CASE	:       Dict 							=    model_outputs['outputs']
					if self.type == "tapas":
									if self.aggregate:
													SCREAMING_SNAKE_CASE							,	SCREAMING_SNAKE_CASE	:       int 							=    outputs[:2]
													SCREAMING_SNAKE_CASE	:       str 							=    self.tokenizer.convert_logits_to_predictions(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE						)
													SCREAMING_SNAKE_CASE							,	SCREAMING_SNAKE_CASE	:       Tuple 							=    predictions
													SCREAMING_SNAKE_CASE	:       Tuple 							=    {i: self.model.config.aggregation_labels[pred] for i, pred in enumerate(_SCREAMING_SNAKE_CASE						)}

													SCREAMING_SNAKE_CASE	:       List[str] 							=    self.model.config.no_aggregation_label_index
													SCREAMING_SNAKE_CASE	:       List[str] 							=    {
													    i: aggregators[i] + ' > ' for i, pred in enumerate(_SCREAMING_SNAKE_CASE						) if pred != no_agg_label_index
													}
									else:
													SCREAMING_SNAKE_CASE	:       List[Any] 							=    outputs[0]
													SCREAMING_SNAKE_CASE	:       Tuple 							=    self.tokenizer.convert_logits_to_predictions(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE						)
													SCREAMING_SNAKE_CASE	:       Optional[Any] 							=    predictions[0]
													SCREAMING_SNAKE_CASE	:       Tuple 							=    {}
													SCREAMING_SNAKE_CASE	:       Dict 							=    {}
									SCREAMING_SNAKE_CASE	:       Dict 							=    []
									for index, coordinates in enumerate(_SCREAMING_SNAKE_CASE						):
													SCREAMING_SNAKE_CASE	:       str 							=    [table.iat[coordinate] for coordinate in coordinates]
													SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    aggregators.get(_SCREAMING_SNAKE_CASE    ,					''						)
													SCREAMING_SNAKE_CASE	:       Any 							=    aggregators_prefix.get(_SCREAMING_SNAKE_CASE    ,					''						)
													SCREAMING_SNAKE_CASE	:       Dict 							=    {
													    'answer': aggregator_prefix + ', '.join(_SCREAMING_SNAKE_CASE						),
													    'coordinates': coordinates,
													    'cells': [table.iat[coordinate] for coordinate in coordinates],
													}
													if aggregator:
																	SCREAMING_SNAKE_CASE	:       List[Any] 							=    aggregator

													answers.append(_SCREAMING_SNAKE_CASE						)
									if len(_SCREAMING_SNAKE_CASE						) == 0:
													raise PipelineException('Empty answer'						)
					else:
									SCREAMING_SNAKE_CASE	:       Tuple 							=    [{'answer': answer} for answer in self.tokenizer.batch_decode(_SCREAMING_SNAKE_CASE    ,					skip_special_tokens=_SCREAMING_SNAKE_CASE						)]

					return answers if len(_SCREAMING_SNAKE_CASE						) > 1 else answers[0]










"""simple docstring"""

import json
import os
import random
import shutil
import tempfile
import unittest

import numpy as np
import pytest

from transformers import BertTokenizer, BertTokenizerFast
from transformers.models.bert.tokenization_bert import VOCAB_FILES_NAMES
from transformers.testing_utils import require_vision
from transformers.utils import IMAGE_PROCESSOR_NAME, is_vision_available


if is_vision_available():
							from PIL import Image

							from transformers import FlavaImageProcessor, FlavaProcessor
							from transformers.models.flava.image_processing_flava import (
							    FLAVA_CODEBOOK_MEAN,
							    FLAVA_CODEBOOK_STD,
							    FLAVA_IMAGE_MEAN,
							    FLAVA_IMAGE_STD,
							)
@require_vision
class 						lowerCAmelCase__	(  unittest.TestCase   ):


	'''simple docstring'''







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





					"""simple docstring"""


					SCREAMING_SNAKE_CASE	:       Any 							=    tempfile.mkdtemp()

					# fmt: off
					SCREAMING_SNAKE_CASE	:       Optional[Any] 							=    ['[UNK]', '[CLS]', '[SEP]', '[PAD]', '[MASK]', 'want', '##want', '##ed', 'wa', 'un', 'runn', '##ing', ',', 'low', 'lowest']
					# fmt: on
					SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    os.path.join(self.tmpdirname    ,					VOCAB_FILES_NAMES['vocab_file']						)

					with open(self.vocab_file    ,					'w'    ,					encoding='utf-8'						) as fp:
									fp.write(''.join([x + '\n' for x in vocab_tokens]						)						)

					SCREAMING_SNAKE_CASE	:       Optional[Any] 							=    {
					    'image_mean': FLAVA_IMAGE_MEAN,
					    'image_std': FLAVA_IMAGE_STD,
					    'do_normalize': True,
					    'do_resize': True,
					    'size': 224,
					    'do_center_crop': True,
					    'crop_size': 224,
					    'input_size_patches': 14,
					    'total_mask_patches': 75,
					    'mask_group_max_patches': None,
					    'mask_group_min_patches': 16,
					    'mask_group_min_aspect_ratio': 0.3,
					    'mask_group_max_aspect_ratio': None,
					    'codebook_do_resize': True,
					    'codebook_size': 112,
					    'codebook_do_center_crop': True,
					    'codebook_crop_size': 112,
					    'codebook_do_map_pixels': True,
					    'codebook_do_normalize': True,
					    'codebook_image_mean': FLAVA_CODEBOOK_MEAN,
					    'codebook_image_std': FLAVA_CODEBOOK_STD,
					}

					SCREAMING_SNAKE_CASE	:       List[Any] 							=    os.path.join(self.tmpdirname    ,					_SCREAMING_SNAKE_CASE						)
					with open(self.image_processor_file    ,					'w'    ,					encoding='utf-8'						) as fp:
									json.dump(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE						)





	def  _lowerCAmelCase    (			self							:					Any    ,					**_SCREAMING_SNAKE_CASE							:					str						)	->  str:





					"""simple docstring"""


					return BertTokenizer.from_pretrained(self.tmpdirname    ,					**_SCREAMING_SNAKE_CASE						)





	def  _lowerCAmelCase    (			self							:					int    ,					**_SCREAMING_SNAKE_CASE							:					Any						)	->  Union[str, Any]:





					"""simple docstring"""


					return BertTokenizerFast.from_pretrained(self.tmpdirname    ,					**_SCREAMING_SNAKE_CASE						)





	def  _lowerCAmelCase    (			self							:					Union[str, Any]    ,					**_SCREAMING_SNAKE_CASE							:					Dict						)	->  str:





					"""simple docstring"""


					return FlavaImageProcessor.from_pretrained(self.tmpdirname    ,					**_SCREAMING_SNAKE_CASE						)





	def  _lowerCAmelCase    (			self							:					Dict						)	->  str:





					"""simple docstring"""


					shutil.rmtree(self.tmpdirname						)





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





					"""simple docstring"""


					SCREAMING_SNAKE_CASE	:       int 							=    [np.random.randint(255    ,					size=(3, 30, 400)    ,					dtype=np.uinta						)]

					SCREAMING_SNAKE_CASE	:       str 							=    [Image.fromarray(np.moveaxis(_SCREAMING_SNAKE_CASE    ,					0    ,					-1						)						) for x in image_inputs]

					return image_inputs





	def  _lowerCAmelCase    (			self							:					Tuple						)	->  Tuple:





					"""simple docstring"""


					SCREAMING_SNAKE_CASE	:       int 							=    self.get_tokenizer()
					SCREAMING_SNAKE_CASE	:       List[Any] 							=    self.get_rust_tokenizer()
					SCREAMING_SNAKE_CASE	:       str 							=    self.get_image_processor()

					SCREAMING_SNAKE_CASE	:       int 							=    FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE    ,					image_processor=_SCREAMING_SNAKE_CASE						)
					processor_slow.save_pretrained(self.tmpdirname						)
					SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    FlavaProcessor.from_pretrained(self.tmpdirname    ,					use_fast=_SCREAMING_SNAKE_CASE						)

					SCREAMING_SNAKE_CASE	:       str 							=    FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE    ,					image_processor=_SCREAMING_SNAKE_CASE						)
					processor_fast.save_pretrained(self.tmpdirname						)
					SCREAMING_SNAKE_CASE	:       Optional[Any] 							=    FlavaProcessor.from_pretrained(self.tmpdirname						)

					self.assertEqual(processor_slow.tokenizer.get_vocab()    ,					tokenizer_slow.get_vocab()						)
					self.assertEqual(processor_fast.tokenizer.get_vocab()    ,					tokenizer_fast.get_vocab()						)
					self.assertEqual(tokenizer_slow.get_vocab()    ,					tokenizer_fast.get_vocab()						)
					self.assertIsInstance(processor_slow.tokenizer    ,					_SCREAMING_SNAKE_CASE						)
					self.assertIsInstance(processor_fast.tokenizer    ,					_SCREAMING_SNAKE_CASE						)

					self.assertEqual(processor_slow.image_processor.to_json_string()    ,					image_processor.to_json_string()						)
					self.assertEqual(processor_fast.image_processor.to_json_string()    ,					image_processor.to_json_string()						)
					self.assertIsInstance(processor_slow.image_processor    ,					_SCREAMING_SNAKE_CASE						)
					self.assertIsInstance(processor_fast.image_processor    ,					_SCREAMING_SNAKE_CASE						)





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





					"""simple docstring"""


					SCREAMING_SNAKE_CASE	:       Tuple 							=    FlavaProcessor(tokenizer=self.get_tokenizer()    ,					image_processor=self.get_image_processor()						)
					processor.save_pretrained(self.tmpdirname						)

					SCREAMING_SNAKE_CASE	:       Dict 							=    self.get_tokenizer(bos_token='(BOS)'    ,					eos_token='(EOS)'						)
					SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    self.get_image_processor(do_normalize=_SCREAMING_SNAKE_CASE    ,					padding_value=1.0						)

					SCREAMING_SNAKE_CASE	:       List[str] 							=    FlavaProcessor.from_pretrained(
					    self.tmpdirname    ,					bos_token='(BOS)'    ,					eos_token='(EOS)'    ,					do_normalize=_SCREAMING_SNAKE_CASE    ,					padding_value=1.0						)

					self.assertEqual(processor.tokenizer.get_vocab()    ,					tokenizer_add_kwargs.get_vocab()						)
					self.assertIsInstance(processor.tokenizer    ,					_SCREAMING_SNAKE_CASE						)

					self.assertEqual(processor.image_processor.to_json_string()    ,					image_processor_add_kwargs.to_json_string()						)
					self.assertIsInstance(processor.image_processor    ,					_SCREAMING_SNAKE_CASE						)





	def  _lowerCAmelCase    (			self							:					List[Any]						)	->  Tuple:





					"""simple docstring"""


					SCREAMING_SNAKE_CASE	:       Any 							=    self.get_image_processor()
					SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    self.get_tokenizer()

					SCREAMING_SNAKE_CASE	:       Optional[int] 							=    FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE    ,					image_processor=_SCREAMING_SNAKE_CASE						)

					SCREAMING_SNAKE_CASE	:       Optional[int] 							=    self.prepare_image_inputs()

					SCREAMING_SNAKE_CASE	:       Any 							=    image_processor(_SCREAMING_SNAKE_CASE    ,					return_tensors='np'						)
					SCREAMING_SNAKE_CASE	:       str 							=    processor(images=_SCREAMING_SNAKE_CASE    ,					return_tensors='np'						)

					for key in input_feat_extract.keys():
									self.assertAlmostEqual(input_feat_extract[key].sum()    ,					input_processor[key].sum()    ,					delta=1E-2						)

					# With rest of the args
					random.seed(1_234						)
					SCREAMING_SNAKE_CASE	:       str 							=    image_processor(
					    _SCREAMING_SNAKE_CASE    ,					return_image_mask=_SCREAMING_SNAKE_CASE    ,					return_codebook_pixels=_SCREAMING_SNAKE_CASE    ,					return_tensors='np'						)
					random.seed(1_234						)
					SCREAMING_SNAKE_CASE	:       Optional[int] 							=    processor(
					    images=_SCREAMING_SNAKE_CASE    ,					return_image_mask=_SCREAMING_SNAKE_CASE    ,					return_codebook_pixels=_SCREAMING_SNAKE_CASE    ,					return_tensors='np'						)

					for key in input_feat_extract.keys():
									self.assertAlmostEqual(input_feat_extract[key].sum()    ,					input_processor[key].sum()    ,					delta=1E-2						)





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





					"""simple docstring"""


					SCREAMING_SNAKE_CASE	:       Dict 							=    self.get_image_processor()
					SCREAMING_SNAKE_CASE	:       Optional[Any] 							=    self.get_tokenizer()

					SCREAMING_SNAKE_CASE	:       Optional[int] 							=    FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE    ,					image_processor=_SCREAMING_SNAKE_CASE						)

					SCREAMING_SNAKE_CASE	:       List[Any] 							=    'lower newer'

					SCREAMING_SNAKE_CASE	:       List[str] 							=    processor(text=_SCREAMING_SNAKE_CASE						)

					SCREAMING_SNAKE_CASE	:       List[str] 							=    tokenizer(_SCREAMING_SNAKE_CASE						)

					for key in encoded_tok.keys():
									self.assertListEqual(encoded_tok[key]    ,					encoded_processor[key]						)





	def  _lowerCAmelCase    (			self							:					Tuple						)	->  int:





					"""simple docstring"""


					SCREAMING_SNAKE_CASE	:       Optional[int] 							=    self.get_image_processor()
					SCREAMING_SNAKE_CASE	:       Optional[int] 							=    self.get_tokenizer()

					SCREAMING_SNAKE_CASE	:       str 							=    FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE    ,					image_processor=_SCREAMING_SNAKE_CASE						)

					SCREAMING_SNAKE_CASE	:       Optional[int] 							=    'lower newer'
					SCREAMING_SNAKE_CASE	:       List[str] 							=    self.prepare_image_inputs()

					SCREAMING_SNAKE_CASE	:       List[str] 							=    processor(text=_SCREAMING_SNAKE_CASE    ,					images=_SCREAMING_SNAKE_CASE						)

					self.assertListEqual(list(inputs.keys()						)    ,					['input_ids', 'token_type_ids', 'attention_mask', 'pixel_values']						)

					# add extra args
					SCREAMING_SNAKE_CASE	:       Any 							=    processor(text=_SCREAMING_SNAKE_CASE    ,					images=_SCREAMING_SNAKE_CASE    ,					return_codebook_pixels=_SCREAMING_SNAKE_CASE    ,					return_image_mask=_SCREAMING_SNAKE_CASE						)

					self.assertListEqual(
					    list(inputs.keys()						)    ,					[
					        'input_ids',
					        'token_type_ids',
					        'attention_mask',
					        'pixel_values',
					        'codebook_pixel_values',
					        'bool_masked_pos',
					    ]    ,					)

					# test if it raises when no input is passed
					with pytest.raises(_SCREAMING_SNAKE_CASE						):
									processor()





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





					"""simple docstring"""


					SCREAMING_SNAKE_CASE	:       List[str] 							=    self.get_image_processor()
					SCREAMING_SNAKE_CASE	:       Tuple 							=    self.get_tokenizer()

					SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE    ,					image_processor=_SCREAMING_SNAKE_CASE						)

					SCREAMING_SNAKE_CASE	:       Optional[int] 							=    [[1, 4, 5, 8, 1, 0, 8], [3, 4, 3, 1, 1, 8, 9]]

					SCREAMING_SNAKE_CASE	:       Optional[Any] 							=    processor.batch_decode(_SCREAMING_SNAKE_CASE						)
					SCREAMING_SNAKE_CASE	:       Optional[int] 							=    tokenizer.batch_decode(_SCREAMING_SNAKE_CASE						)

					self.assertListEqual(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE						)







	def  _lowerCAmelCase    (			self							:					int						)	->  Any:





					"""simple docstring"""


					SCREAMING_SNAKE_CASE	:       Union[str, Any] 							=    self.get_image_processor()
					SCREAMING_SNAKE_CASE	:       Optional[int] 							=    self.get_tokenizer()

					SCREAMING_SNAKE_CASE	:       int 							=    FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE    ,					image_processor=_SCREAMING_SNAKE_CASE						)

					SCREAMING_SNAKE_CASE	:       Any 							=    'lower newer'
					SCREAMING_SNAKE_CASE	:       List[Any] 							=    self.prepare_image_inputs()

					SCREAMING_SNAKE_CASE	:       Dict 							=    processor(text=_SCREAMING_SNAKE_CASE    ,					images=_SCREAMING_SNAKE_CASE						)

					self.assertListEqual(list(inputs.keys()						)    ,					processor.model_input_names						)





