'''simple docstring'''




import unittest

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

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, floats_tensor, ids_tensor, random_attention_mask


if is_torch_available():
						import torch

						from transformers import (
						    MraForMaskedLM,
						    MraForMultipleChoice,
						    MraForQuestionAnswering,
						    MraForSequenceClassification,
						    MraForTokenClassification,
						    MraModel,
						)
						from transformers.models.mra.modeling_mra import MRA_PRETRAINED_MODEL_ARCHIVE_LIST






class 				a__:


			'''simple docstring'''






			def __init__(   self       ,    __lowerCAmelCase       ,    __lowerCAmelCase=2       ,    __lowerCAmelCase=8       ,    __lowerCAmelCase=True       ,    __lowerCAmelCase=True       ,    __lowerCAmelCase=True       ,    __lowerCAmelCase=True       ,    __lowerCAmelCase=99       ,    __lowerCAmelCase=16       ,    __lowerCAmelCase=5       ,    __lowerCAmelCase=2       ,    __lowerCAmelCase=36       ,    __lowerCAmelCase="gelu"       ,    __lowerCAmelCase=0.0       ,    __lowerCAmelCase=0.0       ,    __lowerCAmelCase=512       ,    __lowerCAmelCase=16       ,    __lowerCAmelCase=2       ,    __lowerCAmelCase=0.02       ,    __lowerCAmelCase=3       ,    __lowerCAmelCase=4       ,    __lowerCAmelCase=None       ,    ):




					"""simple docstring"""


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



			def 							a_       (   self):




					"""simple docstring"""


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

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

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

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

					lowerCAmelCase   					=  self.get_config()

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



			def 							a_       (   self):




					"""simple docstring"""


					return MraConfig(
					    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       ,    is_decoder=__lowerCAmelCase       ,    initializer_range=self.initializer_range       ,    )



			def 							a_       (   self):




					"""simple docstring"""


					lowerCAmelCase   					=  self.get_config()
					lowerCAmelCase   					=  300
					return config



			def 							a_       (   self):




					"""simple docstring"""


					(
					    (
					    lowerCAmelCase
					)					,     (
					    lowerCAmelCase
					)					,     (
					    lowerCAmelCase
					)					,     (
					    lowerCAmelCase
					)					,     (
					    lowerCAmelCase
					)					,     (
					    lowerCAmelCase
					)					,     (
					    lowerCAmelCase
					)					,     
					)   					=  self.prepare_config_and_inputs()

					lowerCAmelCase   					=  True
					lowerCAmelCase   					=  floats_tensor([self.batch_size, self.seq_length, self.hidden_size])
					lowerCAmelCase   					=  ids_tensor([self.batch_size, self.seq_length]       ,    vocab_size=2)

					return (
					    config,
					    input_ids,
					    token_type_ids,
					    input_mask,
					    sequence_labels,
					    token_labels,
					    choice_labels,
					    encoder_hidden_states,
					    encoder_attention_mask,
					)



			def 							a_       (   self       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase):




					"""simple docstring"""


					lowerCAmelCase   					=  MraModel(config=__lowerCAmelCase)
					model.to(__lowerCAmelCase)
					model.eval()
					lowerCAmelCase   					=  model(__lowerCAmelCase       ,    attention_mask=__lowerCAmelCase       ,    token_type_ids=__lowerCAmelCase)
					lowerCAmelCase   					=  model(__lowerCAmelCase       ,    token_type_ids=__lowerCAmelCase)
					lowerCAmelCase   					=  model(__lowerCAmelCase)
					self.parent.assertEqual(result.last_hidden_state.shape       ,    (self.batch_size, self.seq_length, self.hidden_size))



			def 							a_       (   self       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    ):




					"""simple docstring"""


					lowerCAmelCase   					=  True
					lowerCAmelCase   					=  MraModel(__lowerCAmelCase)
					model.to(__lowerCAmelCase)
					model.eval()
					lowerCAmelCase   					=  model(
					    __lowerCAmelCase       ,    attention_mask=__lowerCAmelCase       ,    token_type_ids=__lowerCAmelCase       ,    encoder_hidden_states=__lowerCAmelCase       ,    encoder_attention_mask=__lowerCAmelCase       ,    )
					lowerCAmelCase   					=  model(
					    __lowerCAmelCase       ,    attention_mask=__lowerCAmelCase       ,    token_type_ids=__lowerCAmelCase       ,    encoder_hidden_states=__lowerCAmelCase       ,    )
					lowerCAmelCase   					=  model(__lowerCAmelCase       ,    attention_mask=__lowerCAmelCase       ,    token_type_ids=__lowerCAmelCase)
					self.parent.assertEqual(result.last_hidden_state.shape       ,    (self.batch_size, self.seq_length, self.hidden_size))



			def 							a_       (   self       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase):




					"""simple docstring"""


					lowerCAmelCase   					=  MraForMaskedLM(config=__lowerCAmelCase)
					model.to(__lowerCAmelCase)
					model.eval()
					lowerCAmelCase   					=  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 							a_       (   self       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase):




					"""simple docstring"""


					lowerCAmelCase   					=  MraForQuestionAnswering(config=__lowerCAmelCase)
					model.to(__lowerCAmelCase)
					model.eval()
					lowerCAmelCase   					=  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 							a_       (   self       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase):




					"""simple docstring"""


					lowerCAmelCase   					=  self.num_labels
					lowerCAmelCase   					=  MraForSequenceClassification(__lowerCAmelCase)
					model.to(__lowerCAmelCase)
					model.eval()
					lowerCAmelCase   					=  model(__lowerCAmelCase       ,    attention_mask=__lowerCAmelCase       ,    token_type_ids=__lowerCAmelCase       ,    labels=__lowerCAmelCase)
					self.parent.assertEqual(result.logits.shape       ,    (self.batch_size, self.num_labels))



			def 							a_       (   self       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase):




					"""simple docstring"""


					lowerCAmelCase   					=  self.num_labels
					lowerCAmelCase   					=  MraForTokenClassification(config=__lowerCAmelCase)
					model.to(__lowerCAmelCase)
					model.eval()
					lowerCAmelCase   					=  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 							a_       (   self       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase       ,    __lowerCAmelCase):




					"""simple docstring"""


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







			def 							a_       (   self):




					"""simple docstring"""


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







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


			'''simple docstring'''






			UpperCAmelCase_			:     Any      =       (
			    (
			        MraModel,
			        MraForMaskedLM,
			        MraForMultipleChoice,
			        MraForQuestionAnswering,
			        MraForSequenceClassification,
			        MraForTokenClassification,
			    )
			    if is_torch_available()
			    else ()
			)
			UpperCAmelCase_			:     Optional[int]      =       False
			UpperCAmelCase_			:     Optional[int]      =       False
			UpperCAmelCase_			:     Tuple      =       False
			UpperCAmelCase_			:     str      =       False

			UpperCAmelCase_			:     Any      =       ()



			def 							a_       (   self):




					"""simple docstring"""


					lowerCAmelCase   					=  MraModelTester(self)
					lowerCAmelCase   					=  ConfigTester(self       ,    config_class=__lowerCAmelCase       ,    hidden_size=37)



			def 							a_       (   self):




					"""simple docstring"""


					self.config_tester.run_common_tests()



			def 							a_       (   self):




					"""simple docstring"""


					lowerCAmelCase   					=  self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_model(*__lowerCAmelCase)



			def 							a_       (   self):




					"""simple docstring"""


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



			def 							a_       (   self):




					"""simple docstring"""


					lowerCAmelCase   					=  self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_for_masked_lm(*__lowerCAmelCase)



			def 							a_       (   self):




					"""simple docstring"""


					lowerCAmelCase   					=  self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_for_multiple_choice(*__lowerCAmelCase)



			def 							a_       (   self):




					"""simple docstring"""


					lowerCAmelCase   					=  self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_for_question_answering(*__lowerCAmelCase)



			def 							a_       (   self):




					"""simple docstring"""


					lowerCAmelCase   					=  self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_for_sequence_classification(*__lowerCAmelCase)



			def 							a_       (   self):




					"""simple docstring"""


					lowerCAmelCase   					=  self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_for_token_classification(*__lowerCAmelCase)



			@slow
			def 							a_       (   self):




					"""simple docstring"""


					for model_name in MRA_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
							lowerCAmelCase   					=  MraModel.from_pretrained(__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)







			@unittest.skip(reason="""MRA does not output attentions""")
			def 							a_       (   self):




					"""simple docstring"""


					return







