



"""simple docstring"""







import gc
import unittest

import numpy as np
import torch
from transformers import CLIPTextConfig, CLIPTextModel, CLIPTokenizer

from diffusers import (
    AutoencoderKL,
    DDIMScheduler,
    EulerAncestralDiscreteScheduler,
    PNDMScheduler,
    StableDiffusionModelEditingPipeline,
    UNetaDConditionModel,
)
from diffusers.utils import slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu, skip_mps

from ..pipeline_params import TEXT_TO_IMAGE_BATCH_PARAMS, TEXT_TO_IMAGE_IMAGE_PARAMS, TEXT_TO_IMAGE_PARAMS
from ..test_pipelines_common import PipelineKarrasSchedulerTesterMixin, PipelineLatentTesterMixin, PipelineTesterMixin


enable_full_determinism()






@skip_mps
class   UpperCAmelCase__		(   a__ ,a__ ,a__ ,unittest.TestCase  ):
		lowerCAmelCase_							:						List[Any]							=  StableDiffusionModelEditingPipeline
		lowerCAmelCase_							:						Optional[int]							=  TEXT_TO_IMAGE_PARAMS
		lowerCAmelCase_							:						int							=  TEXT_TO_IMAGE_BATCH_PARAMS
		lowerCAmelCase_							:						Any							=  TEXT_TO_IMAGE_IMAGE_PARAMS
		lowerCAmelCase_							:						List[Any]							=  TEXT_TO_IMAGE_IMAGE_PARAMS



		def        A_		(			self	:     str					)      ->    int:






									'''simple docstring'''

									torch.manual_seed(0					)
									A    =       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   ,				)
									A    =       DDIMScheduler()
									torch.manual_seed(0					)
									A    =       AutoencoderKL(
									    block_out_channels=[32, 64]   ,				in_channels=3   ,				out_channels=3   ,				down_block_types=['DownEncoderBlock2D', 'DownEncoderBlock2D']   ,				up_block_types=['UpDecoderBlock2D', 'UpDecoderBlock2D']   ,				latent_channels=4   ,				)
									torch.manual_seed(0					)
									A    =       CLIPTextConfig(
									    bos_token_id=0   ,				eos_token_id=2   ,				hidden_size=32   ,				intermediate_size=37   ,				layer_norm_eps=1E-0_5   ,				num_attention_heads=4   ,				num_hidden_layers=5   ,				pad_token_id=1   ,				vocab_size=1_000   ,				)
									A    =       CLIPTextModel(_lowerCamelCase					)
									A    =       CLIPTokenizer.from_pretrained('hf-internal-testing/tiny-random-clip'					)

									A    =       {
									    '''unet''': unet,
									    '''scheduler''': scheduler,
									    '''vae''': vae,
									    '''text_encoder''': text_encoder,
									    '''tokenizer''': tokenizer,
									    '''safety_checker''': None,
									    '''feature_extractor''': None,
									}
									return components



		def        A_		(			self	:     int   ,				snake_case	:     str   ,				snake_case	:     Tuple=0					)      ->    Optional[int]:






									'''simple docstring'''

									A    =       torch.manual_seed(_lowerCamelCase					)
									A    =       {
									    '''prompt''': '''A field of roses''',
									    '''generator''': generator,
									    # Setting height and width to None to prevent OOMs on CPU.
									    '''height''': None,
									    '''width''': None,
									    '''num_inference_steps''': 2,
									    '''guidance_scale''': 6.0,
									    '''output_type''': '''numpy''',
									}
									return inputs



		def        A_		(			self	:     Dict					)      ->    Optional[int]:






									'''simple docstring'''

									A    =       '''cpu'''  # ensure determinism for the device-dependent torch.Generator
									A    =       self.get_dummy_components()
									A    =       StableDiffusionModelEditingPipeline(**_lowerCamelCase					)
									A    =       sd_pipe.to(_lowerCamelCase					)
									sd_pipe.set_progress_bar_config(disable=_lowerCamelCase					)

									A    =       self.get_dummy_inputs(_lowerCamelCase					)
									A    =       sd_pipe(**_lowerCamelCase					).images
									A    =       image[0, -3:, -3:, -1]
									assert image.shape == (1, 64, 64, 3)

									A    =       np.array([0.4755, 0.5132, 0.4976, 0.3904, 0.3554, 0.4765, 0.5139, 0.5158, 0.4889]					)

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



		def        A_		(			self	:     int					)      ->    List[Any]:






									'''simple docstring'''

									A    =       '''cpu'''  # ensure determinism for the device-dependent torch.Generator
									A    =       self.get_dummy_components()
									A    =       StableDiffusionModelEditingPipeline(**_lowerCamelCase					)
									A    =       sd_pipe.to(_lowerCamelCase					)
									sd_pipe.set_progress_bar_config(disable=_lowerCamelCase					)

									A    =       self.get_dummy_inputs(_lowerCamelCase					)
									A    =       '''french fries'''
									A    =       sd_pipe(**_lowerCamelCase   ,				negative_prompt=_lowerCamelCase					)
									A    =       output.images
									A    =       image[0, -3:, -3:, -1]

									assert image.shape == (1, 64, 64, 3)

									A    =       np.array([0.4992, 0.5101, 0.5004, 0.3949, 0.3604, 0.4735, 0.5216, 0.5204, 0.4913]					)

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



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






									'''simple docstring'''

									A    =       '''cpu'''  # ensure determinism for the device-dependent torch.Generator
									A    =       self.get_dummy_components()
									A    =       EulerAncestralDiscreteScheduler(
									    beta_start=0.00085   ,				beta_end=0.012   ,				beta_schedule='scaled_linear'					)
									A    =       StableDiffusionModelEditingPipeline(**_lowerCamelCase					)
									A    =       sd_pipe.to(_lowerCamelCase					)
									sd_pipe.set_progress_bar_config(disable=_lowerCamelCase					)

									A    =       self.get_dummy_inputs(_lowerCamelCase					)
									A    =       sd_pipe(**_lowerCamelCase					).images
									A    =       image[0, -3:, -3:, -1]

									assert image.shape == (1, 64, 64, 3)

									A    =       np.array([0.4747, 0.5372, 0.4779, 0.4982, 0.5543, 0.4816, 0.5238, 0.4904, 0.5027]					)

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



		def        A_		(			self	:     Tuple					)      ->    Any:






									'''simple docstring'''

									A    =       '''cpu'''  # ensure determinism for the device-dependent torch.Generator
									A    =       self.get_dummy_components()
									A    =       PNDMScheduler()
									A    =       StableDiffusionModelEditingPipeline(**_lowerCamelCase					)
									A    =       sd_pipe.to(_lowerCamelCase					)
									sd_pipe.set_progress_bar_config(disable=_lowerCamelCase					)

									A    =       self.get_dummy_inputs(_lowerCamelCase					)
									# the pipeline does not expect pndm so test if it raises error.
									with self.assertRaises(_lowerCamelCase					):
																A    =       sd_pipe(**_lowerCamelCase					).images



		def        A_		(			self	:     Tuple					)      ->    Dict:






									'''simple docstring'''

									super().test_inference_batch_single_identical(expected_max_diff=5E-3					)



		def        A_		(			self	:     Dict					)      ->    List[Any]:






									'''simple docstring'''

									super().test_attention_slicing_forward_pass(expected_max_diff=5E-3					)






