



"""simple docstring"""





import unittest

from transformers import AlbertConfig, is_torch_available
from transformers.models.auto import get_values
from transformers.testing_utils import require_torch, slow, torch_device

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
  import torch

  from transformers import (
      MODEL_FOR_PRETRAINING_MAPPING,
      AlbertForMaskedLM,
      AlbertForMultipleChoice,
      AlbertForPreTraining,
      AlbertForQuestionAnswering,
      AlbertForSequenceClassification,
      AlbertForTokenClassification,
      AlbertModel,
  )
  from transformers.models.albert.modeling_albert import ALBERT_PRETRAINED_MODEL_ARCHIVE_LIST
class  lowercase__  :







       '''simple docstring'''


       def __init__(				self     :    Tuple						,							_UpperCAmelCase     :    Optional[int]						,							_UpperCAmelCase     :    List[str]=13						,							_UpperCAmelCase     :    Any=7						,							_UpperCAmelCase     :    Tuple=True						,							_UpperCAmelCase     :    List[str]=True						,							_UpperCAmelCase     :    int=True						,							_UpperCAmelCase     :    List[str]=True						,							_UpperCAmelCase     :    List[Any]=99						,							_UpperCAmelCase     :    List[str]=16						,							_UpperCAmelCase     :    Optional[Any]=36						,							_UpperCAmelCase     :    Optional[Any]=6						,							_UpperCAmelCase     :    Optional[int]=6						,							_UpperCAmelCase     :    int=6						,							_UpperCAmelCase     :    List[str]=37						,							_UpperCAmelCase     :    Optional[Any]="gelu"						,							_UpperCAmelCase     :    List[Any]=0.1						,							_UpperCAmelCase     :    Union[str, Any]=0.1						,							_UpperCAmelCase     :    Optional[int]=512						,							_UpperCAmelCase     :    Optional[Any]=16						,							_UpperCAmelCase     :    List[Any]=2						,							_UpperCAmelCase     :    List[str]=0.02						,							_UpperCAmelCase     :    Optional[int]=3						,							_UpperCAmelCase     :    Dict=4						,							_UpperCAmelCase     :    List[Any]=None						,							)					->		List[str]:


             '''simple docstring'''




             UpperCAmelCase_     					=				parent
             UpperCAmelCase_     					=				batch_size
             UpperCAmelCase_     					=				seq_length
             UpperCAmelCase_     					=				is_training
             UpperCAmelCase_     					=				use_input_mask
             UpperCAmelCase_     					=				use_token_type_ids
             UpperCAmelCase_     					=				use_labels
             UpperCAmelCase_     					=				vocab_size
             UpperCAmelCase_     					=				embedding_size
             UpperCAmelCase_     					=				hidden_size
             UpperCAmelCase_     					=				num_hidden_layers
             UpperCAmelCase_     					=				num_hidden_groups
             UpperCAmelCase_     					=				num_attention_heads
             UpperCAmelCase_     					=				intermediate_size
             UpperCAmelCase_     					=				hidden_act
             UpperCAmelCase_     					=				hidden_dropout_prob
             UpperCAmelCase_     					=				attention_probs_dropout_prob
             UpperCAmelCase_     					=				max_position_embeddings
             UpperCAmelCase_     					=				type_vocab_size
             UpperCAmelCase_     					=				type_sequence_label_size
             UpperCAmelCase_     					=				initializer_range
             UpperCAmelCase_     					=				num_labels
             UpperCAmelCase_     					=				num_choices
             UpperCAmelCase_     					=				scope



       def 	lowercase__							(				self     :    List[Any]       )					->		List[str]:


             '''simple docstring'''




             UpperCAmelCase_     					=				ids_tensor([self.batch_size, self.seq_length]						,							self.vocab_size       )

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

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

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

             UpperCAmelCase_     					=				self.get_config()

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



       def 	lowercase__							(				self     :    Optional[int]       )					->		List[str]:


             '''simple docstring'''




             return AlbertConfig(
                 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						,							num_hidden_groups=self.num_hidden_groups						,							)



       def 	lowercase__							(				self     :    Dict						,							_UpperCAmelCase     :    Tuple						,							_UpperCAmelCase     :    str						,							_UpperCAmelCase     :    Union[str, Any]						,							_UpperCAmelCase     :    Optional[int]						,							_UpperCAmelCase     :    int						,							_UpperCAmelCase     :    int						,							_UpperCAmelCase     :    Optional[int]       )					->		str:


             '''simple docstring'''




             UpperCAmelCase_     					=				AlbertModel(config=__lowerCamelCase       )
             model.to(__lowerCamelCase       )
             model.eval()
             UpperCAmelCase_     					=				model(__lowerCamelCase						,							attention_mask=__lowerCamelCase						,							token_type_ids=__lowerCamelCase       )
             UpperCAmelCase_     					=				model(__lowerCamelCase						,							token_type_ids=__lowerCamelCase       )
             UpperCAmelCase_     					=				model(__lowerCamelCase       )
             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 	lowercase__							(				self     :    Union[str, Any]						,							_UpperCAmelCase     :    Dict						,							_UpperCAmelCase     :    Any						,							_UpperCAmelCase     :    Optional[Any]						,							_UpperCAmelCase     :    Union[str, Any]						,							_UpperCAmelCase     :    Tuple						,							_UpperCAmelCase     :    Tuple						,							_UpperCAmelCase     :    Dict       )					->		Tuple:


             '''simple docstring'''




             UpperCAmelCase_     					=				AlbertForPreTraining(config=__lowerCamelCase       )
             model.to(__lowerCamelCase       )
             model.eval()
             UpperCAmelCase_     					=				model(
                 __lowerCamelCase						,							attention_mask=__lowerCamelCase						,							token_type_ids=__lowerCamelCase						,							labels=__lowerCamelCase						,							sentence_order_label=__lowerCamelCase						,							)
             self.parent.assertEqual(result.prediction_logits.shape						,							(self.batch_size, self.seq_length, self.vocab_size)       )
             self.parent.assertEqual(result.sop_logits.shape						,							(self.batch_size, config.num_labels)       )



       def 	lowercase__							(				self     :    List[str]						,							_UpperCAmelCase     :    Tuple						,							_UpperCAmelCase     :    Union[str, Any]						,							_UpperCAmelCase     :    Tuple						,							_UpperCAmelCase     :    Optional[int]						,							_UpperCAmelCase     :    List[Any]						,							_UpperCAmelCase     :    Tuple						,							_UpperCAmelCase     :    Tuple       )					->		str:


             '''simple docstring'''




             UpperCAmelCase_     					=				AlbertForMaskedLM(config=__lowerCamelCase       )
             model.to(__lowerCamelCase       )
             model.eval()
             UpperCAmelCase_     					=				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 	lowercase__							(				self     :    List[Any]						,							_UpperCAmelCase     :    Optional[int]						,							_UpperCAmelCase     :    str						,							_UpperCAmelCase     :    Union[str, Any]						,							_UpperCAmelCase     :    List[Any]						,							_UpperCAmelCase     :    Any						,							_UpperCAmelCase     :    List[Any]						,							_UpperCAmelCase     :    Tuple       )					->		Optional[int]:


             '''simple docstring'''




             UpperCAmelCase_     					=				AlbertForQuestionAnswering(config=__lowerCamelCase       )
             model.to(__lowerCamelCase       )
             model.eval()
             UpperCAmelCase_     					=				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 	lowercase__							(				self     :    List[Any]						,							_UpperCAmelCase     :    Optional[Any]						,							_UpperCAmelCase     :    Tuple						,							_UpperCAmelCase     :    Any						,							_UpperCAmelCase     :    str						,							_UpperCAmelCase     :    List[Any]						,							_UpperCAmelCase     :    Any						,							_UpperCAmelCase     :    List[str]       )					->		List[str]:


             '''simple docstring'''




             UpperCAmelCase_     					=				self.num_labels
             UpperCAmelCase_     					=				AlbertForSequenceClassification(__lowerCamelCase       )
             model.to(__lowerCamelCase       )
             model.eval()
             UpperCAmelCase_     					=				model(__lowerCamelCase						,							attention_mask=__lowerCamelCase						,							token_type_ids=__lowerCamelCase						,							labels=__lowerCamelCase       )
             self.parent.assertEqual(result.logits.shape						,							(self.batch_size, self.num_labels)       )



       def 	lowercase__							(				self     :    Any						,							_UpperCAmelCase     :    Union[str, Any]						,							_UpperCAmelCase     :    Any						,							_UpperCAmelCase     :    Optional[int]						,							_UpperCAmelCase     :    Union[str, Any]						,							_UpperCAmelCase     :    str						,							_UpperCAmelCase     :    Optional[Any]						,							_UpperCAmelCase     :    Dict       )					->		Optional[int]:


             '''simple docstring'''




             UpperCAmelCase_     					=				self.num_labels
             UpperCAmelCase_     					=				AlbertForTokenClassification(config=__lowerCamelCase       )
             model.to(__lowerCamelCase       )
             model.eval()
             UpperCAmelCase_     					=				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 	lowercase__							(				self     :    Any						,							_UpperCAmelCase     :    Tuple						,							_UpperCAmelCase     :    Tuple						,							_UpperCAmelCase     :    str						,							_UpperCAmelCase     :    str						,							_UpperCAmelCase     :    Tuple						,							_UpperCAmelCase     :    Tuple						,							_UpperCAmelCase     :    str       )					->		List[Any]:


             '''simple docstring'''




             UpperCAmelCase_     					=				self.num_choices
             UpperCAmelCase_     					=				AlbertForMultipleChoice(config=__lowerCamelCase       )
             model.to(__lowerCamelCase       )
             model.eval()
             UpperCAmelCase_     					=				input_ids.unsqueeze(1       ).expand(-1						,							self.num_choices						,							-1       ).contiguous()
             UpperCAmelCase_     					=				token_type_ids.unsqueeze(1       ).expand(-1						,							self.num_choices						,							-1       ).contiguous()
             UpperCAmelCase_     					=				input_mask.unsqueeze(1       ).expand(-1						,							self.num_choices						,							-1       ).contiguous()
             UpperCAmelCase_     					=				model(
                 __lowerCamelCase						,							attention_mask=__lowerCamelCase						,							token_type_ids=__lowerCamelCase						,							labels=__lowerCamelCase						,							)
             self.parent.assertEqual(result.logits.shape						,							(self.batch_size, self.num_choices)       )







       def 	lowercase__							(				self     :    Optional[Any]       )					->		int:


             '''simple docstring'''




             UpperCAmelCase_     					=				self.prepare_config_and_inputs()
             (
                 (
                 UpperCAmelCase_	
             )					,       (
                 UpperCAmelCase_	
             )					,       (
                 UpperCAmelCase_	
             )					,       (
                 UpperCAmelCase_	
             )					,       (
                 UpperCAmelCase_	
             )					,       (
                 UpperCAmelCase_	
             )					,       (
                 UpperCAmelCase_	
             )					,       	
             )     					=				config_and_inputs
             UpperCAmelCase_     					=				{"input_ids": input_ids, "token_type_ids": token_type_ids, "attention_mask": input_mask}
             return config, inputs_dict



