
import random
import unittest

import numpy as np

import transformers
from transformers import is_flax_available, is_torch_available
from transformers.testing_utils import is_pt_flax_cross_test, require_flax


if is_flax_available():
					import os

					import jax.numpy as jnp
					from jax import jit

					from transformers import AutoTokenizer, FlaxAutoModelForCausalLM
					from transformers.modeling_flax_pytorch_utils import load_flax_weights_in_pytorch_model

					_UpperCAmelCase					: str      =       """0.12"""  # assumed parallelism: 8


if is_torch_available():
					import torch


def       A       (					lowercase    ,       lowercase    ,       lowercase=None )   ->  str:
		'''simple docstring'''

		if rng is None:
				UpperCamelCase		=     random.Random()

		UpperCamelCase		=     1
		for dim in shape:
				total_dims *= dim

		UpperCamelCase		=     []
		for _ in range(__a ):
				values.append(rng.randint(0    ,       vocab_size - 1 ) )

		UpperCamelCase		=     np.array(__a    ,       dtype=jnp.intaa ).reshape(__a )

		return output


def       A       (					lowercase    ,       lowercase=None )   ->  Optional[Any]:
		'''simple docstring'''

		UpperCamelCase		=     ids_tensor(__a    ,       vocab_size=2    ,       rng=__a )
		# make sure that at least one token is attended to for each batch
		UpperCamelCase		=     1
		return attn_mask


