
from __future__ import annotations

import os
import tempfile
import unittest

from transformers import ConvBertConfig, is_tf_available
from transformers.testing_utils import require_tf, slow

from ...test_configuration_common import ConfigTester
from ...test_modeling_tf_common import TFModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_tf_available():
			import tensorflow as tf

			from transformers import (
			    TFConvBertForMaskedLM,
			    TFConvBertForMultipleChoice,
			    TFConvBertForQuestionAnswering,
			    TFConvBertForSequenceClassification,
			    TFConvBertForTokenClassification,
			    TFConvBertModel,
			)







class   lowerCamelCase	:





					def __init__(self   :					List[str]       ,					_A   :					Tuple       ,					_A   :					str=1_3       ,					_A   :					Tuple=7       ,					_A   :					Optional[int]=True       ,					_A   :					int=True       ,					_A   :					Union[str, Any]=True       ,					_A   :					Dict=True       ,					_A   :					List[Any]=9_9       ,					_A   :					Optional[int]=3_2       ,					_A   :					int=2       ,					_A   :					str=4       ,					_A   :					Optional[Any]=3_7       ,					_A   :					str="gelu"       ,					_A   :					str=0.1       ,					_A   :					Union[str, Any]=0.1       ,					_A   :					Union[str, Any]=5_1_2       ,					_A   :					List[Any]=1_6       ,					_A   :					Optional[Any]=2       ,					_A   :					Any=0.02       ,					_A   :					Any=3       ,					_A   :					int=4       ,					_A   :					Any=None       ,					)		->		List[str]:
									snake_case				  =      parent
									snake_case				  =      1_3
									snake_case				  =      7
									snake_case				  =      True
									snake_case				  =      True
									snake_case				  =      True
									snake_case				  =      True
									snake_case				  =      9_9
									snake_case				  =      3_8_4
									snake_case				  =      2
									snake_case				  =      4
									snake_case				  =      3_7
									snake_case				  =      '''gelu'''
									snake_case				  =      0.1
									snake_case				  =      0.1
									snake_case				  =      5_1_2
									snake_case				  =      1_6
									snake_case				  =      2
									snake_case				  =      0.02
									snake_case				  =      3
									snake_case				  =      4
									snake_case				  =      1_2_8
									snake_case				  =      2
									snake_case				  =      9
									snake_case				  =      1
									snake_case				  =      None





					def 	UpperCAmelCase(self   :					List[str]     )		->		Optional[Any]:
									snake_case				  =      ids_tensor([self.batch_size, self.seq_length]       ,					self.vocab_size     )

									snake_case				  =      None
									if self.use_input_mask:
													snake_case				  =      random_attention_mask([self.batch_size, self.seq_length]     )

									snake_case				  =      None
									if self.use_token_type_ids:
													snake_case				  =      ids_tensor([self.batch_size, self.seq_length]       ,					self.type_vocab_size     )

									snake_case				  =      None
									snake_case				  =      None
									snake_case				  =      None
									if self.use_labels:
													snake_case				  =      ids_tensor([self.batch_size]       ,					self.type_sequence_label_size     )
													snake_case				  =      ids_tensor([self.batch_size, self.seq_length]       ,					self.num_labels     )
													snake_case				  =      ids_tensor([self.batch_size]       ,					self.num_choices     )

									snake_case				  =      ConvBertConfig(
									    vocab_size=self.vocab_size       ,					hidden_size=self.hidden_size       ,					num_hidden_layers=self.num_hidden_layers       ,					num_attention_heads=self.num_attention_heads       ,					intermediate_size=self.intermediate_size       ,					hidden_act=self.hidden_act       ,					hidden_dropout_prob=self.hidden_dropout_prob       ,					attention_probs_dropout_prob=self.attention_probs_dropout_prob       ,					max_position_embeddings=self.max_position_embeddings       ,					type_vocab_size=self.type_vocab_size       ,					initializer_range=self.initializer_range       ,					return_dict=lowerCamelCase__       ,					)

									return config, input_ids, token_type_ids, input_mask, sequence_labels, token_labels, choice_labels





					def 	UpperCAmelCase(self   :					Any       ,					_A   :					Tuple       ,					_A   :					Union[str, Any]       ,					_A   :					Any       ,					_A   :					Optional[Any]       ,					_A   :					int       ,					_A   :					Optional[int]       ,					_A   :					List[Any]     )		->		int:
									snake_case				  =      TFConvBertModel(config=lowerCamelCase__     )
									snake_case				  =      {'''input_ids''': input_ids, '''attention_mask''': input_mask, '''token_type_ids''': token_type_ids}

									snake_case				  =      [input_ids, input_mask]
									snake_case				  =      model(lowerCamelCase__     )

									snake_case				  =      model(lowerCamelCase__     )

									self.parent.assertEqual(result.last_hidden_state.shape       ,					(self.batch_size, self.seq_length, self.hidden_size)     )





					def 	UpperCAmelCase(self   :					int       ,					_A   :					Union[str, Any]       ,					_A   :					Optional[int]       ,					_A   :					Any       ,					_A   :					Tuple       ,					_A   :					Dict       ,					_A   :					Union[str, Any]       ,					_A   :					Dict     )		->		str:
									snake_case				  =      TFConvBertForMaskedLM(config=lowerCamelCase__     )
									snake_case				  =      {
									    '''input_ids''': input_ids,
									    '''attention_mask''': input_mask,
									    '''token_type_ids''': token_type_ids,
									}
									snake_case				  =      model(lowerCamelCase__     )
									self.parent.assertEqual(result.logits.shape       ,					(self.batch_size, self.seq_length, self.vocab_size)     )





					def 	UpperCAmelCase(self   :					Tuple       ,					_A   :					Optional[int]       ,					_A   :					str       ,					_A   :					Union[str, Any]       ,					_A   :					List[str]       ,					_A   :					Optional[Any]       ,					_A   :					Union[str, Any]       ,					_A   :					List[str]     )		->		int:
									snake_case				  =      self.num_labels
									snake_case				  =      TFConvBertForSequenceClassification(config=lowerCamelCase__     )
									snake_case				  =      {
									    '''input_ids''': input_ids,
									    '''attention_mask''': input_mask,
									    '''token_type_ids''': token_type_ids,
									}

									snake_case				  =      model(lowerCamelCase__     )
									self.parent.assertEqual(result.logits.shape       ,					(self.batch_size, self.num_labels)     )





					def 	UpperCAmelCase(self   :					Optional[int]       ,					_A   :					List[str]       ,					_A   :					Any       ,					_A   :					str       ,					_A   :					Any       ,					_A   :					Optional[Any]       ,					_A   :					Dict       ,					_A   :					Union[str, Any]     )		->		Optional[Any]:
									snake_case				  =      self.num_choices
									snake_case				  =      TFConvBertForMultipleChoice(config=lowerCamelCase__     )
									snake_case				  =      tf.tile(tf.expand_dims(lowerCamelCase__       ,					1     )       ,					(1, self.num_choices, 1)     )
									snake_case				  =      tf.tile(tf.expand_dims(lowerCamelCase__       ,					1     )       ,					(1, self.num_choices, 1)     )
									snake_case				  =      tf.tile(tf.expand_dims(lowerCamelCase__       ,					1     )       ,					(1, self.num_choices, 1)     )
									snake_case				  =      {
									    '''input_ids''': multiple_choice_inputs_ids,
									    '''attention_mask''': multiple_choice_input_mask,
									    '''token_type_ids''': multiple_choice_token_type_ids,
									}
									snake_case				  =      model(lowerCamelCase__     )
									self.parent.assertEqual(result.logits.shape       ,					(self.batch_size, self.num_choices)     )





					def 	UpperCAmelCase(self   :					Optional[int]       ,					_A   :					List[str]       ,					_A   :					Union[str, Any]       ,					_A   :					int       ,					_A   :					Optional[int]       ,					_A   :					Union[str, Any]       ,					_A   :					Dict       ,					_A   :					str     )		->		Optional[int]:
									snake_case				  =      self.num_labels
									snake_case				  =      TFConvBertForTokenClassification(config=lowerCamelCase__     )
									snake_case				  =      {
									    '''input_ids''': input_ids,
									    '''attention_mask''': input_mask,
									    '''token_type_ids''': token_type_ids,
									}
									snake_case				  =      model(lowerCamelCase__     )
									self.parent.assertEqual(result.logits.shape       ,					(self.batch_size, self.seq_length, self.num_labels)     )





					def 	UpperCAmelCase(self   :					List[str]       ,					_A   :					int       ,					_A   :					List[Any]       ,					_A   :					List[Any]       ,					_A   :					List[str]       ,					_A   :					Optional[int]       ,					_A   :					Any       ,					_A   :					Any     )		->		str:
									snake_case				  =      TFConvBertForQuestionAnswering(config=lowerCamelCase__     )
									snake_case				  =      {
									    '''input_ids''': input_ids,
									    '''attention_mask''': input_mask,
									    '''token_type_ids''': token_type_ids,
									}

									snake_case				  =      model(lowerCamelCase__     )
									self.parent.assertEqual(result.start_logits.shape       ,					(self.batch_size, self.seq_length)     )
									self.parent.assertEqual(result.end_logits.shape       ,					(self.batch_size, self.seq_length)     )





					def 	UpperCAmelCase(self   :					int     )		->		Optional[Any]:
									snake_case				  =      self.prepare_config_and_inputs()
									(
									    snake_case				
									)				  =      config_and_inputs
									snake_case				  =      {'''input_ids''': input_ids, '''token_type_ids''': token_type_ids, '''attention_mask''': input_mask}
									return config, inputs_dict