@slow
@require_torch_gpu
class   UpperCAmelCase__		(   unittest.TestCase  ):



		def        A_		(			self	:     Union[str, Any]					)      ->    Dict:






									'''simple docstring'''

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



		def        A_		(			self	:     int   ,				snake_case	:     Dict=0					)      ->    Dict:






									'''simple docstring'''

									A    =       torch.manual_seed(_lowerCamelCase					)
									A    =       {
									    '''prompt''': '''A field of roses''',
									    '''generator''': generator,
									    '''num_inference_steps''': 3,
									    '''guidance_scale''': 7.5,
									    '''output_type''': '''numpy''',
									}
									return inputs



		def        A_		(			self	:     Tuple					)      ->    List[str]:






									'''simple docstring'''

									A    =       '''CompVis/stable-diffusion-v1-4'''
									A    =       StableDiffusionModelEditingPipeline.from_pretrained(_lowerCamelCase   ,				safety_checker=_lowerCamelCase					)
									pipe.to(_lowerCamelCase					)
									pipe.set_progress_bar_config(disable=_lowerCamelCase					)
									pipe.enable_attention_slicing()

									A    =       self.get_inputs()
									A    =       pipe(**_lowerCamelCase					).images
									A    =       image[0, -3:, -3:, -1].flatten()

									assert image.shape == (1, 512, 512, 3)

									A    =       np.array(
									    [0.6749496, 0.6386453, 0.51443267, 0.66094905, 0.61921215, 0.5491332, 0.5744417, 0.58075106, 0.5174658]					)

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

									# make sure image changes after editing
									pipe.edit_model('A pack of roses'   ,				'A pack of blue roses'					)

									A    =       pipe(**_lowerCamelCase					).images
									A    =       image[0, -3:, -3:, -1].flatten()

									assert image.shape == (1, 512, 512, 3)

									assert np.abs(expected_slice - image_slice					).max() > 1E-1



		def        A_		(			self	:     int					)      ->    str:






									'''simple docstring'''

									torch.cuda.empty_cache()
									torch.cuda.reset_max_memory_allocated()
									torch.cuda.reset_peak_memory_stats()

									A    =       '''CompVis/stable-diffusion-v1-4'''
									A    =       DDIMScheduler.from_pretrained(_lowerCamelCase   ,				subfolder='scheduler'					)
									A    =       StableDiffusionModelEditingPipeline.from_pretrained(
									    _lowerCamelCase   ,				scheduler=_lowerCamelCase   ,				safety_checker=_lowerCamelCase					)
									A    =       pipe.to(_lowerCamelCase					)
									pipe.set_progress_bar_config(disable=_lowerCamelCase					)
									pipe.enable_attention_slicing(1					)
									pipe.enable_sequential_cpu_offload()

									A    =       self.get_inputs()
									A    =       pipe(**_lowerCamelCase					)

									A    =       torch.cuda.max_memory_allocated()
									# make sure that less than 4.4 GB is allocated
									assert mem_bytes < 4.4 * 10**9





