





import unittest

import numpy as np

from transformers import RobertaPreLayerNormConfig, is_flax_available
from transformers.testing_utils import require_flax, slow

from ...test_modeling_flax_common import FlaxModelTesterMixin, floats_tensor, ids_tensor, random_attention_mask


if is_flax_available():
					import jax.numpy as jnp

					from transformers.models.roberta_prelayernorm.modeling_flax_roberta_prelayernorm import (
					    FlaxRobertaPreLayerNormForCausalLM,
					    FlaxRobertaPreLayerNormForMaskedLM,
					    FlaxRobertaPreLayerNormForMultipleChoice,
					    FlaxRobertaPreLayerNormForQuestionAnswering,
					    FlaxRobertaPreLayerNormForSequenceClassification,
					    FlaxRobertaPreLayerNormForTokenClassification,
					    FlaxRobertaPreLayerNormModel,
					)

class        __SCREAMING_SNAKE_CASE					(     unittest.TestCase       ):






							def __init__(						self  , __lowerCAmelCase  , __lowerCAmelCase=13  , __lowerCAmelCase=7  , __lowerCAmelCase=True  , __lowerCAmelCase=True  , __lowerCAmelCase=True  , __lowerCAmelCase=True  , __lowerCAmelCase=99  , __lowerCAmelCase=32  , __lowerCAmelCase=5  , __lowerCAmelCase=4  , __lowerCAmelCase=37  , __lowerCAmelCase="gelu"  , __lowerCAmelCase=0.1  , __lowerCAmelCase=0.1  , __lowerCAmelCase=512  , __lowerCAmelCase=16  , __lowerCAmelCase=2  , __lowerCAmelCase=0.02  , __lowerCAmelCase=4  , ):
														UpperCamelCase__				     =			parent
														UpperCamelCase__				     =			batch_size
														UpperCamelCase__				     =			seq_length
														UpperCamelCase__				     =			is_training
														UpperCamelCase__				     =			use_attention_mask
														UpperCamelCase__				     =			use_token_type_ids
														UpperCamelCase__				     =			use_labels
														UpperCamelCase__				     =			vocab_size
														UpperCamelCase__				     =			hidden_size
														UpperCamelCase__				     =			num_hidden_layers
														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_choices






							def 				_lowerCamelCase		(						self  ):
														UpperCamelCase__				     =			ids_tensor([self.batch_size, self.seq_length]  , self.vocab_size  )

														UpperCamelCase__				     =			None
														if self.use_attention_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__				     =			RobertaPreLayerNormConfig(
														    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  , )

														return config, input_ids, token_type_ids, attention_mask






							def 				_lowerCamelCase		(						self  ):
														UpperCamelCase__				     =			self.prepare_config_and_inputs()
														UpperCamelCase__     ,     UpperCamelCase__     ,     UpperCamelCase__     ,     UpperCamelCase__				     =			config_and_inputs
														UpperCamelCase__				     =			{"""input_ids""": input_ids, """token_type_ids""": token_type_ids, """attention_mask""": attention_mask}
														return config, inputs_dict







							def 				_lowerCamelCase		(						self  ):
														UpperCamelCase__				     =			self.prepare_config_and_inputs()
														UpperCamelCase__     ,     UpperCamelCase__     ,     UpperCamelCase__     ,     UpperCamelCase__				     =			config_and_inputs

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

														return (
														    config,
														    input_ids,
														    token_type_ids,
														    encoder_hidden_states,
														    encoder_attention_mask,
														)






@require_flax
# Copied from tests.models.roberta.test_modelling_flax_roberta.FlaxRobertaPreLayerNormModelTest with ROBERTA->ROBERTA_PRELAYERNORM,Roberta->RobertaPreLayerNorm,roberta-base->andreasmadsen/efficient_mlm_m0.40
class        __SCREAMING_SNAKE_CASE					(     _lowerCAmelCase   ,		unittest.TestCase       ):
							snake_case     :      int						     =       True

							snake_case     :      Tuple						     =       (
							    (
							        FlaxRobertaPreLayerNormModel,
							        FlaxRobertaPreLayerNormForCausalLM,
							        FlaxRobertaPreLayerNormForMaskedLM,
							        FlaxRobertaPreLayerNormForSequenceClassification,
							        FlaxRobertaPreLayerNormForTokenClassification,
							        FlaxRobertaPreLayerNormForMultipleChoice,
							        FlaxRobertaPreLayerNormForQuestionAnswering,
							    )
							    if is_flax_available()
							    else ()
							)






							def 				_lowerCamelCase		(						self  ):
														UpperCamelCase__				     =			FlaxRobertaPreLayerNormModelTester(self  )







							@slow
							def 				_lowerCamelCase		(						self  ):







														for model_class_name in self.all_model_classes:
																					UpperCamelCase__				     =			model_class_name.from_pretrained("""andreasmadsen/efficient_mlm_m0.40"""  , from_pt=_lowerCAmelCase  )
																					UpperCamelCase__				     =			model(np.ones((1, 1)  )  )
																					self.assertIsNotNone(_lowerCAmelCase  )






