



import gc
import unittest

import numpy as np
import torch
import torch.nn.functional as F
from transformers import (
    ClapTextConfig,
    ClapTextModelWithProjection,
    RobertaTokenizer,
    SpeechTaHifiGan,
    SpeechTaHifiGanConfig,
)

from diffusers import (
    AudioLDMPipeline,
    AutoencoderKL,
    DDIMScheduler,
    LMSDiscreteScheduler,
    PNDMScheduler,
    UNetaDConditionModel,
)
from diffusers.utils import is_xformers_available, slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism

from ..pipeline_params import TEXT_TO_AUDIO_BATCH_PARAMS, TEXT_TO_AUDIO_PARAMS
from ..test_pipelines_common import PipelineTesterMixin


enable_full_determinism()



class   UpperCAmelCase_    (       a   ,					unittest.TestCase):
							lowerCamelCase__   			=		AudioLDMPipeline
							lowerCamelCase__   			=		TEXT_TO_AUDIO_PARAMS
							lowerCamelCase__   			=		TEXT_TO_AUDIO_BATCH_PARAMS
							lowerCamelCase__   			=		frozenset(
							    [
							        'num_inference_steps',
							        'num_waveforms_per_prompt',
							        'generator',
							        'latents',
							        'output_type',
							        'return_dict',
							        'callback',
							        'callback_steps',
							    ])







							def    snake_case__      (   self):

														'''simple docstring'''

														torch.manual_seed(0)
														_lowerCAmelCase     :							Optional[Any]    =    UNetaDConditionModel(
														    block_out_channels=(32, 64),			layers_per_block=2,			sample_size=32,			in_channels=4,			out_channels=4,			down_block_types=("DownBlock2D", "CrossAttnDownBlock2D"),			up_block_types=("CrossAttnUpBlock2D", "UpBlock2D"),			cross_attention_dim=(32, 64),			class_embed_type="simple_projection",			projection_class_embeddings_input_dim=32,			class_embeddings_concat=__a,			)
														_lowerCAmelCase     :							Dict    =    DDIMScheduler(
														    beta_start=0.00_085,			beta_end=0.012,			beta_schedule="scaled_linear",			clip_sample=__a,			set_alpha_to_one=__a,			)
														torch.manual_seed(0)
														_lowerCAmelCase     :							Optional[int]    =    AutoencoderKL(
														    block_out_channels=[32, 64],			in_channels=1,			out_channels=1,			down_block_types=["DownEncoderBlock2D", "DownEncoderBlock2D"],			up_block_types=["UpDecoderBlock2D", "UpDecoderBlock2D"],			latent_channels=4,			)
														torch.manual_seed(0)
														_lowerCAmelCase     :							int    =    ClapTextConfig(
														    bos_token_id=0,			eos_token_id=2,			hidden_size=32,			intermediate_size=37,			layer_norm_eps=1E-05,			num_attention_heads=4,			num_hidden_layers=5,			pad_token_id=1,			vocab_size=1000,			projection_dim=32,			)
														_lowerCAmelCase     :							Optional[int]    =    ClapTextModelWithProjection(__a)
														_lowerCAmelCase     :							str    =    RobertaTokenizer.from_pretrained("hf-internal-testing/tiny-random-roberta",			model_max_length=77)

														_lowerCAmelCase     :							int    =    SpeechTaHifiGanConfig(
														    model_in_dim=8,			sampling_rate=1_6000,			upsample_initial_channel=16,			upsample_rates=[2, 2],			upsample_kernel_sizes=[4, 4],			resblock_kernel_sizes=[3, 7],			resblock_dilation_sizes=[[1, 3, 5], [1, 3, 5]],			normalize_before=__a,			)

														_lowerCAmelCase     :							str    =    SpeechTaHifiGan(__a)

														_lowerCAmelCase     :							List[Any]    =    {
														    "unet": unet,
														    "scheduler": scheduler,
														    "vae": vae,
														    "text_encoder": text_encoder,
														    "tokenizer": tokenizer,
														    "vocoder": vocoder,
														}
														return components







							def    snake_case__      (   self,			__a,			__a=0):

														'''simple docstring'''

														if str(__a).startswith("mps"):
																					_lowerCAmelCase     :							List[Any]    =    torch.manual_seed(__a)
														else:
																					_lowerCAmelCase     :							Any    =    torch.Generator(device=__a).manual_seed(__a)
														_lowerCAmelCase     :							List[Any]    =    {
														    "prompt": "A hammer hitting a wooden surface",
														    "generator": generator,
														    "num_inference_steps": 2,
														    "guidance_scale": 6.0,
														}
														return inputs







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							List[Any]    =    "cpu"  # ensure determinism for the device-dependent torch.Generator

														_lowerCAmelCase     :							Optional[int]    =    self.get_dummy_components()
														_lowerCAmelCase     :							Optional[Any]    =    AudioLDMPipeline(**__a)
														_lowerCAmelCase     :							Union[str, Any]    =    audioldm_pipe.to(__a)
														audioldm_pipe.set_progress_bar_config(disable=__a)

														_lowerCAmelCase     :							Union[str, Any]    =    self.get_dummy_inputs(__a)
														_lowerCAmelCase     :							str    =    audioldm_pipe(**__a)
														_lowerCAmelCase     :							Optional[Any]    =    output.audios[0]

														assert audio.ndim == 1
														assert len(__a) == 256

														_lowerCAmelCase     :							List[str]    =    audio[:10]
														_lowerCAmelCase     :							int    =    np.array(
														    [-0.0_050, 0.0_050, -0.0_060, 0.0_033, -0.0_026, 0.0_033, -0.0_027, 0.0_033, -0.0_028, 0.0_033])

														assert np.abs(audio_slice - expected_slice).max() < 1E-2







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							Optional[int]    =    self.get_dummy_components()
														_lowerCAmelCase     :							List[Any]    =    AudioLDMPipeline(**__a)
														_lowerCAmelCase     :							Optional[int]    =    audioldm_pipe.to(__a)
														_lowerCAmelCase     :							Union[str, Any]    =    audioldm_pipe.to(__a)
														audioldm_pipe.set_progress_bar_config(disable=__a)

														_lowerCAmelCase     :							Union[str, Any]    =    self.get_dummy_inputs(__a)
														_lowerCAmelCase     :							List[str]    =    3 * [inputs["prompt"]]

														# forward
														_lowerCAmelCase     :							Dict    =    audioldm_pipe(**__a)
														_lowerCAmelCase     :							List[Any]    =    output.audios[0]

														_lowerCAmelCase     :							Any    =    self.get_dummy_inputs(__a)
														_lowerCAmelCase     :							Dict    =    3 * [inputs.pop("prompt")]

														_lowerCAmelCase     :							List[str]    =    audioldm_pipe.tokenizer(
														    __a,			padding="max_length",			max_length=audioldm_pipe.tokenizer.model_max_length,			truncation=__a,			return_tensors="pt",			)
														_lowerCAmelCase     :							str    =    text_inputs["input_ids"].to(__a)

														_lowerCAmelCase     :							Dict    =    audioldm_pipe.text_encoder(
														    __a,			)
														_lowerCAmelCase     :							Tuple    =    prompt_embeds.text_embeds
														# additional L_2 normalization over each hidden-state
														_lowerCAmelCase     :							str    =    F.normalize(__a,			dim=-1)

														_lowerCAmelCase     :							Dict    =    prompt_embeds

														# forward
														_lowerCAmelCase     :							List[Any]    =    audioldm_pipe(**__a)
														_lowerCAmelCase     :							Dict    =    output.audios[0]

														assert np.abs(audio_a - audio_a).max() < 1E-2







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							Optional[Any]    =    self.get_dummy_components()
														_lowerCAmelCase     :							Optional[int]    =    AudioLDMPipeline(**__a)
														_lowerCAmelCase     :							List[Any]    =    audioldm_pipe.to(__a)
														_lowerCAmelCase     :							int    =    audioldm_pipe.to(__a)
														audioldm_pipe.set_progress_bar_config(disable=__a)

														_lowerCAmelCase     :							Any    =    self.get_dummy_inputs(__a)
														_lowerCAmelCase     :							List[Any]    =    3 * ["this is a negative prompt"]
														_lowerCAmelCase     :							Tuple    =    negative_prompt
														_lowerCAmelCase     :							Dict    =    3 * [inputs["prompt"]]

														# forward
														_lowerCAmelCase     :							Tuple    =    audioldm_pipe(**__a)
														_lowerCAmelCase     :							Dict    =    output.audios[0]

														_lowerCAmelCase     :							List[str]    =    self.get_dummy_inputs(__a)
														_lowerCAmelCase     :							Tuple    =    3 * [inputs.pop("prompt")]

														_lowerCAmelCase     :							List[str]    =    []
														for p in [prompt, negative_prompt]:
																					_lowerCAmelCase     :							Tuple    =    audioldm_pipe.tokenizer(
																					    __a,			padding="max_length",			max_length=audioldm_pipe.tokenizer.model_max_length,			truncation=__a,			return_tensors="pt",			)
																					_lowerCAmelCase     :							List[Any]    =    text_inputs["input_ids"].to(__a)

																					_lowerCAmelCase     :							str    =    audioldm_pipe.text_encoder(
																					    __a,			)
																					_lowerCAmelCase     :							Optional[int]    =    text_embeds.text_embeds
																					# additional L_2 normalization over each hidden-state
																					_lowerCAmelCase     :							Optional[Any]    =    F.normalize(__a,			dim=-1)

																					embeds.append(__a)

														_lowerCAmelCase   ,    _lowerCAmelCase     :							int    =    embeds

														# forward
														_lowerCAmelCase     :							str    =    audioldm_pipe(**__a)
														_lowerCAmelCase     :							Union[str, Any]    =    output.audios[0]

														assert np.abs(audio_a - audio_a).max() < 1E-2







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							int    =    "cpu"  # ensure determinism for the device-dependent torch.Generator
														_lowerCAmelCase     :							Optional[int]    =    self.get_dummy_components()
														_lowerCAmelCase     :							List[str]    =    PNDMScheduler(skip_prk_steps=__a)
														_lowerCAmelCase     :							Optional[Any]    =    AudioLDMPipeline(**__a)
														_lowerCAmelCase     :							Union[str, Any]    =    audioldm_pipe.to(__a)
														audioldm_pipe.set_progress_bar_config(disable=__a)

														_lowerCAmelCase     :							int    =    self.get_dummy_inputs(__a)
														_lowerCAmelCase     :							Optional[Any]    =    "egg cracking"
														_lowerCAmelCase     :							Dict    =    audioldm_pipe(**__a,			negative_prompt=__a)
														_lowerCAmelCase     :							Tuple    =    output.audios[0]

														assert audio.ndim == 1
														assert len(__a) == 256

														_lowerCAmelCase     :							Optional[Any]    =    audio[:10]
														_lowerCAmelCase     :							List[str]    =    np.array(
														    [-0.0_051, 0.0_050, -0.0_060, 0.0_034, -0.0_026, 0.0_033, -0.0_027, 0.0_033, -0.0_028, 0.0_032])

														assert np.abs(audio_slice - expected_slice).max() < 1E-2







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							List[Any]    =    "cpu"  # ensure determinism for the device-dependent torch.Generator
														_lowerCAmelCase     :							Dict    =    self.get_dummy_components()
														_lowerCAmelCase     :							List[Any]    =    PNDMScheduler(skip_prk_steps=__a)
														_lowerCAmelCase     :							Tuple    =    AudioLDMPipeline(**__a)
														_lowerCAmelCase     :							Optional[Any]    =    audioldm_pipe.to(__a)
														audioldm_pipe.set_progress_bar_config(disable=__a)

														_lowerCAmelCase     :							Any    =    "A hammer hitting a wooden surface"

														# test num_waveforms_per_prompt=1 (default)
														_lowerCAmelCase     :							Optional[Any]    =    audioldm_pipe(__a,			num_inference_steps=2).audios

														assert audios.shape == (1, 256)

														# test num_waveforms_per_prompt=1 (default) for batch of prompts
														_lowerCAmelCase     :							Union[str, Any]    =    2
														_lowerCAmelCase     :							int    =    audioldm_pipe([prompt] * batch_size,			num_inference_steps=2).audios

														assert audios.shape == (batch_size, 256)

														# test num_waveforms_per_prompt for single prompt
														_lowerCAmelCase     :							int    =    2
														_lowerCAmelCase     :							Tuple    =    audioldm_pipe(__a,			num_inference_steps=2,			num_waveforms_per_prompt=__a).audios

														assert audios.shape == (num_waveforms_per_prompt, 256)

														# test num_waveforms_per_prompt for batch of prompts
														_lowerCAmelCase     :							Optional[int]    =    2
														_lowerCAmelCase     :							Union[str, Any]    =    audioldm_pipe(
														    [prompt] * batch_size,			num_inference_steps=2,			num_waveforms_per_prompt=__a).audios

														assert audios.shape == (batch_size * num_waveforms_per_prompt, 256)







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							Any    =    "cpu"  # ensure determinism for the device-dependent torch.Generator
														_lowerCAmelCase     :							str    =    self.get_dummy_components()
														_lowerCAmelCase     :							int    =    AudioLDMPipeline(**__a)
														_lowerCAmelCase     :							Any    =    audioldm_pipe.to(__a)
														audioldm_pipe.set_progress_bar_config(disable=__a)
														_lowerCAmelCase     :							Optional[Any]    =    audioldm_pipe.vocoder.config.sampling_rate

														_lowerCAmelCase     :							List[str]    =    self.get_dummy_inputs(__a)
														_lowerCAmelCase     :							Optional[Any]    =    audioldm_pipe(audio_length_in_s=0.016,			**__a)
														_lowerCAmelCase     :							Union[str, Any]    =    output.audios[0]

														assert audio.ndim == 1
														assert len(__a) / vocoder_sampling_rate == 0.016

														_lowerCAmelCase     :							List[str]    =    audioldm_pipe(audio_length_in_s=0.032,			**__a)
														_lowerCAmelCase     :							str    =    output.audios[0]

														assert audio.ndim == 1
														assert len(__a) / vocoder_sampling_rate == 0.032







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							List[str]    =    self.get_dummy_components()
														_lowerCAmelCase     :							Dict    =    AudioLDMPipeline(**__a)
														_lowerCAmelCase     :							List[Any]    =    audioldm_pipe.to(__a)
														audioldm_pipe.set_progress_bar_config(disable=__a)

														_lowerCAmelCase     :							Optional[int]    =    ["hey"]

														_lowerCAmelCase     :							Optional[int]    =    audioldm_pipe(__a,			num_inference_steps=1)
														_lowerCAmelCase     :							Optional[int]    =    output.audios.shape
														assert audio_shape == (1, 256)

														_lowerCAmelCase     :							int    =    audioldm_pipe.vocoder.config
														config.model_in_dim *= 2
														_lowerCAmelCase     :							int    =    SpeechTaHifiGan(__a).to(__a)
														_lowerCAmelCase     :							Tuple    =    audioldm_pipe(__a,			num_inference_steps=1)
														_lowerCAmelCase     :							List[str]    =    output.audios.shape
														# waveform shape is unchanged, we just have 2x the number of mel channels in the spectrogram
														assert audio_shape == (1, 256)







							def    snake_case__      (   self):

														'''simple docstring'''

														self._test_attention_slicing_forward_pass(test_mean_pixel_difference=__a)







							def    snake_case__      (   self):

														'''simple docstring'''

														self._test_inference_batch_single_identical(test_mean_pixel_difference=__a)







							@unittest.skipIf(
							    torch_device != "cuda" or not is_xformers_available(),			reason="XFormers attention is only available with CUDA and `xformers` installed",			)
							def    snake_case__      (   self):

														'''simple docstring'''

														self._test_xformers_attention_forwardGenerator_pass(test_mean_pixel_difference=__a)



