

# Copyright 2022 The HuggingFace Team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from pathlib import Path

from .config_args import default_config_file, load_config_from_file
from .config_utils import SubcommandHelpFormatter


A__							=				'''Update an existing config file with the latest defaults while maintaining the old configuration.'''




def        _lowercase  (					a_					:       List[Any]					)					->						str:




					'''simple docstring'''







					__magic_name__				=     args.config_file
					if config_file is None and Path(a__					).exists():
										__magic_name__				=     default_config_file
					elif not Path(a__					).exists():
										raise ValueError(F'The passed config file located at {config_file} doesn\'t exist.'					)
					__magic_name__				=     load_config_from_file(a__					)

					if config_file.endswith('.json'					):
										config.to_json_file(a__					)
					else:
										config.to_yaml_file(a__					)
					return config_file




def        _lowercase  (					a_					:       List[str]       ,a_					:       Any					)					->						Optional[int]:




					'''simple docstring'''







					__magic_name__				=     parser.add_parser('update'       ,parents=a__       ,help=a__       ,formatter_class=a__					)
					parser.add_argument(
					    '--config_file'       ,default=a__       ,help=(
					        'The path to the config file to update. Will default to a file named default_config.yaml in the cache '
					        'location, which is the content of the environment `HF_HOME` suffixed with \'accelerate\', or if you don\'t have '
					        'such an environment variable, your cache directory (\'~/.cache\' or the content of `XDG_CACHE_HOME`) suffixed '
					        'with \'huggingface\'.'
					    )       ,)

					parser.set_defaults(func=a__					)
					return parser




def        _lowercase  (					a_					:       Tuple					)					->						Dict:




					'''simple docstring'''







					__magic_name__				=     update_config(a__					)
					print(F'Sucessfully updated the configuration file at {config_file}.'					)






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   )   )