@require_flax
class 				lowercase					:
		__lowercase       :       Tuple	     =				None
		__lowercase       :       Optional[Any]	     =				()



		def __UpperCamelCase ( self       )  ->					List[str]:
				"""simple docstring"""
				UpperCamelCase		=     self.model_tester.prepare_config_and_inputs_for_common()

				# cut to half length & take max batch_size 3
				UpperCamelCase		=     2
				UpperCamelCase		=     inputs['''input_ids'''].shape[-1] // 2
				UpperCamelCase		=     inputs['''input_ids'''][:max_batch_size, :sequence_length]

				UpperCamelCase		=     jnp.ones_like(lowercase_       )
				UpperCamelCase		=     attention_mask[:max_batch_size, :sequence_length]

				# generate max 5 tokens
				UpperCamelCase		=     input_ids.shape[-1] + 5
				if config.eos_token_id is not None and config.pad_token_id is None:
						# hack to allow generate for models such as GPT2 as is done in `generate()`
						UpperCamelCase		=     config.eos_token_id
				return config, input_ids, attention_mask, max_length



		@is_pt_flax_cross_test
		def __UpperCamelCase ( self       )  ->					Union[str, Any]:
				"""simple docstring"""
				UpperCamelCase		=     self._get_input_ids_and_config()
				UpperCamelCase		=     False
				UpperCamelCase		=     max_length
				UpperCamelCase		=     0

				for model_class in self.all_generative_model_classes:
						UpperCamelCase		=     model_class(lowercase_       )

						UpperCamelCase		=     model_class.__name__[4:]  # Skip the "Flax" at the beginning
						UpperCamelCase		=     getattr(lowercase_				,      lowercase_       )
						UpperCamelCase		=     pt_model_class(lowercase_       ).eval()
						UpperCamelCase		=     load_flax_weights_in_pytorch_model(lowercase_				,      flax_model.params       )

						UpperCamelCase		=     flax_model.generate(lowercase_       ).sequences
						UpperCamelCase		=     pt_model.generate(torch.tensor(lowercase_				,      dtype=torch.long       )       )

						if flax_generation_outputs.shape[-1] > pt_generation_outputs.shape[-1]:
								UpperCamelCase		=     flax_generation_outputs[:, : pt_generation_outputs.shape[-1]]

						self.assertListEqual(pt_generation_outputs.numpy().tolist()				,      flax_generation_outputs.tolist()       )



		def __UpperCamelCase ( self       )  ->					Optional[int]:
				"""simple docstring"""
				UpperCamelCase		=     self._get_input_ids_and_config()
				UpperCamelCase		=     False
				UpperCamelCase		=     max_length

				for model_class in self.all_generative_model_classes:
						UpperCamelCase		=     model_class(lowercase_       )

						UpperCamelCase		=     model.generate(lowercase_       ).sequences
						self.assertEqual(generation_outputs.shape[-1]				,      lowercase_       )

						UpperCamelCase		=     jit(model.generate       )
						UpperCamelCase		=     jit_generate(lowercase_       ).sequences

						self.assertListEqual(generation_outputs.tolist()				,      jit_generation_outputs.tolist()       )



		def __UpperCamelCase ( self       )  ->					Any:
				"""simple docstring"""
				UpperCamelCase		=     self._get_input_ids_and_config()
				UpperCamelCase		=     True
				UpperCamelCase		=     max_length

				for model_class in self.all_generative_model_classes:
						UpperCamelCase		=     model_class(lowercase_       )

						UpperCamelCase		=     model.generate(lowercase_       ).sequences
						self.assertEqual(generation_outputs.shape[-1]				,      lowercase_       )

						UpperCamelCase		=     jit(model.generate       )
						UpperCamelCase		=     jit_generate(lowercase_       ).sequences

						self.assertListEqual(generation_outputs.tolist()				,      jit_generation_outputs.tolist()       )



		def __UpperCamelCase ( self       )  ->					Any:
				"""simple docstring"""
				UpperCamelCase		=     self._get_input_ids_and_config()
				UpperCamelCase		=     False
				UpperCamelCase		=     max_length
				UpperCamelCase		=     2

				for model_class in self.all_generative_model_classes:
						UpperCamelCase		=     model_class(lowercase_       )

						UpperCamelCase		=     model.generate(lowercase_       ).sequences
						self.assertEqual(generation_outputs.shape[-1]				,      lowercase_       )

						UpperCamelCase		=     jit(model.generate       )
						UpperCamelCase		=     jit_generate(lowercase_       ).sequences

						self.assertListEqual(generation_outputs.tolist()				,      jit_generation_outputs.tolist()       )



		def __UpperCamelCase ( self       )  ->					Any:
				"""simple docstring"""
				UpperCamelCase		=     self._get_input_ids_and_config()
				UpperCamelCase		=     False
				UpperCamelCase		=     max_length
				UpperCamelCase		=     2
				UpperCamelCase		=     2

				for model_class in self.all_generative_model_classes:
						UpperCamelCase		=     model_class(lowercase_       )

						UpperCamelCase		=     model.generate(lowercase_       ).sequences
						self.assertEqual(generation_outputs.shape[0]				,      input_ids.shape[0] * config.num_return_sequences       )



		def __UpperCamelCase ( self       )  ->					Optional[Any]:
				"""simple docstring"""
				UpperCamelCase		=     self._get_input_ids_and_config()
				UpperCamelCase		=     True
				UpperCamelCase		=     max_length
				UpperCamelCase		=     0.8
				UpperCamelCase		=     10
				UpperCamelCase		=     0.3
				UpperCamelCase		=     1
				UpperCamelCase		=     8
				UpperCamelCase		=     9

				for model_class in self.all_generative_model_classes:
						UpperCamelCase		=     model_class(lowercase_       )

						UpperCamelCase		=     model.generate(lowercase_       ).sequences
						self.assertEqual(generation_outputs.shape[-1]				,      lowercase_       )

						UpperCamelCase		=     jit(model.generate       )
						UpperCamelCase		=     jit_generate(lowercase_       ).sequences

						self.assertListEqual(generation_outputs.tolist()				,      jit_generation_outputs.tolist()       )



		def __UpperCamelCase ( self       )  ->					List[Any]:
				"""simple docstring"""
				UpperCamelCase		=     self._get_input_ids_and_config()
				UpperCamelCase		=     max_length
				UpperCamelCase		=     1
				UpperCamelCase		=     8
				UpperCamelCase		=     9

				for model_class in self.all_generative_model_classes:
						UpperCamelCase		=     model_class(lowercase_       )

						UpperCamelCase		=     model.generate(lowercase_       ).sequences
						self.assertEqual(generation_outputs.shape[-1]				,      lowercase_       )

						UpperCamelCase		=     jit(model.generate       )
						UpperCamelCase		=     jit_generate(lowercase_       ).sequences

						self.assertListEqual(generation_outputs.tolist()				,      jit_generation_outputs.tolist()       )



		def __UpperCamelCase ( self       )  ->					Optional[Any]:
				"""simple docstring"""
				UpperCamelCase		=     self._get_input_ids_and_config()
				UpperCamelCase		=     max_length
				UpperCamelCase		=     2
				UpperCamelCase		=     1
				UpperCamelCase		=     8
				UpperCamelCase		=     9

				for model_class in self.all_generative_model_classes:
						UpperCamelCase		=     model_class(lowercase_       )

						UpperCamelCase		=     model.generate(lowercase_       ).sequences
						self.assertEqual(generation_outputs.shape[-1]				,      lowercase_       )

						UpperCamelCase		=     jit(model.generate       )
						UpperCamelCase		=     jit_generate(lowercase_       ).sequences

						self.assertListEqual(generation_outputs.tolist()				,      jit_generation_outputs.tolist()       )



		def __UpperCamelCase ( self       )  ->					Optional[int]:
				"""simple docstring"""
				UpperCamelCase		=     self._get_input_ids_and_config()

				# pad attention mask on the left
				UpperCamelCase		=     attention_mask.at[(0, 0)].set(0       )

				UpperCamelCase		=     False
				UpperCamelCase		=     max_length

				for model_class in self.all_generative_model_classes:
						UpperCamelCase		=     model_class(lowercase_       )

						UpperCamelCase		=     model.generate(lowercase_				,      attention_mask=lowercase_       ).sequences
						self.assertEqual(generation_outputs.shape[-1]				,      lowercase_       )

						UpperCamelCase		=     jit(model.generate       )
						UpperCamelCase		=     jit_generate(lowercase_				,      attention_mask=lowercase_       ).sequences

						self.assertListEqual(generation_outputs.tolist()				,      jit_generation_outputs.tolist()       )



		def __UpperCamelCase ( self       )  ->					List[Any]:
				"""simple docstring"""
				UpperCamelCase		=     self._get_input_ids_and_config()

				# pad attention mask on the left
				UpperCamelCase		=     attention_mask.at[(0, 0)].set(0       )

				UpperCamelCase		=     True
				UpperCamelCase		=     max_length

				for model_class in self.all_generative_model_classes:
						UpperCamelCase		=     model_class(lowercase_       )

						UpperCamelCase		=     model.generate(lowercase_				,      attention_mask=lowercase_       ).sequences
						self.assertEqual(generation_outputs.shape[-1]				,      lowercase_       )

						UpperCamelCase		=     jit(model.generate       )
						UpperCamelCase		=     jit_generate(lowercase_				,      attention_mask=lowercase_       ).sequences

						self.assertListEqual(generation_outputs.tolist()				,      jit_generation_outputs.tolist()       )



		def __UpperCamelCase ( self       )  ->					str:
				"""simple docstring"""
				UpperCamelCase		=     self._get_input_ids_and_config()

				# pad attention mask on the left
				UpperCamelCase		=     attention_mask.at[(0, 0)].set(0       )

				UpperCamelCase		=     2
				UpperCamelCase		=     max_length

				for model_class in self.all_generative_model_classes:
						UpperCamelCase		=     model_class(lowercase_       )

						UpperCamelCase		=     model.generate(lowercase_				,      attention_mask=lowercase_       ).sequences
						self.assertEqual(generation_outputs.shape[-1]				,      lowercase_       )

						UpperCamelCase		=     jit(model.generate       )
						UpperCamelCase		=     jit_generate(lowercase_				,      attention_mask=lowercase_       ).sequences

						self.assertListEqual(generation_outputs.tolist()				,      jit_generation_outputs.tolist()       )