@require_tf
class   lowerCamelCase	(						__lowerCAmelCase							,				__lowerCAmelCase							,				unittest.TestCase						):
					UpperCAmelCase__       :							Dict     =	(
					    (
					        TFConvBertModel,
					        TFConvBertForMaskedLM,
					        TFConvBertForQuestionAnswering,
					        TFConvBertForSequenceClassification,
					        TFConvBertForTokenClassification,
					        TFConvBertForMultipleChoice,
					    )
					    if is_tf_available()
					    else ()
					)
					UpperCAmelCase__       :							List[Any]     =	(
					    {
					        "feature-extraction": TFConvBertModel,
					        "fill-mask": TFConvBertForMaskedLM,
					        "question-answering": TFConvBertForQuestionAnswering,
					        "text-classification": TFConvBertForSequenceClassification,
					        "token-classification": TFConvBertForTokenClassification,
					        "zero-shot": TFConvBertForSequenceClassification,
					    }
					    if is_tf_available()
					    else {}
					)
					UpperCAmelCase__       :							List[str]     =	False
					UpperCAmelCase__       :							int     =	False
					UpperCAmelCase__       :							List[Any]     =	False





					def 	UpperCAmelCase(self   :					Optional[Any]     )		->		Dict:
									snake_case				  =      TFConvBertModelTester(self     )
									snake_case				  =      ConfigTester(self       ,					config_class=lowerCamelCase__       ,					hidden_size=3_7     )





					def 	UpperCAmelCase(self   :					List[Any]     )		->		Optional[int]:
									self.config_tester.run_common_tests()





					def 	UpperCAmelCase(self   :					str     )		->		str:
									snake_case				  =      self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_model(*lowerCamelCase__     )





					def 	UpperCAmelCase(self   :					Dict     )		->		Dict:
									snake_case				  =      self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_for_masked_lm(*lowerCamelCase__     )





					def 	UpperCAmelCase(self   :					str     )		->		int:
									snake_case				  =      self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_for_multiple_choice(*lowerCamelCase__     )





					def 	UpperCAmelCase(self   :					Optional[int]     )		->		int:
									snake_case				  =      self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_for_question_answering(*lowerCamelCase__     )





					def 	UpperCAmelCase(self   :					Union[str, Any]     )		->		List[Any]:
									snake_case				  =      self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_for_sequence_classification(*lowerCamelCase__     )





					def 	UpperCAmelCase(self   :					List[Any]     )		->		Union[str, Any]:
									snake_case				  =      self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_for_token_classification(*lowerCamelCase__     )





					@slow
					def 	UpperCAmelCase(self   :					Any     )		->		Tuple:
									snake_case				  =      self.model_tester.prepare_config_and_inputs_for_common()
									snake_case				  =      True
									snake_case				  =      True

									if hasattr(lowerCamelCase__       ,					"use_cache"     ):
													snake_case				  =      True

									snake_case				  =      getattr(self.model_tester       ,					"encoder_seq_length"       ,					self.model_tester.seq_length     )
									snake_case				  =      getattr(self.model_tester       ,					"key_length"       ,					lowerCamelCase__     )

									for model_class in self.all_model_classes:
													snake_case				  =      self._prepare_for_class(lowerCamelCase__       ,					lowerCamelCase__     )
													snake_case				  =      model_class(lowerCamelCase__     )
													snake_case				  =      len(model(lowerCamelCase__     )     )

													with tempfile.TemporaryDirectory() as tmpdirname:
																	model.save_pretrained(lowerCamelCase__       ,					saved_model=lowerCamelCase__     )
																	snake_case				  =      os.path.join(lowerCamelCase__       ,					"saved_model"       ,					"1"     )
																	snake_case				  =      tf.keras.models.load_model(lowerCamelCase__     )
																	snake_case				  =      model(lowerCamelCase__     )

																	if self.is_encoder_decoder:
																					snake_case				  =      outputs['''encoder_hidden_states''']
																					snake_case				  =      outputs['''encoder_attentions''']
																	else:
																					snake_case				  =      outputs['''hidden_states''']
																					snake_case				  =      outputs['''attentions''']

																	self.assertEqual(len(lowerCamelCase__     )       ,					lowerCamelCase__     )

																	snake_case				  =      getattr(
																	    self.model_tester       ,					"expected_num_hidden_layers"       ,					self.model_tester.num_hidden_layers + 1     )

																	self.assertEqual(len(lowerCamelCase__     )       ,					lowerCamelCase__     )
																	self.assertListEqual(
																	    list(output_hidden_states[0].shape[-2:]     )       ,					[self.model_tester.seq_length, self.model_tester.hidden_size]       ,					)

																	self.assertEqual(len(lowerCamelCase__     )       ,					self.model_tester.num_hidden_layers     )
																	self.assertListEqual(
																	    list(output_attentions[0].shape[-3:]     )       ,					[self.model_tester.num_attention_heads / 2, encoder_seq_length, encoder_key_length]       ,					)





					@slow
					def 	UpperCAmelCase(self   :					Tuple     )		->		Union[str, Any]:
									snake_case				  =      TFConvBertModel.from_pretrained("YituTech/conv-bert-base"     )
									self.assertIsNotNone(lowerCamelCase__     )





					def 	UpperCAmelCase(self   :					int     )		->		int:
									snake_case				  =      self.model_tester.prepare_config_and_inputs_for_common()
									snake_case				  =      True
									snake_case				  =      getattr(self.model_tester       ,					"decoder_seq_length"       ,					self.model_tester.seq_length     )
									snake_case				  =      getattr(self.model_tester       ,					"encoder_seq_length"       ,					self.model_tester.seq_length     )
									snake_case				  =      getattr(self.model_tester       ,					"key_length"       ,					lowerCamelCase__     )
									snake_case				  =      getattr(self.model_tester       ,					"key_length"       ,					lowerCamelCase__     )

									def check_decoder_attentions_output(_A   :					Any     ):
													snake_case				  =      len(lowerCamelCase__     )
													self.assertEqual(out_len % 2       ,					0     )
													snake_case				  =      outputs.decoder_attentions
													self.assertEqual(len(lowerCamelCase__     )       ,					self.model_tester.num_hidden_layers     )
													self.assertListEqual(
													    list(decoder_attentions[0].shape[-3:]     )       ,					[self.model_tester.num_attention_heads / 2, decoder_seq_length, decoder_key_length]       ,					)

									def check_encoder_attentions_output(_A   :					Tuple     ):
													snake_case				  =      [
													    t.numpy() for t in (outputs.encoder_attentions if config.is_encoder_decoder else outputs.attentions)
													]
													self.assertEqual(len(lowerCamelCase__     )       ,					self.model_tester.num_hidden_layers     )
													self.assertListEqual(
													    list(attentions[0].shape[-3:]     )       ,					[self.model_tester.num_attention_heads / 2, encoder_seq_length, encoder_key_length]       ,					)

									for model_class in self.all_model_classes:
													snake_case				  =      True
													snake_case				  =      False
													snake_case				  =      model_class(lowerCamelCase__     )
													snake_case				  =      model(self._prepare_for_class(lowerCamelCase__       ,					lowerCamelCase__     )     )
													snake_case				  =      len(lowerCamelCase__     )
													self.assertEqual(config.output_hidden_states       ,					lowerCamelCase__     )
													check_encoder_attentions_output(lowerCamelCase__     )

													if self.is_encoder_decoder:
																	snake_case				  =      model_class(lowerCamelCase__     )
																	snake_case				  =      model(self._prepare_for_class(lowerCamelCase__       ,					lowerCamelCase__     )     )
																	self.assertEqual(config.output_hidden_states       ,					lowerCamelCase__     )
																	check_decoder_attentions_output(lowerCamelCase__     )

													# Check that output attentions can also be changed via the config
													del inputs_dict["output_attentions"]
													snake_case				  =      True
													snake_case				  =      model_class(lowerCamelCase__     )
													snake_case				  =      model(self._prepare_for_class(lowerCamelCase__       ,					lowerCamelCase__     )     )
													self.assertEqual(config.output_hidden_states       ,					lowerCamelCase__     )
													check_encoder_attentions_output(lowerCamelCase__     )

													# Check attention is always last and order is fine
													snake_case				  =      True
													snake_case				  =      True
													snake_case				  =      model_class(lowerCamelCase__     )
													snake_case				  =      model(self._prepare_for_class(lowerCamelCase__       ,					lowerCamelCase__     )     )

													self.assertEqual(out_len + (2 if self.is_encoder_decoder else 1)       ,					len(lowerCamelCase__     )     )
													self.assertEqual(model.config.output_hidden_states       ,					lowerCamelCase__     )
													check_encoder_attentions_output(lowerCamelCase__     )