@require_torch
class  lowercase__  (       __snake_case							,   __snake_case							,   unittest.TestCase ):







       '''simple docstring'''


       UpperCamelCase		=	(
           (
               AlbertModel,
               AlbertForPreTraining,
               AlbertForMaskedLM,
               AlbertForMultipleChoice,
               AlbertForSequenceClassification,
               AlbertForTokenClassification,
               AlbertForQuestionAnswering,
           )
           if is_torch_available()
           else ()
       )
       UpperCamelCase		=	(
           {
               '''feature-extraction''': AlbertModel,
               '''fill-mask''': AlbertForMaskedLM,
               '''question-answering''': AlbertForQuestionAnswering,
               '''text-classification''': AlbertForSequenceClassification,
               '''token-classification''': AlbertForTokenClassification,
               '''zero-shot''': AlbertForSequenceClassification,
           }
           if is_torch_available()
           else {}
       )
       UpperCamelCase		=	True



       def 	lowercase__							(				self     :    Tuple						,							_UpperCAmelCase     :    str						,							_UpperCAmelCase     :    Tuple						,							_UpperCAmelCase     :    Optional[Any]=False       )					->		List[Any]:


             '''simple docstring'''




             UpperCAmelCase_     					=				super()._prepare_for_class(__lowerCamelCase						,							__lowerCamelCase						,							return_labels=__lowerCamelCase       )

             if return_labels:
                   if model_class in get_values(__lowerCamelCase       ):
                         UpperCAmelCase_     					=				torch.zeros(
                             (self.model_tester.batch_size, self.model_tester.seq_length)						,							dtype=torch.long						,							device=__lowerCamelCase       )
                         UpperCAmelCase_     					=				torch.zeros(
                             self.model_tester.batch_size						,							dtype=torch.long						,							device=__lowerCamelCase       )
             return inputs_dict



       def 	lowercase__							(				self     :    Tuple       )					->		Tuple:


             '''simple docstring'''




             UpperCAmelCase_     					=				AlbertModelTester(self       )
             UpperCAmelCase_     					=				ConfigTester(self						,							config_class=__lowerCamelCase						,							hidden_size=37       )



       def 	lowercase__							(				self     :    Dict       )					->		Optional[Any]:


             '''simple docstring'''




             self.config_tester.run_common_tests()



       def 	lowercase__							(				self     :    Tuple       )					->		str:


             '''simple docstring'''




             UpperCAmelCase_     					=				self.model_tester.prepare_config_and_inputs()
             self.model_tester.create_and_check_model(*__lowerCamelCase       )



       def 	lowercase__							(				self     :    Dict       )					->		str:


             '''simple docstring'''




             UpperCAmelCase_     					=				self.model_tester.prepare_config_and_inputs()
             self.model_tester.create_and_check_for_pretraining(*__lowerCamelCase       )



       def 	lowercase__							(				self     :    Any       )					->		Optional[Any]:


             '''simple docstring'''




             UpperCAmelCase_     					=				self.model_tester.prepare_config_and_inputs()
             self.model_tester.create_and_check_for_masked_lm(*__lowerCamelCase       )



       def 	lowercase__							(				self     :    Any       )					->		Tuple:


             '''simple docstring'''




             UpperCAmelCase_     					=				self.model_tester.prepare_config_and_inputs()
             self.model_tester.create_and_check_for_multiple_choice(*__lowerCamelCase       )



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


             '''simple docstring'''




             UpperCAmelCase_     					=				self.model_tester.prepare_config_and_inputs()
             self.model_tester.create_and_check_for_question_answering(*__lowerCamelCase       )



       def 	lowercase__							(				self     :    Optional[int]       )					->		Optional[Any]:


             '''simple docstring'''




             UpperCAmelCase_     					=				self.model_tester.prepare_config_and_inputs()
             self.model_tester.create_and_check_for_sequence_classification(*__lowerCamelCase       )



       def 	lowercase__							(				self     :    List[Any]       )					->		Tuple:


             '''simple docstring'''




             UpperCAmelCase_     					=				self.model_tester.prepare_config_and_inputs()
             for type in ["absolute", "relative_key", "relative_key_query"]:
                   UpperCAmelCase_     					=				type
                   self.model_tester.create_and_check_model(*__lowerCamelCase       )







       @slow
       def 	lowercase__							(				self     :    Union[str, Any]       )					->		Any:


             '''simple docstring'''




             for model_name in ALBERT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
                   UpperCAmelCase_     					=				AlbertModel.from_pretrained(__lowerCamelCase       )
                   self.assertIsNotNone(__lowerCamelCase       )