@require_flax
class 				lowercase					(		unittest.TestCase   ):



		def __UpperCamelCase ( self       )  ->					int:
				"""simple docstring"""
				UpperCamelCase		=     AutoTokenizer.from_pretrained('hf-internal-testing/tiny-bert'       )
				UpperCamelCase		=     FlaxAutoModelForCausalLM.from_pretrained('hf-internal-testing/tiny-bert-flax-only'       )

				UpperCamelCase		=     '''Hello world'''
				UpperCamelCase		=     tokenizer(lowercase_				,      return_tensors='np'       ).input_ids

				# typos are quickly detected (the correct argument is `do_sample`)
				with self.assertRaisesRegex(lowercase_				,      'do_samples'       ):
						model.generate(lowercase_				,      do_samples=lowercase_       )

				# arbitrary arguments that will not be used anywhere are also not accepted
				with self.assertRaisesRegex(lowercase_				,      'foo'       ):
						UpperCamelCase		=     {'''foo''': '''bar'''}
						model.generate(lowercase_				,      **lowercase_       )








"""simple docstring"""






import unittest

from transformers import LiltConfig, is_torch_available
from transformers.testing_utils import require_torch, slow, torch_device

from ...generation.test_utils import GenerationTesterMixin
from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
  import torch

  from transformers import (
      LiltForQuestionAnswering,
      LiltForSequenceClassification,
      LiltForTokenClassification,
      LiltModel,
  )
  from transformers.models.lilt.modeling_lilt import LILT_PRETRAINED_MODEL_ARCHIVE_LIST