@require_torch
class 				a__(					unittest.TestCase	):


			'''simple docstring'''






			@slow
			def 							a_       (   self):




					"""simple docstring"""


					lowerCAmelCase   					=  MraModel.from_pretrained("""uw-madison/mra-base-512-4""")
					lowerCAmelCase   					=  torch.arange(256).unsqueeze(0)

					with torch.no_grad():
							lowerCAmelCase   					=  model(__lowerCAmelCase)[0]

					lowerCAmelCase   					=  torch.Size((1, 256, 768))
					self.assertEqual(output.shape       ,    __lowerCAmelCase)

					lowerCAmelCase   					=  torch.tensor(
					    [[[-0.0140, 0.0830, -0.0381], [0.1546, 0.1402, 0.0220], [0.1162, 0.0851, 0.0165]]])

					self.assertTrue(torch.allclose(output[:, :3, :3]       ,    __lowerCAmelCase       ,    atol=1E-4))



			@slow
			def 							a_       (   self):




					"""simple docstring"""


					lowerCAmelCase   					=  MraForMaskedLM.from_pretrained("""uw-madison/mra-base-512-4""")
					lowerCAmelCase   					=  torch.arange(256).unsqueeze(0)

					with torch.no_grad():
							lowerCAmelCase   					=  model(__lowerCAmelCase)[0]

					lowerCAmelCase   					=  50265

					lowerCAmelCase   					=  torch.Size((1, 256, vocab_size))
					self.assertEqual(output.shape       ,    __lowerCAmelCase)

					lowerCAmelCase   					=  torch.tensor(
					    [[[9.2595, -3.6038, 11.8819], [9.3869, -3.2693, 11.0956], [11.8524, -3.4938, 13.1210]]])

					self.assertTrue(torch.allclose(output[:, :3, :3]       ,    __lowerCAmelCase       ,    atol=1E-4))







			@slow
			def 							a_       (   self):




					"""simple docstring"""


					lowerCAmelCase   					=  MraForMaskedLM.from_pretrained("""uw-madison/mra-base-4096-8-d3""")
					lowerCAmelCase   					=  torch.arange(4096).unsqueeze(0)

					with torch.no_grad():
							lowerCAmelCase   					=  model(__lowerCAmelCase)[0]

					lowerCAmelCase   					=  50265

					lowerCAmelCase   					=  torch.Size((1, 4096, vocab_size))
					self.assertEqual(output.shape       ,    __lowerCAmelCase)

					lowerCAmelCase   					=  torch.tensor(
					    [[[5.4789, -2.3564, 7.5064], [7.9067, -1.3369, 9.9668], [9.0712, -1.8106, 7.0380]]])

					self.assertTrue(torch.allclose(output[:, :3, :3]       ,    __lowerCAmelCase       ,    atol=1E-4))





'''simple docstring'''




def 				snake_case__							(			_A:					int      ,   _A:					int )    ->	int:

		'''simple docstring'''


		while a != 0:
				lowerCAmelCase					,     lowerCAmelCase   					=  b % a, a
		return b






def 				snake_case__							(			_A:					int      ,   _A:					int )    ->	int:

		'''simple docstring'''


		if gcd(_A      ,   _A ) != 1:
				lowerCAmelCase   					=  f"mod inverse of {a!r} and {m!r} does not exist"
				raise ValueError(_A )
		lowerCAmelCase					,     lowerCAmelCase					,     lowerCAmelCase   					=  1, 0, a
		lowerCAmelCase					,     lowerCAmelCase					,     lowerCAmelCase   					=  0, 1, m
		while va != 0:
				lowerCAmelCase   					=  ua // va
				lowerCAmelCase					,     lowerCAmelCase					,     lowerCAmelCase					,     lowerCAmelCase					,     lowerCAmelCase					,     lowerCAmelCase   					=  (ua - q * va), (ua - q * va), (ua - q * va), va, va, va
		return ua % m