@slow
class   UpperCAmelCase_    (       unittest.TestCase):







							def    snake_case__      (   self):

														'''simple docstring'''

														super().tearDown()
														gc.collect()
														torch.cuda.empty_cache()







							def    snake_case__      (   self,			__a,			__a="cpu",			__a=torch.floataa,			__a=0):

														'''simple docstring'''

														_lowerCAmelCase     :							List[str]    =    torch.Generator(device=__a).manual_seed(__a)
														_lowerCAmelCase     :							Union[str, Any]    =    np.random.RandomState(__a).standard_normal((1, 8, 128, 16))
														_lowerCAmelCase     :							Union[str, Any]    =    torch.from_numpy(__a).to(device=__a,			dtype=__a)
														_lowerCAmelCase     :							str    =    {
														    "prompt": "A hammer hitting a wooden surface",
														    "latents": latents,
														    "generator": generator,
														    "num_inference_steps": 3,
														    "guidance_scale": 2.5,
														}
														return inputs







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							Union[str, Any]    =    AudioLDMPipeline.from_pretrained("cvssp/audioldm")
														_lowerCAmelCase     :							List[Any]    =    audioldm_pipe.to(__a)
														audioldm_pipe.set_progress_bar_config(disable=__a)

														_lowerCAmelCase     :							Any    =    self.get_inputs(__a)
														_lowerCAmelCase     :							Any    =    25
														_lowerCAmelCase     :							List[Any]    =    audioldm_pipe(**__a).audios[0]

														assert audio.ndim == 1
														assert len(__a) == 8_1920

														_lowerCAmelCase     :							Any    =    audio[7_7230:7_7240]
														_lowerCAmelCase     :							Tuple    =    np.array(
														    [-0.4_884, -0.4_607, 0.0_023, 0.5_007, 0.5_896, 0.5_151, 0.3_813, -0.0_208, -0.3_687, -0.4_315])
														_lowerCAmelCase     :							str    =    np.abs(expected_slice - audio_slice).max()
														assert max_diff < 1E-2







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							Tuple    =    AudioLDMPipeline.from_pretrained("cvssp/audioldm")
														_lowerCAmelCase     :							List[str]    =    LMSDiscreteScheduler.from_config(audioldm_pipe.scheduler.config)
														_lowerCAmelCase     :							Optional[Any]    =    audioldm_pipe.to(__a)
														audioldm_pipe.set_progress_bar_config(disable=__a)

														_lowerCAmelCase     :							str    =    self.get_inputs(__a)
														_lowerCAmelCase     :							Optional[Any]    =    audioldm_pipe(**__a).audios[0]

														assert audio.ndim == 1
														assert len(__a) == 8_1920

														_lowerCAmelCase     :							Any    =    audio[2_7780:2_7790]
														_lowerCAmelCase     :							Optional[Any]    =    np.array([-0.2_131, -0.0_873, -0.0_124, -0.0_189, 0.0_569, 0.1_373, 0.1_883, 0.2_886, 0.3_297, 0.2_212])
														_lowerCAmelCase     :							Optional[int]    =    np.abs(expected_slice - audio_slice).max()
														assert max_diff < 3E-2





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   UpperCAmelCase_    :







							def __init__(   self,			__a,			__a=13,			__a=7,			__a=True,			__a=True,			__a=True,			__a=True,			__a=99,			__a=24,			__a=2,			__a=6,			__a=37,			__a="gelu",			__a=0.1,			__a=0.1,			__a=512,			__a=16,			__a=2,			__a=0.02,			__a=3,			__a=None,			__a=1000,			):

														'''simple docstring'''

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







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							Dict    =    ids_tensor([self.batch_size, self.seq_length],			self.vocab_size)

														_lowerCAmelCase     :							int    =    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]:
																																			_lowerCAmelCase     :							Dict    =    bbox[i, j, 3]
																																			_lowerCAmelCase     :							int    =    bbox[i, j, 1]
																																			_lowerCAmelCase     :							Tuple    =    t
																												if bbox[i, j, 2] < bbox[i, j, 0]:
																																			_lowerCAmelCase     :							str    =    bbox[i, j, 2]
																																			_lowerCAmelCase     :							List[Any]    =    bbox[i, j, 0]
																																			_lowerCAmelCase     :							str    =    t

														_lowerCAmelCase     :							Optional[Any]    =    None
														if self.use_input_mask:
																					_lowerCAmelCase     :							Union[str, Any]    =    ids_tensor([self.batch_size, self.seq_length],			vocab_size=2)

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

														_lowerCAmelCase     :							Optional[int]    =    None
														_lowerCAmelCase     :							Optional[Any]    =    None
														if self.use_labels:
																					_lowerCAmelCase     :							Optional[Any]    =    ids_tensor([self.batch_size],			self.type_sequence_label_size)
																					_lowerCAmelCase     :							Any    =    ids_tensor([self.batch_size, self.seq_length],			self.num_labels)

														_lowerCAmelCase     :							Optional[int]    =    self.get_config()

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







							def    snake_case__      (   self):

														'''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    snake_case__      (   self,			__a,			__a,			__a,			__a,			__a,			__a,			__a,			):

														'''simple docstring'''

														_lowerCAmelCase     :							Union[str, Any]    =    LiltModel(config=__a)
														model.to(__a)
														model.eval()
														_lowerCAmelCase     :							Dict    =    model(__a,			bbox=__a,			attention_mask=__a,			token_type_ids=__a)
														_lowerCAmelCase     :							str    =    model(__a,			bbox=__a,			token_type_ids=__a)
														_lowerCAmelCase     :							List[Any]    =    model(__a,			bbox=__a)

														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    snake_case__      (   self,			__a,			__a,			__a,			__a,			__a,			__a,			__a,			):

														'''simple docstring'''

														_lowerCAmelCase     :							List[Any]    =    self.num_labels
														_lowerCAmelCase     :							Optional[Any]    =    LiltForTokenClassification(config=__a)
														model.to(__a)
														model.eval()
														_lowerCAmelCase     :							Dict    =    model(
														    __a,			bbox=__a,			attention_mask=__a,			token_type_ids=__a,			labels=__a)
														self.parent.assertEqual(result.logits.shape,			(self.batch_size, self.seq_length, self.num_labels))







							def    snake_case__      (   self,			__a,			__a,			__a,			__a,			__a,			__a,			__a,			):

														'''simple docstring'''

														_lowerCAmelCase     :							Optional[int]    =    LiltForQuestionAnswering(config=__a)
														model.to(__a)
														model.eval()
														_lowerCAmelCase     :							Tuple    =    model(
														    __a,			bbox=__a,			attention_mask=__a,			token_type_ids=__a,			start_positions=__a,			end_positions=__a,			)
														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    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							Optional[Any]    =    self.prepare_config_and_inputs()
														(
														    (
														    _lowerCAmelCase
														)   ,    (
														    _lowerCAmelCase
														)   ,    (
														    _lowerCAmelCase
														)   ,    (
														    _lowerCAmelCase
														)   ,    (
														    _lowerCAmelCase
														)   ,    (
														    _lowerCAmelCase
														)   ,    (
														    _lowerCAmelCase
														)   ,    
														)     :							Dict    =    config_and_inputs
														_lowerCAmelCase     :							List[Any]    =    {
														    "input_ids": input_ids,
														    "bbox": bbox,
														    "token_type_ids": token_type_ids,
														    "attention_mask": input_mask,
														}
														return config, inputs_dict



@require_torch
class   UpperCAmelCase_    (       a   ,					a   ,					a   ,					unittest.TestCase):
							lowerCamelCase__   			=		(
							    (
							        LiltModel,
							        LiltForSequenceClassification,
							        LiltForTokenClassification,
							        LiltForQuestionAnswering,
							    )
							    if is_torch_available()
							    else ()
							)
							lowerCamelCase__   			=		(
							    {
							        'feature-extraction': LiltModel,
							        'question-answering': LiltForQuestionAnswering,
							        'text-classification': LiltForSequenceClassification,
							        'token-classification': LiltForTokenClassification,
							        'zero-shot': LiltForSequenceClassification,
							    }
							    if is_torch_available()
							    else {}
							)
							lowerCamelCase__   			=		False
							lowerCamelCase__   			=		False







							def    snake_case__      (   self,			__a,			__a,			__a,			__a,			__a):

														'''simple docstring'''

														return True







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							Optional[Any]    =    LiltModelTester(self)
														_lowerCAmelCase     :							Union[str, Any]    =    ConfigTester(self,			config_class=__a,			hidden_size=37)







							def    snake_case__      (   self):

														'''simple docstring'''

														self.config_tester.run_common_tests()







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							Dict    =    self.model_tester.prepare_config_and_inputs()
														self.model_tester.create_and_check_model(*__a)







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							int    =    self.model_tester.prepare_config_and_inputs()
														for type in ["absolute", "relative_key", "relative_key_query"]:
																					_lowerCAmelCase     :							Any    =    type
																					self.model_tester.create_and_check_model(*__a)







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							int    =    self.model_tester.prepare_config_and_inputs()
														self.model_tester.create_and_check_for_token_classification(*__a)







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							Optional[int]    =    self.model_tester.prepare_config_and_inputs()
														self.model_tester.create_and_check_for_question_answering(*__a)







							@slow
							def    snake_case__      (   self):

														'''simple docstring'''

														for model_name in LILT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
																					_lowerCAmelCase     :							str    =    LiltModel.from_pretrained(__a)
																					self.assertIsNotNone(__a)



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







							def    snake_case__      (   self):

														'''simple docstring'''

														_lowerCAmelCase     :							Dict    =    LiltModel.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base").to(__a)

														_lowerCAmelCase     :							Any    =    torch.tensor([[1, 2]],			device=__a)
														_lowerCAmelCase     :							str    =    torch.tensor([[[1, 2, 3, 4], [5, 6, 7, 8]]],			device=__a)

														# forward pass
														with torch.no_grad():
																					_lowerCAmelCase     :							Optional[Any]    =    model(input_ids=__a,			bbox=__a)

														_lowerCAmelCase     :							Optional[int]    =    torch.Size([1, 2, 768])
														_lowerCAmelCase     :							List[str]    =    torch.tensor(
														    [[-0.0_653, 0.0_950, -0.0_061], [-0.0_545, 0.0_926, -0.0_324]],			device=__a,			)

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