@require_flax
class        __SCREAMING_SNAKE_CASE					(     unittest.TestCase       ):






							@slow
							def 				_lowerCamelCase		(						self  ):
														UpperCamelCase__				     =			FlaxRobertaPreLayerNormForMaskedLM.from_pretrained("""andreasmadsen/efficient_mlm_m0.40"""  , from_pt=_lowerCAmelCase  )

														UpperCamelCase__				     =			np.array([[0, 31414, 232, 328, 740, 1140, 12695, 69, 46078, 1588, 2]]  , dtype=jnp.intaa  )
														UpperCamelCase__				     =			model(_lowerCAmelCase  )[0]
														UpperCamelCase__				     =			[1, 11, 50265]
														self.assertEqual(list(output.shape  )  , _lowerCAmelCase  )
														# compare the actual values for a slice.
														UpperCamelCase__				     =			np.array(
														    [[[40.4880, 18.0199, -5.2367], [-1.8877, -4.0885, 10.7085], [-2.2613, -5.6110, 7.2665]]]  , dtype=np.floataa  )
														self.assertTrue(np.allclose(output[:, :3, :3]  , _lowerCAmelCase  , atol=1E-4  )  )







							@slow
							def 				_lowerCamelCase		(						self  ):
														UpperCamelCase__				     =			FlaxRobertaPreLayerNormModel.from_pretrained("""andreasmadsen/efficient_mlm_m0.40"""  , from_pt=_lowerCAmelCase  )

														UpperCamelCase__				     =			np.array([[0, 31414, 232, 328, 740, 1140, 12695, 69, 46078, 1588, 2]]  , dtype=jnp.intaa  )
														UpperCamelCase__				     =			model(_lowerCAmelCase  )[0]
														# compare the actual values for a slice.
														UpperCamelCase__				     =			np.array(
														    [[[0.0208, -0.0356, 0.0237], [-0.1569, -0.0411, -0.2626], [0.1879, 0.0125, -0.0089]]]  , dtype=np.floataa  )
														self.assertTrue(np.allclose(output[:, :3, :3]  , _lowerCAmelCase  , atol=1E-4  )  )











import gc
import unittest

from transformers import MODEL_FOR_MASKED_LM_MAPPING, TF_MODEL_FOR_MASKED_LM_MAPPING, FillMaskPipeline, pipeline
from transformers.pipelines import PipelineException
from transformers.testing_utils import (
    is_pipeline_test,
    is_torch_available,
    nested_simplify,
    require_tf,
    require_torch,
    require_torch_gpu,
    slow,
)

from .test_pipelines_common import ANY