class 							lowerCAmelCase__				:






      '''simple docstring'''

      def __init__(						self     :  Any						,	lowercase_     :  List[Any]						,	lowercase_     :  List[str]=13						,	lowercase_     :  int=7						,	lowercase_     :  Any=True						,	lowercase_     :  str=True						,	lowercase_     :  List[Any]=True						,	lowercase_     :  List[Any]=True						,	lowercase_     :  Dict=99						,	lowercase_     :  Union[str, Any]=24						,	lowercase_     :  int=2						,	lowercase_     :  List[str]=6						,	lowercase_     :  Any=37						,	lowercase_     :  Dict="gelu"						,	lowercase_     :  List[str]=0.1						,	lowercase_     :  Dict=0.1						,	lowercase_     :  Union[str, Any]=512						,	lowercase_     :  List[str]=16						,	lowercase_     :  Any=2						,	lowercase_     :  Any=0.02						,	lowercase_     :  List[Any]=3						,	lowercase_     :  Optional[int]=None						,	lowercase_     :  str=1000						,	):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_      :  List[str]    						=		parent
          SCREAMING_SNAKE_CASE_      :  Optional[Any]    						=		batch_size
          SCREAMING_SNAKE_CASE_      :  Optional[Any]    						=		seq_length
          SCREAMING_SNAKE_CASE_      :  List[Any]    						=		is_training
          SCREAMING_SNAKE_CASE_      :  Optional[int]    						=		use_input_mask
          SCREAMING_SNAKE_CASE_      :  Optional[Any]    						=		use_token_type_ids
          SCREAMING_SNAKE_CASE_      :  int    						=		use_labels
          SCREAMING_SNAKE_CASE_      :  List[Any]    						=		vocab_size
          SCREAMING_SNAKE_CASE_      :  List[str]    						=		hidden_size
          SCREAMING_SNAKE_CASE_      :  List[Any]    						=		num_hidden_layers
          SCREAMING_SNAKE_CASE_      :  List[str]    						=		num_attention_heads
          SCREAMING_SNAKE_CASE_      :  Tuple    						=		intermediate_size
          SCREAMING_SNAKE_CASE_      :  Tuple    						=		hidden_act
          SCREAMING_SNAKE_CASE_      :  int    						=		hidden_dropout_prob
          SCREAMING_SNAKE_CASE_      :  str    						=		attention_probs_dropout_prob
          SCREAMING_SNAKE_CASE_      :  List[Any]    						=		max_position_embeddings
          SCREAMING_SNAKE_CASE_      :  Union[str, Any]    						=		type_vocab_size
          SCREAMING_SNAKE_CASE_      :  List[str]    						=		type_sequence_label_size
          SCREAMING_SNAKE_CASE_      :  Any    						=		initializer_range
          SCREAMING_SNAKE_CASE_      :  Optional[Any]    						=		num_labels
          SCREAMING_SNAKE_CASE_      :  Tuple    						=		scope
          SCREAMING_SNAKE_CASE_      :  Optional[int]    						=		range_bbox
      def _SCREAMING_SNAKE_CASE (						self     :  List[str]):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_      :  Tuple    						=		ids_tensor([self.batch_size, self.seq_length]						,	self.vocab_size)

          SCREAMING_SNAKE_CASE_      :  Dict    						=		ids_tensor([self.batch_size, self.seq_length, 4]						,	self.range_bbox)
          # Ensure that bbox is legal
          for i in range(bbox.shape[0]):
              for j in range(bbox.shape[1]):
                  if bbox[i, j, 3] < bbox[i, j, 1]:
                      SCREAMING_SNAKE_CASE_      :  Optional[int]    						=		bbox[i, j, 3]
                      SCREAMING_SNAKE_CASE_      :  Optional[int]    						=		bbox[i, j, 1]
                      SCREAMING_SNAKE_CASE_      :  str    						=		t
                  if bbox[i, j, 2] < bbox[i, j, 0]:
                      SCREAMING_SNAKE_CASE_      :  List[str]    						=		bbox[i, j, 2]
                      SCREAMING_SNAKE_CASE_      :  Optional[int]    						=		bbox[i, j, 0]
                      SCREAMING_SNAKE_CASE_      :  List[str]    						=		t

          SCREAMING_SNAKE_CASE_      :  Tuple    						=		None
          if self.use_input_mask:
              SCREAMING_SNAKE_CASE_      :  List[Any]    						=		ids_tensor([self.batch_size, self.seq_length]						,	vocab_size=2)

          SCREAMING_SNAKE_CASE_      :  Union[str, Any]    						=		None
          if self.use_token_type_ids:
              SCREAMING_SNAKE_CASE_      :  Optional[int]    						=		ids_tensor([self.batch_size, self.seq_length]						,	self.type_vocab_size)

          SCREAMING_SNAKE_CASE_      :  List[str]    						=		None
          SCREAMING_SNAKE_CASE_      :  List[str]    						=		None
          if self.use_labels:
              SCREAMING_SNAKE_CASE_      :  int    						=		ids_tensor([self.batch_size]						,	self.type_sequence_label_size)
              SCREAMING_SNAKE_CASE_      :  Dict    						=		ids_tensor([self.batch_size, self.seq_length]						,	self.num_labels)

          SCREAMING_SNAKE_CASE_      :  Any    						=		self.get_config()

          return config, input_ids, bbox, token_type_ids, input_mask, sequence_labels, token_labels
      def _SCREAMING_SNAKE_CASE (						self     :  Optional[int]):




          '''simple docstring'''


          return LiltConfig(
              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						,	)
      def _SCREAMING_SNAKE_CASE (						self     :  Optional[int]						,	lowercase_     :  Optional[Any]						,	lowercase_     :  Optional[Any]						,	lowercase_     :  str						,	lowercase_     :  Optional[Any]						,	lowercase_     :  int						,	lowercase_     :  Optional[Any]						,	lowercase_     :  int						,	):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_      :  Tuple    						=		LiltModel(config=lowercase_)
          model.to(lowercase_)
          model.eval()
          SCREAMING_SNAKE_CASE_      :  List[Any]    						=		model(lowercase_						,	bbox=lowercase_						,	attention_mask=lowercase_						,	token_type_ids=lowercase_)
          SCREAMING_SNAKE_CASE_      :  List[Any]    						=		model(lowercase_						,	bbox=lowercase_						,	token_type_ids=lowercase_)
          SCREAMING_SNAKE_CASE_      :  int    						=		model(lowercase_						,	bbox=lowercase_)

          self.parent.assertEqual(result.last_hidden_state.shape						,	(self.batch_size, self.seq_length, self.hidden_size))
          self.parent.assertEqual(result.pooler_output.shape						,	(self.batch_size, self.hidden_size))
      def _SCREAMING_SNAKE_CASE (						self     :  int						,	lowercase_     :  Union[str, Any]						,	lowercase_     :  Union[str, Any]						,	lowercase_     :  Union[str, Any]						,	lowercase_     :  Optional[Any]						,	lowercase_     :  Union[str, Any]						,	lowercase_     :  List[Any]						,	lowercase_     :  int						,	):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_      :  Optional[Any]    						=		self.num_labels
          SCREAMING_SNAKE_CASE_      :  Optional[Any]    						=		LiltForTokenClassification(config=lowercase_)
          model.to(lowercase_)
          model.eval()
          SCREAMING_SNAKE_CASE_      :  Tuple    						=		model(
              lowercase_						,	bbox=lowercase_						,	attention_mask=lowercase_						,	token_type_ids=lowercase_						,	labels=lowercase_)
          self.parent.assertEqual(result.logits.shape						,	(self.batch_size, self.seq_length, self.num_labels))
      def _SCREAMING_SNAKE_CASE (						self     :  Tuple						,	lowercase_     :  str						,	lowercase_     :  Union[str, Any]						,	lowercase_     :  Any						,	lowercase_     :  Dict						,	lowercase_     :  List[str]						,	lowercase_     :  List[Any]						,	lowercase_     :  str						,	):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_      :  Union[str, Any]    						=		LiltForQuestionAnswering(config=lowercase_)
          model.to(lowercase_)
          model.eval()
          SCREAMING_SNAKE_CASE_      :  Optional[int]    						=		model(
              lowercase_						,	bbox=lowercase_						,	attention_mask=lowercase_						,	token_type_ids=lowercase_						,	start_positions=lowercase_						,	end_positions=lowercase_						,	)
          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 _SCREAMING_SNAKE_CASE (						self     :  Tuple):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_      :  str    						=		self.prepare_config_and_inputs()
          (
              (
              SCREAMING_SNAKE_CASE_
          )						,			(
              SCREAMING_SNAKE_CASE_
          )						,			(
              SCREAMING_SNAKE_CASE_
          )						,			(
              SCREAMING_SNAKE_CASE_
          )						,			(
              SCREAMING_SNAKE_CASE_
          )						,			(
              SCREAMING_SNAKE_CASE_
          )						,			(
              SCREAMING_SNAKE_CASE_
          )						,			
          )      :  List[str]    						=		config_and_inputs
          SCREAMING_SNAKE_CASE_      :  str    						=		{
              '''input_ids''': input_ids,
              '''bbox''': bbox,
              '''token_type_ids''': token_type_ids,
              '''attention_mask''': input_mask,
          }
          return config, inputs_dict