@require_torch
class  lowercase__  (       unittest.TestCase ):







       '''simple docstring'''


       @slow
       def 	lowercase__							(				self     :    Union[str, Any]       )					->		Tuple:


             '''simple docstring'''




             UpperCAmelCase_     					=				AlbertModel.from_pretrained("albert-base-v2"       )
             UpperCAmelCase_     					=				torch.tensor([[0, 345, 232, 328, 740, 140, 1695, 69, 6078, 1588, 2]]       )
             UpperCAmelCase_     					=				torch.tensor([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]       )
             with torch.no_grad():
                   UpperCAmelCase_     					=				model(__lowerCamelCase						,							attention_mask=__lowerCamelCase       )[0]
             UpperCAmelCase_     					=				torch.Size((1, 11, 768)       )
             self.assertEqual(output.shape						,							__lowerCamelCase       )
             UpperCAmelCase_     					=				torch.tensor(
                 [[[-0.6513, 1.5035, -0.2766], [-0.6515, 1.5046, -0.2780], [-0.6512, 1.5049, -0.2784]]]       )

             self.assertTrue(torch.allclose(output[:, 1:4, 1:4]						,							__lowerCamelCase						,							atol=1e-4       )       )








class 	__lowercase					:





      def __init__(		self    :       Optional[int]							)     -> int:






         """simple docstring"""







         UpperCAmelCase      					=  {}





      def 							_lowercase					(		self    :       str							)     -> None:






         """simple docstring"""







         print(self.vertex							)
         for i in self.vertex:
            print(__lowerCamelCase       ,							""" -> """       ,							""" -> """.join([str(__lowerCamelCase							) for j in self.vertex[i]]							)							)





      def 							_lowercase					(		self    :       Optional[Any]       ,							__lowerCamelCase    :       int       ,							__lowerCamelCase    :       int							)     -> None:






         """simple docstring"""







         if from_vertex in self.vertex:
            self.vertex[from_vertex].append(__lowerCamelCase							)
         else:
            # else make a new vertex
            UpperCAmelCase      					=  [to_vertex]





      def 							_lowercase					(		self    :       str							)     -> None:






         """simple docstring"""







         UpperCAmelCase      					=  [False] * len(self.vertex							)

         # call the recursive helper function
         for i in range(len(self.vertex							)							):
            if not visited[i]:
               self.dfs_recursive(__lowerCamelCase       ,							__lowerCamelCase							)





      def 							_lowercase					(		self    :       Optional[int]       ,							__lowerCamelCase    :       int       ,							__lowerCamelCase    :       list							)     -> None:






         """simple docstring"""







         UpperCAmelCase      					=  True

         print(__lowerCamelCase       ,							end=""" """							)

         # Recur for all the vertices that are adjacent to this node
         for i in self.vertex:
            if not visited[i]:
               self.dfs_recursive(__lowerCamelCase       ,							__lowerCamelCase							)


if __name__ == "__main__":
 __a	 =      Graph()
 g.add_edge(0, 1)
 g.add_edge(0, 2)
 g.add_edge(1, 2)
 g.add_edge(2, 0)
 g.add_edge(2, 3)
 g.add_edge(3, 3)

 g.print_graph()
 print("""DFS:""")
 g.dfs()

 # OUTPUT:
 # 0  ->  1 -> 2
 # 1  ->  2
 # 2  ->  0 -> 3
 # 3  ->  3
 # DFS:
 #  0 1 2 3