@require_tf
class   lowerCamelCase	(						unittest.TestCase						):





					@slow
					def 	UpperCAmelCase(self   :					Optional[Any]     )		->		Optional[Any]:
									snake_case				  =      TFConvBertModel.from_pretrained("YituTech/conv-bert-base"     )
									snake_case				  =      tf.constant([[0, 1, 2, 3, 4, 5]]     )
									snake_case				  =      model(lowerCamelCase__     )[0]

									snake_case				  =      [1, 6, 7_6_8]
									self.assertEqual(output.shape       ,					lowerCamelCase__     )

									snake_case				  =      tf.constant(
									    [
									        [
									            [-0.03_47_54_93, -0.4_68_60_34, -0.30_63_88_32],
									            [0.22_63_72_48, -0.26_98_86_46, -0.7_42_34_24],
									            [0.10_32_48_68, -0.45_01_35_08, -0.58_28_07_84],
									        ]
									    ]     )
									tf.debugging.assert_near(output[:, :3, :3]       ,					lowerCamelCase__       ,					atol=1E-4     )



import unittest

import numpy as np

from transformers.testing_utils import require_pytesseract, require_torch
from transformers.utils import is_pytesseract_available, is_torch_available

from ...test_image_processing_common import ImageProcessingSavingTestMixin, prepare_image_inputs