@is_pipeline_test
class        __SCREAMING_SNAKE_CASE					(     unittest.TestCase       ):
							snake_case     :      Any						     =       MODEL_FOR_MASKED_LM_MAPPING
							snake_case     :      Dict						     =       TF_MODEL_FOR_MASKED_LM_MAPPING






							def 				_lowerCamelCase		(						self  ):
														super().tearDown()
														# clean-up as much as possible GPU memory occupied by PyTorch
														gc.collect()
														if is_torch_available():
																					import torch

																					torch.cuda.empty_cache()






							@require_tf
							def 				_lowerCamelCase		(						self  ):
														UpperCamelCase__				     =			pipeline(task="""fill-mask"""  , model="""sshleifer/tiny-distilroberta-base"""  , top_k=2  , framework="""tf"""  )
														UpperCamelCase__				     =			unmasker("""My name is <mask>"""  )
														self.assertEqual(
														    nested_simplify(__lowerCAmelCase  , decimals=6  )  , [
														        {"""sequence""": """My name is grouped""", """score""": 2.1E-05, """token""": 38015, """token_str""": """ grouped"""},
														        {"""sequence""": """My name is accuser""", """score""": 2.1E-05, """token""": 25506, """token_str""": """ accuser"""},
														    ]  , )

														UpperCamelCase__				     =			unmasker("""The largest city in France is <mask>"""  )
														self.assertEqual(
														    nested_simplify(__lowerCAmelCase  , decimals=6  )  , [
														        {
														            """sequence""": """The largest city in France is grouped""",
														            """score""": 2.1E-05,
														            """token""": 38015,
														            """token_str""": """ grouped""",
														        },
														        {
														            """sequence""": """The largest city in France is accuser""",
														            """score""": 2.1E-05,
														            """token""": 25506,
														            """token_str""": """ accuser""",
														        },
														    ]  , )

														UpperCamelCase__				     =			unmasker("""My name is <mask>"""  , targets=[""" Patrick""", """ Clara""", """ Teven"""]  , top_k=3  )
														self.assertEqual(
														    nested_simplify(__lowerCAmelCase  , decimals=6  )  , [
														        {"""sequence""": """My name is Clara""", """score""": 2E-05, """token""": 13606, """token_str""": """ Clara"""},
														        {"""sequence""": """My name is Patrick""", """score""": 2E-05, """token""": 3499, """token_str""": """ Patrick"""},
														        {"""sequence""": """My name is Te""", """score""": 1.9E-05, """token""": 2941, """token_str""": """ Te"""},
														    ]  , )






							@require_torch
							def 				_lowerCamelCase		(						self  ):
														UpperCamelCase__				     =			pipeline(task="""fill-mask"""  , model="""sshleifer/tiny-distilroberta-base"""  , top_k=2  , framework="""pt"""  )

														UpperCamelCase__				     =			unmasker("""My name is <mask>"""  )
														self.assertEqual(
														    nested_simplify(__lowerCAmelCase  , decimals=6  )  , [
														        {"""sequence""": """My name is Maul""", """score""": 2.2E-05, """token""": 35676, """token_str""": """ Maul"""},
														        {"""sequence""": """My name isELS""", """score""": 2.2E-05, """token""": 16416, """token_str""": """ELS"""},
														    ]  , )

														UpperCamelCase__				     =			unmasker("""The largest city in France is <mask>"""  )
														self.assertEqual(
														    nested_simplify(__lowerCAmelCase  , decimals=6  )  , [
														        {
														            """sequence""": """The largest city in France is Maul""",
														            """score""": 2.2E-05,
														            """token""": 35676,
														            """token_str""": """ Maul""",
														        },
														        {"""sequence""": """The largest city in France isELS""", """score""": 2.2E-05, """token""": 16416, """token_str""": """ELS"""},
														    ]  , )

														UpperCamelCase__				     =			unmasker("""My name is <mask>"""  , targets=[""" Patrick""", """ Clara""", """ Teven"""]  , top_k=3  )
														self.assertEqual(
														    nested_simplify(__lowerCAmelCase  , decimals=6  )  , [
														        {"""sequence""": """My name is Patrick""", """score""": 2.1E-05, """token""": 3499, """token_str""": """ Patrick"""},
														        {"""sequence""": """My name is Te""", """score""": 2E-05, """token""": 2941, """token_str""": """ Te"""},
														        {"""sequence""": """My name is Clara""", """score""": 2E-05, """token""": 13606, """token_str""": """ Clara"""},
														    ]  , )

														UpperCamelCase__				     =			unmasker("""My name is <mask> <mask>"""  , top_k=2  )

														self.assertEqual(
														    nested_simplify(__lowerCAmelCase  , decimals=6  )  , [
														        [
														            {
														                """score""": 2.2E-05,
														                """token""": 35676,
														                """token_str""": """ Maul""",
														                """sequence""": """<s>My name is Maul<mask></s>""",
														            },
														            {"""score""": 2.2E-05, """token""": 16416, """token_str""": """ELS""", """sequence""": """<s>My name isELS<mask></s>"""},
														        ],
														        [
														            {
														                """score""": 2.2E-05,
														                """token""": 35676,
														                """token_str""": """ Maul""",
														                """sequence""": """<s>My name is<mask> Maul</s>""",
														            },
														            {"""score""": 2.2E-05, """token""": 16416, """token_str""": """ELS""", """sequence""": """<s>My name is<mask>ELS</s>"""},
														        ],
														    ]  , )






							@require_torch_gpu
							def 				_lowerCamelCase		(						self  ):
														UpperCamelCase__				     =			pipeline("""fill-mask"""  , model="""hf-internal-testing/tiny-random-distilbert"""  , device=0  , framework="""pt"""  )

														# convert model to fp16
														pipe.model.half()

														UpperCamelCase__				     =			pipe("""Paris is the [MASK] of France."""  )
														# We actually don't care about the result, we just want to make sure
														# it works, meaning the float16 tensor got casted back to float32
														# for postprocessing.
														self.assertIsInstance(__lowerCAmelCase  , __lowerCAmelCase  )






							@slow
							@require_torch
							def 				_lowerCamelCase		(						self  ):
														UpperCamelCase__				     =			pipeline(task="""fill-mask"""  , model="""distilroberta-base"""  , top_k=2  , framework="""pt"""  )
														self.run_large_test(__lowerCAmelCase  )






							@slow
							@require_tf
							def 				_lowerCamelCase		(						self  ):
														UpperCamelCase__				     =			pipeline(task="""fill-mask"""  , model="""distilroberta-base"""  , top_k=2  , framework="""tf"""  )
														self.run_large_test(__lowerCAmelCase  )






							def 				_lowerCamelCase		(						self  , __lowerCAmelCase  ):
														UpperCamelCase__				     =			unmasker("""My name is <mask>"""  )
														self.assertEqual(
														    nested_simplify(__lowerCAmelCase  )  , [
														        {"""sequence""": """My name is John""", """score""": 0.008, """token""": 610, """token_str""": """ John"""},
														        {"""sequence""": """My name is Chris""", """score""": 0.007, """token""": 1573, """token_str""": """ Chris"""},
														    ]  , )
														UpperCamelCase__				     =			unmasker("""The largest city in France is <mask>"""  )
														self.assertEqual(
														    nested_simplify(__lowerCAmelCase  )  , [
														        {
														            """sequence""": """The largest city in France is Paris""",
														            """score""": 0.251,
														            """token""": 2201,
														            """token_str""": """ Paris""",
														        },
														        {
														            """sequence""": """The largest city in France is Lyon""",
														            """score""": 0.214,
														            """token""": 12790,
														            """token_str""": """ Lyon""",
														        },
														    ]  , )

														UpperCamelCase__				     =			unmasker("""My name is <mask>"""  , targets=[""" Patrick""", """ Clara""", """ Teven"""]  , top_k=3  )
														self.assertEqual(
														    nested_simplify(__lowerCAmelCase  )  , [
														        {"""sequence""": """My name is Patrick""", """score""": 0.005, """token""": 3499, """token_str""": """ Patrick"""},
														        {"""sequence""": """My name is Clara""", """score""": 0.000, """token""": 13606, """token_str""": """ Clara"""},
														        {"""sequence""": """My name is Te""", """score""": 0.000, """token""": 2941, """token_str""": """ Te"""},
														    ]  , )






							@require_torch
							def 				_lowerCamelCase		(						self  ):
														UpperCamelCase__				     =			pipeline(task="""fill-mask"""  , model="""sshleifer/tiny-distilroberta-base"""  , framework="""pt"""  )
														UpperCamelCase__				     =			None
														UpperCamelCase__				     =			None
														self.run_pipeline_test(__lowerCAmelCase  , []  )






							@require_tf
							def 				_lowerCamelCase		(						self  ):
														UpperCamelCase__				     =			pipeline(task="""fill-mask"""  , model="""sshleifer/tiny-distilroberta-base"""  , framework="""tf"""  )
														UpperCamelCase__				     =			None
														UpperCamelCase__				     =			None
														self.run_pipeline_test(__lowerCAmelCase  , []  )






							def 				_lowerCamelCase		(						self  , __lowerCAmelCase  , __lowerCAmelCase  , __lowerCAmelCase  ):
														if tokenizer is None or tokenizer.mask_token_id is None:
																					self.skipTest("""The provided tokenizer has no mask token, (probably reformer or wav2vec2)"""  )

														UpperCamelCase__				     =			FillMaskPipeline(model=__lowerCAmelCase  , tokenizer=__lowerCAmelCase  )
														UpperCamelCase__				     =			[
														    f"""This is another {tokenizer.mask_token} test""",
														]
														return fill_masker, examples






							def 				_lowerCamelCase		(						self  , __lowerCAmelCase  , __lowerCAmelCase  ):
														UpperCamelCase__				     =			fill_masker.tokenizer
														UpperCamelCase__				     =			fill_masker.model

														UpperCamelCase__				     =			fill_masker(
														    f"""This is a {tokenizer.mask_token}"""  , )
														self.assertEqual(
														    __lowerCAmelCase  , [
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														    ]  , )

														UpperCamelCase__				     =			fill_masker([f"""This is a {tokenizer.mask_token}"""]  )
														self.assertEqual(
														    __lowerCAmelCase  , [
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														    ]  , )

														UpperCamelCase__				     =			fill_masker([f"""This is a {tokenizer.mask_token}""", f"""Another {tokenizer.mask_token} great test."""]  )
														self.assertEqual(
														    __lowerCAmelCase  , [
														        [
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        ],
														        [
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        ],
														    ]  , )

														with self.assertRaises(__lowerCAmelCase  ):
																					fill_masker([None]  )
														# No mask_token is not supported
														with self.assertRaises(__lowerCAmelCase  ):
																					fill_masker("""This is"""  )

														self.run_test_top_k(__lowerCAmelCase  , __lowerCAmelCase  )
														self.run_test_targets(__lowerCAmelCase  , __lowerCAmelCase  )
														self.run_test_top_k_targets(__lowerCAmelCase  , __lowerCAmelCase  )
														self.fill_mask_with_duplicate_targets_and_top_k(__lowerCAmelCase  , __lowerCAmelCase  )
														self.fill_mask_with_multiple_masks(__lowerCAmelCase  , __lowerCAmelCase  )






							def 				_lowerCamelCase		(						self  , __lowerCAmelCase  , __lowerCAmelCase  ):
														UpperCamelCase__				     =			tokenizer.get_vocab()
														UpperCamelCase__				     =			sorted(vocab.keys()  )[:2]
														# Pipeline argument
														UpperCamelCase__				     =			FillMaskPipeline(model=__lowerCAmelCase  , tokenizer=__lowerCAmelCase  , targets=__lowerCAmelCase  )
														UpperCamelCase__				     =			fill_masker(f"""This is a {tokenizer.mask_token}"""  )
														self.assertEqual(
														    __lowerCAmelCase  , [
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														    ]  , )
														UpperCamelCase__				     =			{vocab[el] for el in targets}
														self.assertEqual({el["""token"""] for el in outputs}  , __lowerCAmelCase  )
														UpperCamelCase__				     =			[tokenizer.decode([x]  ) for x in target_ids]
														self.assertEqual({el["""token_str"""] for el in outputs}  , set(__lowerCAmelCase  )  )

														# Call argument
														UpperCamelCase__				     =			FillMaskPipeline(model=__lowerCAmelCase  , tokenizer=__lowerCAmelCase  )
														UpperCamelCase__				     =			fill_masker(f"""This is a {tokenizer.mask_token}"""  , targets=__lowerCAmelCase  )
														self.assertEqual(
														    __lowerCAmelCase  , [
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														    ]  , )
														UpperCamelCase__				     =			{vocab[el] for el in targets}
														self.assertEqual({el["""token"""] for el in outputs}  , __lowerCAmelCase  )
														UpperCamelCase__				     =			[tokenizer.decode([x]  ) for x in target_ids]
														self.assertEqual({el["""token_str"""] for el in outputs}  , set(__lowerCAmelCase  )  )

														# Score equivalence
														UpperCamelCase__				     =			fill_masker(f"""This is a {tokenizer.mask_token}"""  , targets=__lowerCAmelCase  )
														UpperCamelCase__				     =			[top_mask["""token_str"""] for top_mask in outputs]
														UpperCamelCase__				     =			[top_mask["""score"""] for top_mask in outputs]

														# For some BPE tokenizers, `</w>` is removed during decoding, so `token_str` won't be the same as in `targets`.
														if set(__lowerCAmelCase  ) == set(__lowerCAmelCase  ):
																					UpperCamelCase__				     =			fill_masker(f"""This is a {tokenizer.mask_token}"""  , targets=__lowerCAmelCase  )
																					UpperCamelCase__				     =			[top_mask["""score"""] for top_mask in unmasked_targets]
																					self.assertEqual(nested_simplify(__lowerCAmelCase  )  , nested_simplify(__lowerCAmelCase  )  )

														# Raises with invalid
														with self.assertRaises(__lowerCAmelCase  ):
																					UpperCamelCase__				     =			fill_masker(f"""This is a {tokenizer.mask_token}"""  , targets=[]  )
														# For some tokenizers, `""` is actually in the vocabulary and the expected error won't raised
														if "" not in tokenizer.get_vocab():
																					with self.assertRaises(__lowerCAmelCase  ):
																												UpperCamelCase__				     =			fill_masker(f"""This is a {tokenizer.mask_token}"""  , targets=[""""""]  )
																					with self.assertRaises(__lowerCAmelCase  ):
																												UpperCamelCase__				     =			fill_masker(f"""This is a {tokenizer.mask_token}"""  , targets=""""""  )






							def 				_lowerCamelCase		(						self  , __lowerCAmelCase  , __lowerCAmelCase  ):
														UpperCamelCase__				     =			FillMaskPipeline(model=__lowerCAmelCase  , tokenizer=__lowerCAmelCase  , top_k=2  )
														UpperCamelCase__				     =			fill_masker(f"""This is a {tokenizer.mask_token}"""  )
														self.assertEqual(
														    __lowerCAmelCase  , [
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														    ]  , )

														UpperCamelCase__				     =			FillMaskPipeline(model=__lowerCAmelCase  , tokenizer=__lowerCAmelCase  )
														UpperCamelCase__				     =			fill_masker(f"""This is a {tokenizer.mask_token}"""  , top_k=2  )
														self.assertEqual(
														    __lowerCAmelCase  , [
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														    ]  , )
														self.assertEqual(nested_simplify(__lowerCAmelCase  )  , nested_simplify(__lowerCAmelCase  )  )






							def 				_lowerCamelCase		(						self  , __lowerCAmelCase  , __lowerCAmelCase  ):
														UpperCamelCase__				     =			tokenizer.get_vocab()
														UpperCamelCase__				     =			FillMaskPipeline(model=__lowerCAmelCase  , tokenizer=__lowerCAmelCase  )

														# top_k=2, ntargets=3
														UpperCamelCase__				     =			sorted(vocab.keys()  )[:3]
														UpperCamelCase__				     =			fill_masker(f"""This is a {tokenizer.mask_token}"""  , top_k=2  , targets=__lowerCAmelCase  )

														# If we use the most probably targets, and filter differently, we should still
														# have the same results
														UpperCamelCase__				     =			[el["""token_str"""] for el in sorted(__lowerCAmelCase  , key=lambda __lowerCAmelCase  : x["score"]  , reverse=__lowerCAmelCase  )]
														# For some BPE tokenizers, `</w>` is removed during decoding, so `token_str` won't be the same as in `targets`.
														if set(__lowerCAmelCase  ).issubset(__lowerCAmelCase  ):
																					UpperCamelCase__				     =			fill_masker(f"""This is a {tokenizer.mask_token}"""  , top_k=3  , targets=__lowerCAmelCase  )
																					# They should yield exactly the same result
																					self.assertEqual(nested_simplify(__lowerCAmelCase  )  , nested_simplify(__lowerCAmelCase  )  )






							def 				_lowerCamelCase		(						self  , __lowerCAmelCase  , __lowerCAmelCase  ):
														UpperCamelCase__				     =			FillMaskPipeline(model=__lowerCAmelCase  , tokenizer=__lowerCAmelCase  )
														UpperCamelCase__				     =			tokenizer.get_vocab()
														# String duplicates + id duplicates
														UpperCamelCase__				     =			sorted(vocab.keys()  )[:3]
														UpperCamelCase__				     =			[targets[0], targets[1], targets[0], targets[2], targets[1]]
														UpperCamelCase__				     =			fill_masker(f"""My name is {tokenizer.mask_token}"""  , targets=__lowerCAmelCase  , top_k=10  )

														# The target list contains duplicates, so we can't output more
														# than them
														self.assertEqual(len(__lowerCAmelCase  )  , 3  )







							def 				_lowerCamelCase		(						self  , __lowerCAmelCase  , __lowerCAmelCase  ):
														UpperCamelCase__				     =			FillMaskPipeline(model=__lowerCAmelCase  , tokenizer=__lowerCAmelCase  )

														UpperCamelCase__				     =			fill_masker(
														    f"""This is a {tokenizer.mask_token} {tokenizer.mask_token} {tokenizer.mask_token}"""  , top_k=2  )
														self.assertEqual(
														    __lowerCAmelCase  , [
														        [
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        ],
														        [
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        ],
														        [
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														            {"""sequence""": ANY(__lowerCAmelCase  ), """score""": ANY(__lowerCAmelCase  ), """token""": ANY(__lowerCAmelCase  ), """token_str""": ANY(__lowerCAmelCase  )},
														        ],
														    ]  , )