@require_torch
class 							lowerCAmelCase__				(			UpperCAmelCase__				,		UpperCAmelCase__				,		UpperCAmelCase__				,		unittest.TestCase ):






      '''simple docstring'''

      __UpperCamelCase	 =  (
          (
              LiltModel,
              LiltForSequenceClassification,
              LiltForTokenClassification,
              LiltForQuestionAnswering,
          )
          if is_torch_available()
          else ()
      )
      __UpperCamelCase	 =  (
          {
              "feature-extraction": LiltModel,
              "question-answering": LiltForQuestionAnswering,
              "text-classification": LiltForSequenceClassification,
              "token-classification": LiltForTokenClassification,
              "zero-shot": LiltForSequenceClassification,
          }
          if is_torch_available()
          else {}
      )
      __UpperCamelCase	 =  False
      __UpperCamelCase	 =  False
      def _SCREAMING_SNAKE_CASE (						self     :  Any						,	lowercase_     :  List[str]						,	lowercase_     :  Optional[int]						,	lowercase_     :  Optional[int]						,	lowercase_     :  str						,	lowercase_     :  str):




          '''simple docstring'''


          return True
      def _SCREAMING_SNAKE_CASE (						self     :  Tuple):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_      :  Dict    						=		LiltModelTester(self)
          SCREAMING_SNAKE_CASE_      :  Optional[int]    						=		ConfigTester(self						,	config_class=lowercase_						,	hidden_size=37)
      def _SCREAMING_SNAKE_CASE (						self     :  Union[str, Any]):




          '''simple docstring'''


          self.config_tester.run_common_tests()
      def _SCREAMING_SNAKE_CASE (						self     :  List[str]):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_      :  Union[str, Any]    						=		self.model_tester.prepare_config_and_inputs()
          self.model_tester.create_and_check_model(*lowercase_)
      def _SCREAMING_SNAKE_CASE (						self     :  Tuple):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_      :  Tuple    						=		self.model_tester.prepare_config_and_inputs()
          for type in ["absolute", "relative_key", "relative_key_query"]:
              SCREAMING_SNAKE_CASE_      :  Dict    						=		type
              self.model_tester.create_and_check_model(*lowercase_)
      def _SCREAMING_SNAKE_CASE (						self     :  str):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_      :  Optional[Any]    						=		self.model_tester.prepare_config_and_inputs()
          self.model_tester.create_and_check_for_token_classification(*lowercase_)
      def _SCREAMING_SNAKE_CASE (						self     :  Tuple):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_      :  List[str]    						=		self.model_tester.prepare_config_and_inputs()
          self.model_tester.create_and_check_for_question_answering(*lowercase_)



      @slow
      def _SCREAMING_SNAKE_CASE (						self     :  Optional[int]):




          '''simple docstring'''


          for model_name in LILT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
              SCREAMING_SNAKE_CASE_      :  Optional[int]    						=		LiltModel.from_pretrained(lowercase_)
              self.assertIsNotNone(lowercase_)