if is_torch_available():
   import torch

if is_pytesseract_available():
   from PIL import Image

   from transformers import LayoutLMvaImageProcessor







class   lowerCamelCase	(						unittest.TestCase						):





     def __init__(self   :					Optional[Any]       ,					_A   :					List[str]       ,					_A   :					Tuple=7       ,					_A   :					List[str]=3       ,					_A   :					Dict=1_8       ,					_A   :					int=3_0       ,					_A   :					str=4_0_0       ,					_A   :					List[str]=True       ,					_A   :					Optional[int]=None       ,					_A   :					Optional[int]=True       ,					)		->		Dict:
         snake_case				  =      size if size is not None else {"height": 1_8, "width": 1_8}
         snake_case				  =      parent
         snake_case				  =      batch_size
         snake_case				  =      num_channels
         snake_case				  =      image_size
         snake_case				  =      min_resolution
         snake_case				  =      max_resolution
         snake_case				  =      do_resize
         snake_case				  =      size
         snake_case				  =      apply_ocr





     def 	UpperCAmelCase(self   :					Union[str, Any]     )		->		int:
         return {"do_resize": self.do_resize, "size": self.size, "apply_ocr": self.apply_ocr}







@require_torch
@require_pytesseract
class   lowerCamelCase	(						A_							,				unittest.TestCase						):
     UpperCAmelCase__       :							str     =	LayoutLMvaImageProcessor if is_pytesseract_available() else None





     def 	UpperCAmelCase(self   :					List[str]     )		->		Dict:
         snake_case				  =      LayoutLMvaImageProcessingTester(self     )





     @property
     def 	UpperCAmelCase(self   :					Union[str, Any]     )		->		int:
         return self.image_processor_tester.prepare_image_processor_dict()





     def 	UpperCAmelCase(self   :					Any     )		->		Optional[int]:
         snake_case				  =      self.image_processing_class(**self.image_processor_dict     )
         self.assertTrue(hasattr(_A       ,					"do_resize"     )     )
         self.assertTrue(hasattr(_A       ,					"size"     )     )
         self.assertTrue(hasattr(_A       ,					"apply_ocr"     )     )





     def 	UpperCAmelCase(self   :					Union[str, Any]     )		->		List[Any]:
         snake_case				  =      self.image_processing_class.from_dict(self.image_processor_dict     )
         self.assertEqual(image_processor.size       ,					{"height": 1_8, "width": 1_8}     )

         snake_case				  =      self.image_processing_class.from_dict(self.image_processor_dict       ,					size=4_2     )
         self.assertEqual(image_processor.size       ,					{"height": 4_2, "width": 4_2}     )





     def 	UpperCAmelCase(self   :					List[Any]     )		->		Optional[Any]:
         pass





     def 	UpperCAmelCase(self   :					Dict     )		->		Optional[int]:
         # Initialize image_processing
         snake_case				  =      self.image_processing_class(**self.image_processor_dict     )
         # create random PIL images
         snake_case				  =      prepare_image_inputs(self.image_processor_tester       ,					equal_resolution=_A     )
         for image in image_inputs:
             self.assertIsInstance(_A       ,					Image.Image     )

         # Test not batched input
         snake_case				  =      image_processing(image_inputs[0]       ,					return_tensors="pt"     )
         self.assertEqual(
             encoding.pixel_values.shape       ,					(
                 1,
                 self.image_processor_tester.num_channels,
                 self.image_processor_tester.size["height"],
                 self.image_processor_tester.size["width"],
             )       ,					)

         self.assertIsInstance(encoding.words       ,					_A     )
         self.assertIsInstance(encoding.boxes       ,					_A     )

         # Test batched
         snake_case				  =      image_processing(_A       ,					return_tensors="pt"     ).pixel_values
         self.assertEqual(
             encoded_images.shape       ,					(
                 self.image_processor_tester.batch_size,
                 self.image_processor_tester.num_channels,
                 self.image_processor_tester.size["height"],
                 self.image_processor_tester.size["width"],
             )       ,					)





     def 	UpperCAmelCase(self   :					Tuple     )		->		List[str]:
         # Initialize image_processing
         snake_case				  =      self.image_processing_class(**self.image_processor_dict     )
         # create random numpy tensors
         snake_case				  =      prepare_image_inputs(self.image_processor_tester       ,					equal_resolution=_A       ,					numpify=_A     )
         for image in image_inputs:
             self.assertIsInstance(_A       ,					np.ndarray     )

         # Test not batched input
         snake_case				  =      image_processing(image_inputs[0]       ,					return_tensors="pt"     ).pixel_values
         self.assertEqual(
             encoded_images.shape       ,					(
                 1,
                 self.image_processor_tester.num_channels,
                 self.image_processor_tester.size["height"],
                 self.image_processor_tester.size["width"],
             )       ,					)

         # Test batched
         snake_case				  =      image_processing(_A       ,					return_tensors="pt"     ).pixel_values
         self.assertEqual(
             encoded_images.shape       ,					(
                 self.image_processor_tester.batch_size,
                 self.image_processor_tester.num_channels,
                 self.image_processor_tester.size["height"],
                 self.image_processor_tester.size["width"],
             )       ,					)





     def 	UpperCAmelCase(self   :					Optional[Any]     )		->		Tuple:
         # Initialize image_processing
         snake_case				  =      self.image_processing_class(**self.image_processor_dict     )
         # create random PyTorch tensors
         snake_case				  =      prepare_image_inputs(self.image_processor_tester       ,					equal_resolution=_A       ,					torchify=_A     )
         for image in image_inputs:
             self.assertIsInstance(_A       ,					torch.Tensor     )

         # Test not batched input
         snake_case				  =      image_processing(image_inputs[0]       ,					return_tensors="pt"     ).pixel_values
         self.assertEqual(
             encoded_images.shape       ,					(
                 1,
                 self.image_processor_tester.num_channels,
                 self.image_processor_tester.size["height"],
                 self.image_processor_tester.size["width"],
             )       ,					)

         # Test batched
         snake_case				  =      image_processing(_A       ,					return_tensors="pt"     ).pixel_values
         self.assertEqual(
             encoded_images.shape       ,					(
                 self.image_processor_tester.batch_size,
                 self.image_processor_tester.num_channels,
                 self.image_processor_tester.size["height"],
                 self.image_processor_tester.size["width"],
             )       ,					)





     def 	UpperCAmelCase(self   :					Any     )		->		List[str]:
         # with apply_OCR = True
         snake_case				  =      LayoutLMvaImageProcessor()

         from datasets import load_dataset

         snake_case				  =      load_dataset("hf-internal-testing/fixtures_docvqa"       ,					split="test"     )

         snake_case				  =      Image.open(ds[0]["file"]     ).convert("RGB"     )

         snake_case				  =      image_processing(_A       ,					return_tensors="pt"     )

         self.assertEqual(encoding.pixel_values.shape       ,					(1, 3, 2_2_4, 2_2_4)     )
         self.assertEqual(len(encoding.words     )       ,					len(encoding.boxes     )     )

         # fmt: off
         # the words and boxes were obtained with Tesseract 4.1.1
         snake_case				  =      [["11:14", "to", "11:39", "a.m", "11:39", "to", "11:44", "a.m.", "11:44", "a.m.", "to", "12:25", "p.m.", "12:25", "to", "12:58", "p.m.", "12:58", "to", "4:00", "p.m.", "2:00", "to", "5:00", "p.m.", "Coffee", "Break", "Coffee", "will", "be", "served", "for", "men", "and", "women", "in", "the", "lobby", "adjacent", "to", "exhibit", "area.", "Please", "move", "into", "exhibit", "area.", "(Exhibits", "Open)", "TRRF", "GENERAL", "SESSION", "(PART", "|)", "Presiding:", "Lee", "A.", "Waller", "TRRF", "Vice", "President", "“Introductory", "Remarks”", "Lee", "A.", "Waller,", "TRRF", "Vice", "Presi-", "dent", "Individual", "Interviews", "with", "TRRF", "Public", "Board", "Members", "and", "Sci-", "entific", "Advisory", "Council", "Mem-", "bers", "Conducted", "by", "TRRF", "Treasurer", "Philip", "G.", "Kuehn", "to", "get", "answers", "which", "the", "public", "refrigerated", "warehousing", "industry", "is", "looking", "for.", "Plus", "questions", "from", "the", "floor.", "Dr.", "Emil", "M.", "Mrak,", "University", "of", "Cal-", "ifornia,", "Chairman,", "TRRF", "Board;", "Sam", "R.", "Cecil,", "University", "of", "Georgia", "College", "of", "Agriculture;", "Dr.", "Stanley", "Charm,", "Tufts", "University", "School", "of", "Medicine;", "Dr.", "Robert", "H.", "Cotton,", "ITT", "Continental", "Baking", "Company;", "Dr.", "Owen", "Fennema,", "University", "of", "Wis-", "consin;", "Dr.", "Robert", "E.", "Hardenburg,", "USDA.", "Questions", "and", "Answers", "Exhibits", "Open", "Capt.", "Jack", "Stoney", "Room", "TRRF", "Scientific", "Advisory", "Council", "Meeting", "Ballroom", "Foyer"]]  # noqa: E231
         snake_case				  =      [[[1_4_1, 5_7, 2_1_4, 6_9], [2_2_8, 5_8, 2_5_2, 6_9], [1_4_1, 7_5, 2_1_6, 8_8], [2_3_0, 7_9, 2_8_0, 8_8], [1_4_2, 2_6_0, 2_1_8, 2_7_3], [2_3_0, 2_6_1, 2_5_5, 2_7_3], [1_4_3, 2_7_9, 2_1_8, 2_9_0], [2_3_1, 2_8_2, 2_9_0, 2_9_1], [1_4_3, 3_4_2, 2_1_8, 3_5_4], [2_3_1, 3_4_5, 2_8_9, 3_5_5], [2_0_2, 3_6_2, 2_2_7, 3_7_3], [1_4_3, 3_7_9, 2_2_0, 3_9_2], [2_3_1, 3_8_2, 2_9_1, 3_9_4], [1_4_4, 7_1_4, 2_2_0, 7_2_6], [2_3_1, 7_1_5, 2_5_6, 7_2_6], [1_4_4, 7_3_2, 2_2_0, 7_4_5], [2_3_2, 7_3_6, 2_9_1, 7_4_7], [1_4_4, 7_6_9, 2_1_8, 7_8_2], [2_3_1, 7_7_0, 2_5_6, 7_8_2], [1_4_1, 7_8_8, 2_0_2, 8_0_1], [2_1_5, 7_9_1, 2_7_4, 8_0_4], [1_4_3, 8_2_6, 2_0_4, 8_3_8], [2_1_5, 8_2_6, 2_4_0, 8_3_8], [1_4_2, 8_4_4, 2_0_2, 8_5_7], [2_1_5, 8_4_7, 2_7_4, 8_5_9], [3_3_4, 5_7, 4_2_7, 6_9], [4_4_0, 5_7, 5_2_2, 6_9], [3_6_9, 7_5, 4_6_1, 8_8], [4_6_9, 7_5, 5_1_6, 8_8], [5_2_8, 7_6, 5_6_2, 8_8], [5_7_0, 7_6, 6_6_7, 8_8], [6_7_5, 7_5, 7_1_1, 8_7], [7_2_1, 7_9, 7_7_8, 8_8], [7_8_9, 7_5, 8_4_0, 8_8], [3_6_9, 9_7, 4_7_0, 1_0_7], [4_8_4, 9_4, 5_0_7, 1_0_6], [5_1_8, 9_4, 5_6_2, 1_0_7], [5_7_6, 9_4, 6_5_5, 1_1_0], [6_6_8, 9_4, 7_9_2, 1_0_9], [8_0_4, 9_5, 8_2_9, 1_0_7], [3_6_9, 1_1_3, 4_6_5, 1_2_5], [4_7_7, 1_1_6, 5_4_7, 1_2_5], [5_6_2, 1_1_3, 6_5_8, 1_2_5], [6_7_1, 1_1_6, 7_4_8, 1_2_5], [7_6_1, 1_1_3, 8_1_1, 1_2_5], [3_6_9, 1_3_1, 4_6_5, 1_4_3], [4_7_7, 1_3_3, 5_4_8, 1_4_3], [5_6_3, 1_3_0, 6_9_8, 1_4_5], [7_1_0, 1_3_0, 8_0_2, 1_4_6], [3_3_6, 1_7_1, 4_1_2, 1_8_3], [4_2_3, 1_7_1, 5_7_2, 1_8_3], [5_8_2, 1_7_0, 7_1_6, 1_8_4], [7_2_8, 1_7_1, 8_1_7, 1_8_7], [8_2_9, 1_7_1, 8_4_4, 1_8_6], [3_3_8, 1_9_7, 4_8_2, 2_1_2], [5_0_7, 1_9_6, 5_5_7, 2_0_9], [5_6_9, 1_9_6, 5_9_5, 2_0_8], [6_1_0, 1_9_6, 7_0_2, 2_0_9], [5_0_5, 2_1_4, 5_8_3, 2_2_6], [5_9_5, 2_1_4, 6_5_6, 2_2_7], [6_7_0, 2_1_5, 8_0_7, 2_2_7], [3_3_5, 2_5_9, 5_4_3, 2_7_4], [5_5_6, 2_5_9, 7_0_8, 2_7_2], [3_7_2, 2_7_9, 4_2_2, 2_9_1], [4_3_5, 2_7_9, 4_6_0, 2_9_1], [4_7_4, 2_7_9, 5_7_4, 2_9_2], [5_8_7, 2_7_8, 6_6_4, 2_9_1], [6_7_6, 2_7_8, 7_3_8, 2_9_1], [7_5_1, 2_7_9, 8_3_4, 2_9_1], [3_7_2, 2_9_8, 4_3_4, 3_1_0], [3_3_5, 3_4_1, 4_8_3, 3_5_4], [4_9_7, 3_4_1, 6_5_5, 3_5_4], [6_6_7, 3_4_1, 7_2_8, 3_5_4], [7_4_0, 3_4_1, 8_2_5, 3_5_4], [3_3_5, 3_6_0, 4_3_0, 3_7_2], [4_4_2, 3_6_0, 5_3_4, 3_7_2], [5_4_5, 3_5_9, 6_8_7, 3_7_2], [6_9_7, 3_6_0, 7_5_4, 3_7_2], [7_6_5, 3_6_0, 8_2_3, 3_7_3], [3_3_4, 3_7_8, 4_2_8, 3_9_1], [4_4_0, 3_7_8, 5_7_7, 3_9_4], [5_9_0, 3_7_8, 7_0_5, 3_9_1], [7_2_0, 3_7_8, 8_0_1, 3_9_1], [3_3_4, 3_9_7, 4_0_0, 4_0_9], [3_7_0, 4_1_6, 5_2_9, 4_2_9], [5_4_4, 4_1_6, 5_7_6, 4_3_2], [5_8_7, 4_1_6, 6_6_5, 4_2_8], [6_7_7, 4_1_6, 8_1_4, 4_2_9], [3_7_2, 4_3_5, 4_5_2, 4_5_0], [4_6_5, 4_3_4, 4_9_5, 4_4_7], [5_1_1, 4_3_4, 6_0_0, 4_4_7], [6_1_1, 4_3_6, 6_3_7, 4_4_7], [6_4_9, 4_3_6, 6_9_4, 4_5_1], [7_0_5, 4_3_8, 8_2_4, 4_4_7], [3_6_9, 4_5_3, 4_5_2, 4_6_6], [4_6_4, 4_5_4, 5_0_9, 4_6_6], [5_2_2, 4_5_3, 6_1_1, 4_6_9], [6_2_5, 4_5_3, 7_9_2, 4_6_9], [3_7_0, 4_7_2, 5_5_6, 4_8_8], [5_7_0, 4_7_2, 6_8_4, 4_8_7], [6_9_7, 4_7_2, 7_1_8, 4_8_5], [7_3_2, 4_7_2, 8_3_5, 4_8_8], [3_6_9, 4_9_0, 4_1_1, 5_0_3], [4_2_5, 4_9_0, 4_8_4, 5_0_3], [4_9_6, 4_9_0, 6_3_5, 5_0_6], [6_4_5, 4_9_0, 7_0_7, 5_0_3], [7_1_8, 4_9_1, 7_6_1, 5_0_3], [7_7_1, 4_9_0, 8_4_0, 5_0_3], [3_3_6, 5_1_0, 3_7_4, 5_2_1], [3_8_8, 5_1_0, 4_4_7, 5_2_2], [4_6_0, 5_1_0, 4_8_9, 5_2_1], [5_0_3, 5_1_0, 5_8_0, 5_2_2], [5_9_2, 5_0_9, 7_3_6, 5_2_5], [7_4_5, 5_0_9, 7_7_0, 5_2_2], [7_8_1, 5_0_9, 8_4_0, 5_2_2], [3_3_8, 5_2_8, 4_3_4, 5_4_1], [4_4_8, 5_2_8, 5_9_6, 5_4_1], [6_0_9, 5_2_7, 6_8_7, 5_4_0], [7_0_0, 5_2_8, 7_9_2, 5_4_1], [3_3_6, 5_4_6, 3_9_7, 5_5_9], [4_0_7, 5_4_6, 4_3_1, 5_5_9], [4_4_3, 5_4_6, 5_2_5, 5_6_0], [5_3_7, 5_4_6, 6_8_0, 5_6_2], [6_8_8, 5_4_6, 7_1_4, 5_5_9], [7_2_2, 5_4_6, 8_3_7, 5_6_2], [3_3_6, 5_6_5, 4_4_9, 5_8_1], [4_6_1, 5_6_5, 4_8_5, 5_7_7], [4_9_7, 5_6_5, 6_6_5, 5_8_1], [6_8_1, 5_6_5, 7_1_8, 5_7_7], [7_3_2, 5_6_5, 8_3_7, 5_8_0], [3_3_7, 5_8_4, 4_3_8, 5_9_7], [4_5_2, 5_8_3, 5_2_1, 5_9_6], [5_3_5, 5_8_4, 6_7_7, 5_9_9], [6_9_0, 5_8_3, 7_8_7, 5_9_6], [8_0_1, 5_8_3, 8_2_5, 5_9_6], [3_3_8, 6_0_2, 4_7_8, 6_1_5], [4_9_2, 6_0_2, 5_3_0, 6_1_4], [5_4_3, 6_0_2, 6_3_8, 6_1_5], [6_5_0, 6_0_2, 6_7_6, 6_1_4], [6_8_8, 6_0_2, 7_8_8, 6_1_5], [8_0_2, 6_0_2, 8_4_3, 6_1_4], [3_3_7, 6_2_1, 5_0_2, 6_3_3], [5_1_6, 6_2_1, 6_1_5, 6_3_7], [6_2_9, 6_2_1, 7_7_4, 6_3_6], [7_8_9, 6_2_1, 8_2_7, 6_3_3], [3_3_7, 6_3_9, 4_1_8, 6_5_2], [4_3_2, 6_4_0, 5_7_1, 6_5_3], [5_8_7, 6_3_9, 7_3_1, 6_5_5], [7_4_3, 6_3_9, 7_6_9, 6_5_2], [7_8_0, 6_3_9, 8_4_1, 6_5_2], [3_3_8, 6_5_8, 4_4_0, 6_7_3], [4_5_5, 6_5_8, 4_9_1, 6_7_0], [5_0_8, 6_5_8, 6_0_2, 6_7_1], [6_1_6, 6_5_8, 6_3_8, 6_7_0], [6_5_4, 6_5_8, 8_3_5, 6_7_4], [3_3_7, 6_7_7, 4_2_9, 6_8_9], [3_3_7, 7_1_4, 4_8_2, 7_2_6], [4_9_5, 7_1_4, 5_4_8, 7_2_6], [5_6_1, 7_1_4, 6_8_3, 7_2_6], [3_3_8, 7_7_0, 4_6_1, 7_8_2], [4_7_4, 7_6_9, 5_5_4, 7_8_5], [4_8_9, 7_8_8, 5_6_2, 8_0_3], [5_7_6, 7_8_8, 6_4_3, 8_0_1], [6_5_6, 7_8_7, 7_5_1, 8_0_4], [7_6_4, 7_8_8, 8_4_4, 8_0_1], [3_3_4, 8_2_5, 4_2_1, 8_3_8], [4_3_0, 8_2_4, 5_7_4, 8_3_8], [5_8_4, 8_2_4, 7_2_3, 8_4_1], [3_3_5, 8_4_4, 4_5_0, 8_5_7], [4_6_4, 8_4_3, 5_8_3, 8_6_0], [6_2_8, 8_6_2, 7_5_5, 8_7_5], [7_6_9, 8_6_1, 8_4_8, 8_7_8]]]  # noqa: E231
         # fmt: on

         self.assertListEqual(encoding.words       ,					_A     )
         self.assertListEqual(encoding.boxes       ,					_A     )

         # with apply_OCR = False
         snake_case				  =      LayoutLMvaImageProcessor(apply_ocr=_A     )

         snake_case				  =      image_processing(_A       ,					return_tensors="pt"     )

         self.assertEqual(encoding.pixel_values.shape       ,					(1, 3, 2_2_4, 2_2_4)     )