import unittest

from transformers import FunnelConfig, FunnelTokenizer, is_torch_available
from transformers.models.auto import get_values
from transformers.testing_utils import require_sentencepiece, require_tokenizers, require_torch, slow, torch_device

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 (
          MODEL_FOR_PRETRAINING_MAPPING,
          FunnelBaseModel,
          FunnelForMaskedLM,
          FunnelForMultipleChoice,
          FunnelForPreTraining,
          FunnelForQuestionAnswering,
          FunnelForSequenceClassification,
          FunnelForTokenClassification,
          FunnelModel,
      )






class     a_       :



       """simple docstring"""






       def __init__(		self				,       _lowerCamelCase				,       _lowerCamelCase=13				,       _lowerCamelCase=7				,       _lowerCamelCase=True				,       _lowerCamelCase=True				,       _lowerCamelCase=True				,       _lowerCamelCase=True				,       _lowerCamelCase=99				,       _lowerCamelCase=[1, 1, 2]				,       _lowerCamelCase=1				,       _lowerCamelCase=32				,       _lowerCamelCase=4				,       _lowerCamelCase=8				,       _lowerCamelCase=37				,       _lowerCamelCase="gelu_new"				,       _lowerCamelCase=0.1				,       _lowerCamelCase=0.1				,       _lowerCamelCase=0.0				,       _lowerCamelCase=512				,       _lowerCamelCase=3				,       _lowerCamelCase=0.0_2				,       _lowerCamelCase=3				,       _lowerCamelCase=4				,       _lowerCamelCase=None				,       _lowerCamelCase=False				,       )					->List[str]:
           SCREAMING_SNAKE_CASE				:				Any				      = parent
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = batch_size
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = seq_length
           SCREAMING_SNAKE_CASE				:				Dict				      = is_training
           SCREAMING_SNAKE_CASE				:				int				      = use_input_mask
           SCREAMING_SNAKE_CASE				:				Optional[int]				      = use_token_type_ids
           SCREAMING_SNAKE_CASE				:				Tuple				      = use_labels
           SCREAMING_SNAKE_CASE				:				List[str]				      = vocab_size
           SCREAMING_SNAKE_CASE				:				Tuple				      = block_sizes
           SCREAMING_SNAKE_CASE				:				str				      = num_decoder_layers
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = d_model
           SCREAMING_SNAKE_CASE				:				str				      = n_head
           SCREAMING_SNAKE_CASE				:				List[str]				      = d_head
           SCREAMING_SNAKE_CASE				:				Dict				      = d_inner
           SCREAMING_SNAKE_CASE				:				Any				      = hidden_act
           SCREAMING_SNAKE_CASE				:				Dict				      = hidden_dropout
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = attention_dropout
           SCREAMING_SNAKE_CASE				:				List[Any]				      = activation_dropout
           SCREAMING_SNAKE_CASE				:				str				      = max_position_embeddings
           SCREAMING_SNAKE_CASE				:				Optional[int]				      = type_vocab_size
           SCREAMING_SNAKE_CASE				:				Dict				      = 2
           SCREAMING_SNAKE_CASE				:				Tuple				      = num_labels
           SCREAMING_SNAKE_CASE				:				str				      = num_choices
           SCREAMING_SNAKE_CASE				:				Tuple				      = scope
           SCREAMING_SNAKE_CASE				:				List[str]				      = initializer_std

           # Used in the tests to check the size of the first attention layer
           SCREAMING_SNAKE_CASE				:				str				      = n_head
           # Used in the tests to check the size of the first hidden state
           SCREAMING_SNAKE_CASE				:				Tuple				      = self.d_model
           # Used in the tests to check the number of output hidden states/attentions
           SCREAMING_SNAKE_CASE				:				str				      = sum(self.block_sizes   ) + (0 if base else self.num_decoder_layers)
           # FunnelModel adds two hidden layers: input embeddings and the sum of the upsampled encoder hidden state with
           # the last hidden state of the first block (which is the first hidden state of the decoder).
           if not base:
               SCREAMING_SNAKE_CASE				:				Tuple				      = self.num_hidden_layers + 2






       def 	__lowerCAmelCase     (		self   )					->Union[str, Any]:
           SCREAMING_SNAKE_CASE				:				str				      = ids_tensor([self.batch_size, self.seq_length]				,       self.vocab_size   )

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

           SCREAMING_SNAKE_CASE				:				List[str]				      = None
           if self.use_token_type_ids:
               SCREAMING_SNAKE_CASE				:				Dict				      = ids_tensor([self.batch_size, self.seq_length]				,       self.type_vocab_size   )

           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = None
           SCREAMING_SNAKE_CASE				:				Tuple				      = None
           SCREAMING_SNAKE_CASE				:				List[str]				      = None
           if self.use_labels:
               SCREAMING_SNAKE_CASE				:				Tuple				      = ids_tensor([self.batch_size]				,       self.type_sequence_label_size   )
               SCREAMING_SNAKE_CASE				:				str				      = ids_tensor([self.batch_size, self.seq_length]				,       self.num_labels   )
               SCREAMING_SNAKE_CASE				:				Any				      = ids_tensor([self.batch_size]				,       self.num_choices   )
               SCREAMING_SNAKE_CASE				:				Optional[Any]				      = ids_tensor([self.batch_size, self.seq_length]				,       1   )

           SCREAMING_SNAKE_CASE				:				Tuple				      = self.get_config()

           return (
               config,
               input_ids,
               token_type_ids,
               input_mask,
               sequence_labels,
               token_labels,
               choice_labels,
               fake_token_labels,
           )






       def 	__lowerCAmelCase     (		self   )					->str:
           return FunnelConfig(
               vocab_size=self.vocab_size				,       block_sizes=self.block_sizes				,       num_decoder_layers=self.num_decoder_layers				,       d_model=self.d_model				,       n_head=self.n_head				,       d_head=self.d_head				,       d_inner=self.d_inner				,       hidden_act=self.hidden_act				,       hidden_dropout=self.hidden_dropout				,       attention_dropout=self.attention_dropout				,       activation_dropout=self.activation_dropout				,       max_position_embeddings=self.max_position_embeddings				,       type_vocab_size=self.type_vocab_size				,       initializer_std=self.initializer_std				,       )






       def 	__lowerCAmelCase     (		self				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       )					->Optional[Any]:
           SCREAMING_SNAKE_CASE				:				List[Any]				      = FunnelModel(config=_lowerCamelCase   )
           model.to(_lowerCamelCase   )
           model.eval()
           SCREAMING_SNAKE_CASE				:				Dict				      = model(_lowerCamelCase				,       attention_mask=_lowerCamelCase				,       token_type_ids=_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				List[str]				      = model(_lowerCamelCase				,       token_type_ids=_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				Optional[int]				      = model(_lowerCamelCase   )
           self.parent.assertEqual(result.last_hidden_state.shape				,       (self.batch_size, self.seq_length, self.d_model)   )

           SCREAMING_SNAKE_CASE				:				int				      = False
           SCREAMING_SNAKE_CASE				:				List[Any]				      = model(_lowerCamelCase   )
           self.parent.assertEqual(result.last_hidden_state.shape				,       (self.batch_size, self.seq_length, self.d_model)   )

           SCREAMING_SNAKE_CASE				:				str				      = False
           SCREAMING_SNAKE_CASE				:				List[str]				      = model(_lowerCamelCase   )
           self.parent.assertEqual(result.last_hidden_state.shape				,       (self.batch_size, self.seq_length, self.d_model)   )






       def 	__lowerCAmelCase     (		self				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       )					->Any:
           SCREAMING_SNAKE_CASE				:				Optional[int]				      = FunnelBaseModel(config=_lowerCamelCase   )
           model.to(_lowerCamelCase   )
           model.eval()
           SCREAMING_SNAKE_CASE				:				Dict				      = model(_lowerCamelCase				,       attention_mask=_lowerCamelCase				,       token_type_ids=_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				str				      = model(_lowerCamelCase				,       token_type_ids=_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = model(_lowerCamelCase   )
           self.parent.assertEqual(result.last_hidden_state.shape				,       (self.batch_size, 2, self.d_model)   )

           SCREAMING_SNAKE_CASE				:				Optional[int]				      = False
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = model(_lowerCamelCase   )
           self.parent.assertEqual(result.last_hidden_state.shape				,       (self.batch_size, 3, self.d_model)   )

           SCREAMING_SNAKE_CASE				:				List[Any]				      = False
           SCREAMING_SNAKE_CASE				:				Tuple				      = model(_lowerCamelCase   )
           self.parent.assertEqual(result.last_hidden_state.shape				,       (self.batch_size, 2, self.d_model)   )






       def 	__lowerCAmelCase     (		self				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       )					->int:
           SCREAMING_SNAKE_CASE				:				int				      = self.num_labels
           SCREAMING_SNAKE_CASE				:				int				      = FunnelForPreTraining(config=_lowerCamelCase   )
           model.to(_lowerCamelCase   )
           model.eval()
           SCREAMING_SNAKE_CASE				:				str				      = model(_lowerCamelCase				,       attention_mask=_lowerCamelCase				,       token_type_ids=_lowerCamelCase				,       labels=_lowerCamelCase   )
           self.parent.assertEqual(result.logits.shape				,       (self.batch_size, self.seq_length)   )






       def 	__lowerCAmelCase     (		self				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       )					->List[str]:
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = FunnelForMaskedLM(config=_lowerCamelCase   )
           model.to(_lowerCamelCase   )
           model.eval()
           SCREAMING_SNAKE_CASE				:				Optional[int]				      = model(_lowerCamelCase				,       attention_mask=_lowerCamelCase				,       token_type_ids=_lowerCamelCase				,       labels=_lowerCamelCase   )
           self.parent.assertEqual(result.logits.shape				,       (self.batch_size, self.seq_length, self.vocab_size)   )






       def 	__lowerCAmelCase     (		self				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       )					->List[str]:
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = self.num_labels
           SCREAMING_SNAKE_CASE				:				Any				      = FunnelForSequenceClassification(_lowerCamelCase   )
           model.to(_lowerCamelCase   )
           model.eval()
           SCREAMING_SNAKE_CASE				:				int				      = model(_lowerCamelCase				,       attention_mask=_lowerCamelCase				,       token_type_ids=_lowerCamelCase				,       labels=_lowerCamelCase   )
           self.parent.assertEqual(result.logits.shape				,       (self.batch_size, self.num_labels)   )






       def 	__lowerCAmelCase     (		self				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       )					->str:
           SCREAMING_SNAKE_CASE				:				Tuple				      = self.num_choices
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = FunnelForMultipleChoice(config=_lowerCamelCase   )
           model.to(_lowerCamelCase   )
           model.eval()
           SCREAMING_SNAKE_CASE				:				Tuple				      = input_ids.unsqueeze(1   ).expand(-1				,       self.num_choices				,       -1   ).contiguous()
           SCREAMING_SNAKE_CASE				:				Dict				      = token_type_ids.unsqueeze(1   ).expand(-1				,       self.num_choices				,       -1   ).contiguous()
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = input_mask.unsqueeze(1   ).expand(-1				,       self.num_choices				,       -1   ).contiguous()
           SCREAMING_SNAKE_CASE				:				str				      = model(
               _lowerCamelCase				,       attention_mask=_lowerCamelCase				,       token_type_ids=_lowerCamelCase				,       labels=_lowerCamelCase				,       )
           self.parent.assertEqual(result.logits.shape				,       (self.batch_size, self.num_choices)   )






       def 	__lowerCAmelCase     (		self				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       )					->Tuple:
           SCREAMING_SNAKE_CASE				:				str				      = self.num_labels
           SCREAMING_SNAKE_CASE				:				int				      = FunnelForTokenClassification(config=_lowerCamelCase   )
           model.to(_lowerCamelCase   )
           model.eval()
           SCREAMING_SNAKE_CASE				:				Dict				      = model(_lowerCamelCase				,       attention_mask=_lowerCamelCase				,       token_type_ids=_lowerCamelCase				,       labels=_lowerCamelCase   )
           self.parent.assertEqual(result.logits.shape				,       (self.batch_size, self.seq_length, self.num_labels)   )






       def 	__lowerCAmelCase     (		self				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase				,       )					->Tuple:
           SCREAMING_SNAKE_CASE				:				List[str]				      = FunnelForQuestionAnswering(config=_lowerCamelCase   )
           model.to(_lowerCamelCase   )
           model.eval()
           SCREAMING_SNAKE_CASE				:				int				      = model(
               _lowerCamelCase				,       attention_mask=_lowerCamelCase				,       token_type_ids=_lowerCamelCase				,       start_positions=_lowerCamelCase				,       end_positions=_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 	__lowerCAmelCase     (		self   )					->str:
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = 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
           )      ,							(
               SCREAMING_SNAKE_CASE
           )      ,							
           )				:				Optional[int]				      = config_and_inputs
           SCREAMING_SNAKE_CASE				:				int				      = {'''input_ids''': input_ids, '''token_type_ids''': token_type_ids, '''attention_mask''': input_mask}
           return config, inputs_dict






@require_torch
class     a_       (			a__				,    a__				,    unittest.TestCase							):



       """simple docstring"""
       __SCREAMING_SNAKE_CASE       :					str						=  False
       __SCREAMING_SNAKE_CASE       :					List[str]						=  False
       __SCREAMING_SNAKE_CASE       :					Tuple						=  (
           (
               FunnelModel,
               FunnelForMaskedLM,
               FunnelForPreTraining,
               FunnelForQuestionAnswering,
               FunnelForTokenClassification,
           )
           if is_torch_available()
           else ()
       )
       __SCREAMING_SNAKE_CASE       :					Tuple						=  (
           {
               'feature-extraction': (FunnelBaseModel, FunnelModel),
               'fill-mask': FunnelForMaskedLM,
               'question-answering': FunnelForQuestionAnswering,
               'text-classification': FunnelForSequenceClassification,
               'token-classification': FunnelForTokenClassification,
               'zero-shot': FunnelForSequenceClassification,
           }
           if is_torch_available()
           else {}
       )






       def 	__lowerCAmelCase     (		self				,       _lowerCamelCase				,       _lowerCamelCase				,       _lowerCamelCase=False   )					->str:
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = super()._prepare_for_class(_lowerCamelCase				,       _lowerCamelCase				,       return_labels=_lowerCamelCase   )

           if return_labels:
               if model_class in get_values(_lowerCamelCase   ):
                   SCREAMING_SNAKE_CASE				:				List[Any]				      = torch.zeros(
                       (self.model_tester.batch_size, self.model_tester.seq_length)				,       dtype=torch.long				,       device=_lowerCamelCase   )
           return inputs_dict






       def 	__lowerCAmelCase     (		self   )					->int:
           SCREAMING_SNAKE_CASE				:				List[Any]				      = FunnelModelTester(self   )
           SCREAMING_SNAKE_CASE				:				Any				      = ConfigTester(self				,       config_class=_lowerCamelCase   )






       def 	__lowerCAmelCase     (		self   )					->int:
           self.config_tester.run_common_tests()






       def 	__lowerCAmelCase     (		self   )					->Optional[Any]:
           SCREAMING_SNAKE_CASE				:				List[Any]				      = self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_model(*_lowerCamelCase   )






       def 	__lowerCAmelCase     (		self   )					->int:
           SCREAMING_SNAKE_CASE				:				Any				      = self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_for_pretraining(*_lowerCamelCase   )






       def 	__lowerCAmelCase     (		self   )					->Dict:
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_for_masked_lm(*_lowerCamelCase   )






       def 	__lowerCAmelCase     (		self   )					->Tuple:
           SCREAMING_SNAKE_CASE				:				Any				      = self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_for_token_classification(*_lowerCamelCase   )






       def 	__lowerCAmelCase     (		self   )					->Tuple:
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_for_question_answering(*_lowerCamelCase   )






       def 	__lowerCAmelCase     (		self				,       _lowerCamelCase   )					->List[Any]:
           if hasattr(_lowerCamelCase				,       '''weight'''   ) and module.weight is not None:
               module.weight.data.fill_(3   )
           if hasattr(_lowerCamelCase				,       '''bias'''   ) and module.bias is not None:
               module.bias.data.fill_(3   )

           for param in ["r_w_bias", "r_r_bias", "r_kernel", "r_s_bias", "seg_embed"]:
               if hasattr(_lowerCamelCase				,       _lowerCamelCase   ) and getattr(_lowerCamelCase				,       _lowerCamelCase   ) is not None:
                   SCREAMING_SNAKE_CASE				:				int				      = getattr(_lowerCamelCase				,       _lowerCamelCase   )
                   weight.data.fill_(3   )






@require_torch
class     a_       (			a__				,    unittest.TestCase							):



       """simple docstring"""
       __SCREAMING_SNAKE_CASE       :					List[str]						=  False
       __SCREAMING_SNAKE_CASE       :					Any						=  False
       __SCREAMING_SNAKE_CASE       :					Dict						=  (
           (FunnelBaseModel, FunnelForMultipleChoice, FunnelForSequenceClassification) if is_torch_available() else ()
       )






       def 	__lowerCAmelCase     (		self   )					->Dict:
           SCREAMING_SNAKE_CASE				:				str				      = FunnelModelTester(self				,       base=_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				Dict				      = ConfigTester(self				,       config_class=_lowerCamelCase   )






       def 	__lowerCAmelCase     (		self   )					->Union[str, Any]:
           self.config_tester.run_common_tests()






       def 	__lowerCAmelCase     (		self   )					->Any:
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_base_model(*_lowerCamelCase   )






       def 	__lowerCAmelCase     (		self   )					->Tuple:
           SCREAMING_SNAKE_CASE				:				Tuple				      = self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_for_sequence_classification(*_lowerCamelCase   )






       def 	__lowerCAmelCase     (		self   )					->Dict:
           SCREAMING_SNAKE_CASE				:				Any				      = self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_for_multiple_choice(*_lowerCamelCase   )






       def 	__lowerCAmelCase     (		self   )					->List[str]:
           SCREAMING_SNAKE_CASE      ,							SCREAMING_SNAKE_CASE				:				Tuple				      = self.model_tester.prepare_config_and_inputs_for_common()
           SCREAMING_SNAKE_CASE				:				int				      = True

           for model_class in self.all_model_classes:
               if model_class.__name__ == "FunnelBaseModel":
                   continue
               SCREAMING_SNAKE_CASE				:				List[str]				      = model_class(_lowerCamelCase   )
               model.to(_lowerCamelCase   )
               model.train()
               SCREAMING_SNAKE_CASE				:				List[str]				      = self._prepare_for_class(_lowerCamelCase				,       _lowerCamelCase				,       return_labels=_lowerCamelCase   )
               SCREAMING_SNAKE_CASE				:				int				      = model(**_lowerCamelCase   ).loss
               loss.backward()






       def 	__lowerCAmelCase     (		self				,       _lowerCamelCase   )					->Union[str, Any]:
           if hasattr(_lowerCamelCase				,       '''weight'''   ) and module.weight is not None:
               module.weight.data.fill_(3   )
           if hasattr(_lowerCamelCase				,       '''bias'''   ) and module.bias is not None:
               module.bias.data.fill_(3   )

           for param in ["r_w_bias", "r_r_bias", "r_kernel", "r_s_bias", "seg_embed"]:
               if hasattr(_lowerCamelCase				,       _lowerCamelCase   ) and getattr(_lowerCamelCase				,       _lowerCamelCase   ) is not None:
                   SCREAMING_SNAKE_CASE				:				List[str]				      = getattr(_lowerCamelCase				,       _lowerCamelCase   )
                   weight.data.fill_(3   )






@require_torch
@require_sentencepiece
@require_tokenizers
class     a_       (			unittest.TestCase							):



       """simple docstring"""






       def 	__lowerCAmelCase     (		self   )					->Tuple:
           SCREAMING_SNAKE_CASE				:				List[Any]				      = 13
           SCREAMING_SNAKE_CASE				:				List[str]				      = 7
           SCREAMING_SNAKE_CASE				:				Any				      = torch.arange(0				,       batch_size * sequence_length   ).long().reshape(_lowerCamelCase				,       _lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				List[Any]				      = [0, 1, 2, 3, 4, 5, 6, 4, 1, 3, 5, 0, 1]
           SCREAMING_SNAKE_CASE				:				Tuple				      = torch.tensor([[2] + [0] * a + [1] * (sequence_length - a - 1) for a in lengths]   )

           SCREAMING_SNAKE_CASE				:				Tuple				      = FunnelModel.from_pretrained('''sgugger/funnel-random-tiny'''   )
           SCREAMING_SNAKE_CASE				:				Any				      = model(_lowerCamelCase				,       token_type_ids=_lowerCamelCase   )[0].abs()

           SCREAMING_SNAKE_CASE				:				str				      = torch.tensor(2_3_4_4.8_3_5_2   )
           SCREAMING_SNAKE_CASE				:				Any				      = torch.tensor(0.8_0_5_2   )
           self.assertTrue(torch.allclose(output.sum()				,       _lowerCamelCase				,       atol=1e-4   )   )
           self.assertTrue(torch.allclose(output.mean()				,       _lowerCamelCase				,       atol=1e-4   )   )

           SCREAMING_SNAKE_CASE				:				List[Any]				      = torch.tensor([[1] * 7, [1] * 4 + [0] * 3] * 6 + [[0, 1, 1, 0, 0, 1, 1]]   )
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = model(_lowerCamelCase				,       attention_mask=_lowerCamelCase				,       token_type_ids=_lowerCamelCase   )[0].abs()

           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = torch.tensor(2_3_4_3.8_4_2_5   )
           SCREAMING_SNAKE_CASE				:				Dict				      = torch.tensor(0.8_0_4_9   )
           self.assertTrue(torch.allclose(output.sum()				,       _lowerCamelCase				,       atol=1e-4   )   )
           self.assertTrue(torch.allclose(output.mean()				,       _lowerCamelCase				,       atol=1e-4   )   )






       @slow
       def 	__lowerCAmelCase     (		self   )					->Optional[Any]:
           SCREAMING_SNAKE_CASE				:				str				      = FunnelTokenizer.from_pretrained('''huggingface/funnel-small'''   )
           SCREAMING_SNAKE_CASE				:				Any				      = FunnelModel.from_pretrained('''huggingface/funnel-small'''   )
           SCREAMING_SNAKE_CASE				:				Tuple				      = tokenizer('''Hello! I am the Funnel Transformer model.'''				,       return_tensors='''pt'''   )
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = model(**_lowerCamelCase   )[0]

           SCREAMING_SNAKE_CASE				:				Dict				      = torch.tensor(2_3_5.7_2_4_6   )
           SCREAMING_SNAKE_CASE				:				Dict				      = torch.tensor(0.0_2_5_6   )
           self.assertTrue(torch.allclose(output.sum()				,       _lowerCamelCase				,       atol=1e-4   )   )
           self.assertTrue(torch.allclose(output.mean()				,       _lowerCamelCase				,       atol=1e-4   )   )