@require_torch
@slow
class 							lowerCAmelCase__				(			unittest.TestCase ):






      '''simple docstring'''

      def _SCREAMING_SNAKE_CASE (						self     :  Optional[int]):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_      :  List[str]    						=		LiltModel.from_pretrained('''SCUT-DLVCLab/lilt-roberta-en-base''').to(lowercase_)

          SCREAMING_SNAKE_CASE_      :  str    						=		torch.tensor([[1, 2]]						,	device=lowercase_)
          SCREAMING_SNAKE_CASE_      :  Optional[int]    						=		torch.tensor([[[1, 2, 3, 4], [5, 6, 7, 8]]]						,	device=lowercase_)

          # forward pass
          with torch.no_grad():
              SCREAMING_SNAKE_CASE_      :  Dict    						=		model(input_ids=lowercase_						,	bbox=lowercase_)

          SCREAMING_SNAKE_CASE_      :  str    						=		torch.Size([1, 2, 768])
          SCREAMING_SNAKE_CASE_      :  Dict    						=		torch.tensor(
              [[-0.06_53, 0.09_50, -0.00_61], [-0.05_45, 0.09_26, -0.03_24]]						,	device=lowercase_						,	)

          self.assertTrue(outputs.last_hidden_state.shape						,	lowercase_)
          self.assertTrue(torch.allclose(outputs.last_hidden_state[0, :, :3]						,	lowercase_						,	atol=1e-3))


