





'''simple docstring'''






import unittest

from transformers import ErnieMTokenizer
from transformers.testing_utils import get_tests_dir, require_sentencepiece, require_tokenizers, slow

from ...test_tokenization_common import TokenizerTesterMixin


A__       :     int          =get_tests_dir('''fixtures/spiece.model''')




@require_sentencepiece
@require_tokenizers
class 				UpperCAmelCase  (    snake_case_							,	unittest.TestCase     ):
      _lowercase:    int		  =     ErnieMTokenizer
      _lowercase:    str		  =     False
      _lowercase:    int		  =     True
      _lowercase:    Any		  =     False
      _lowercase:    Optional[Any]		  =     False




      def        lowercase__					(    self    :				Optional[Any]						)       ->   Tuple:
            super().setUp()

            # We have a SentencePiece fixture for testing
            _lowerCAmelCase							  =							ErnieMTokenizer(__snake_case    ,    unk_token="""<unk>"""    ,    pad_token="""<pad>"""						)
            tokenizer.save_pretrained(self.tmpdirname						)




      def        lowercase__					(    self    :				Any    ,    __snake_case    :				str						)       ->   str:
            _lowerCAmelCase							  =							"""this is a test"""
            _lowerCAmelCase							  =							"""this is a test"""
            return input_text, output_text




      def        lowercase__					(    self    :				str						)       ->   Any:
            _lowerCAmelCase							  =							"""<pad>"""
            _lowerCAmelCase							  =							0

            self.assertEqual(self.get_tokenizer()._convert_token_to_id(__snake_case						)    ,    __snake_case						)
            self.assertEqual(self.get_tokenizer()._convert_id_to_token(__snake_case						)    ,    __snake_case						)




      def        lowercase__					(    self    :				str						)       ->   Any:
            _lowerCAmelCase							  =							list(self.get_tokenizer().get_vocab().keys()						)

            self.assertEqual(vocab_keys[0]    ,    """<pad>"""						)
            self.assertEqual(vocab_keys[1]    ,    """<unk>"""						)
            self.assertEqual(vocab_keys[-1]    ,    """▁eloquent"""						)
            self.assertEqual(len(__snake_case						)    ,    3_00_00						)




      def        lowercase__					(    self    :				Tuple						)       ->   int:
            self.assertEqual(self.get_tokenizer().vocab_size    ,    3_00_00						)




      def        lowercase__					(    self    :				Optional[Any]						)       ->   int:
            if not self.test_rust_tokenizer:
                  return

            _lowerCAmelCase							  =							self.get_tokenizer()
            _lowerCAmelCase							  =							self.get_rust_tokenizer()

            _lowerCAmelCase							  =							"""I was born in 92000, and this is falsé."""

            _lowerCAmelCase							  =							tokenizer.tokenize(__snake_case						)
            _lowerCAmelCase							  =							rust_tokenizer.tokenize(__snake_case						)
            self.assertListEqual(__snake_case    ,    __snake_case						)

            _lowerCAmelCase							  =							tokenizer.encode(__snake_case    ,    add_special_tokens=__snake_case						)
            _lowerCAmelCase							  =							rust_tokenizer.encode(__snake_case    ,    add_special_tokens=__snake_case						)
            self.assertListEqual(__snake_case    ,    __snake_case						)

            _lowerCAmelCase							  =							self.get_rust_tokenizer()
            _lowerCAmelCase							  =							tokenizer.encode(__snake_case						)
            _lowerCAmelCase							  =							rust_tokenizer.encode(__snake_case						)
            self.assertListEqual(__snake_case    ,    __snake_case						)




      def        lowercase__					(    self    :				Optional[int]						)       ->   str:
            _lowerCAmelCase							  =							ErnieMTokenizer(__snake_case    ,    do_lower_case=__snake_case    ,    unk_token="""<unk>"""    ,    pad_token="""<pad>"""						)

            _lowerCAmelCase							  =							tokenizer.tokenize("""This is a test"""						)
            self.assertListEqual(__snake_case    ,    ["""▁this""", """▁is""", """▁a""", """▁test"""]						)

            self.assertListEqual(tokenizer.convert_tokens_to_ids(__snake_case						)    ,    [48, 25, 21, 12_89]						)

            _lowerCAmelCase							  =							tokenizer.tokenize("""I was born in 92000, and this is falsé."""						)
            # ErnieMTokenizer(paddlenlp implementation) outputs '9' instead of '_9' so to mimic that '_9' is changed to '9'
            self.assertListEqual(
                __snake_case    ,    ["""▁i""", """▁was""", """▁born""", """▁in""", """9""", """2000""", """,""", """▁and""", """▁this""", """▁is""", """▁fal""", """s""", """é""", """."""]						)
            _lowerCAmelCase							  =							tokenizer.convert_tokens_to_ids(__snake_case						)
            self.assertListEqual(__snake_case    ,    [31, 23, 3_86, 19, 5_18, 30_50, 15, 17, 48, 25, 82_56, 18, 1, 9]						)

            _lowerCAmelCase							  =							tokenizer.convert_ids_to_tokens(__snake_case						)
            self.assertListEqual(
                __snake_case    ,    ["""▁i""", """▁was""", """▁born""", """▁in""", """9""", """2000""", """,""", """▁and""", """▁this""", """▁is""", """▁fal""", """s""", """<unk>""", """."""]    ,    )




      def        lowercase__					(    self    :				List[Any]						)       ->   Dict:
            _lowerCAmelCase							  =							ErnieMTokenizer(__snake_case    ,    unk_token="""<unk>"""    ,    pad_token="""<pad>"""						)

            _lowerCAmelCase							  =							tokenizer.encode("""sequence builders"""						)
            _lowerCAmelCase							  =							tokenizer.encode("""multi-sequence build"""						)

            _lowerCAmelCase							  =							tokenizer.build_inputs_with_special_tokens(__snake_case						)
            _lowerCAmelCase							  =							tokenizer.build_inputs_with_special_tokens(__snake_case    ,    __snake_case						)

            assert encoded_sentence == [tokenizer.cls_token_id] + text + [tokenizer.sep_token_id]
            assert encoded_pair == [tokenizer.cls_token_id] + text + [tokenizer.sep_token_id] + [
                tokenizer.sep_token_id
            ] + text_a + [tokenizer.sep_token_id]




      @slow
      def        lowercase__					(    self    :				Tuple						)       ->   Tuple:
            # fmt: off
            _lowerCAmelCase							  =							{"""input_ids""": [[0, 1_10_62, 8_27_72, 7, 15, 8_27_72, 5_38, 5_15_29, 2_37, 1_71_98, 12_90, 2_06, 9, 21_51_75, 13_14, 1_36, 1_71_98, 12_90, 2_06, 9, 5_63_59, 42, 12_20_09, 9, 1_64_66, 16, 8_73_44, 45_37, 9, 47_17, 7_83_81, 6, 15_99_58, 7, 15, 2_44_80, 6_18, 4, 5_27, 2_26_93, 9, 3_04, 4, 27_77, 2_44_80, 98_74, 4, 4_35_23, 5_94, 4, 8_03, 1_83_92, 3_31_89, 18, 4, 4_35_23, 2_44_47, 5, 5, 5, 16, 1_00, 2_49_55, 8_36_58, 96_26, 14_40_57, 15, 8_39, 2_23_35, 16, 1_36, 2_49_55, 8_36_58, 8_34_79, 15, 3_91_02, 7_24, 16, 6_78, 6_45, 64_60, 13_28, 45_89, 42, 12_20_09, 11_57_74, 23, 35_59, 13_28, 4_68_76, 7, 1_36, 5_38_94, 19_40, 4_22_27, 4_11_59, 1_77_21, 8_23, 4_25, 4, 2_75_12, 9_87_22, 2_06, 1_36, 55_31, 49_70, 9_19, 1_73_36, 5, 2], [0, 2_00_80, 6_18, 83, 8_27_75, 47, 4_79, 9, 15_17, 73, 5_38_94, 3_33, 8_05_81, 11_01_17, 1_88_11, 52_56, 12_95, 51, 15_25_26, 2_97, 79_86, 3_90, 12_44_16, 5_38, 3_54_31, 2_14, 98, 1_50_44, 2_57_37, 1_36, 71_08, 4_37_01, 23, 7_56, 13_53_55, 7, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 5_81, 6_37_73, 11_94_55, 6, 14_77_97, 8_82_03, 7, 6_45, 70, 21, 32_85, 1_02_69, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]}
            # fmt: on

            self.tokenizer_integration_test_util(
                expected_encoding=__snake_case    ,    model_name="""susnato/ernie-m-base_pytorch"""    ,    sequences=[
                    """Transformers (formerly known as pytorch-transformers and pytorch-pretrained-bert) provides """
                    """general-purpose architectures (BERT, GPT-2, RoBERTa, XLM, DistilBert, XLNet...) for Natural """
                    """Language Understanding (NLU) and Natural Language Generation (NLG) with over32+ pretrained """
                    """models in100+ languages and deep interoperability between Jax, PyTorch and TensorFlow.""",
                    """BERT is designed to pre-train deep bidirectional representations from unlabeled text by jointly """
                    """conditioning on both left and right context in all layers.""",
                    """The quick brown fox jumps over the lazy dog.""",
                ]    ,    )






'''simple docstring'''






import torch

from transformers import PreTrainedModel

from .custom_configuration import CustomConfig, NoSuperInitConfig




class 				UpperCAmelCase  (    snake_case_     ):
      _lowercase:    str		  =     CustomConfig




      def __init__(    self    :				Optional[int]    ,    __snake_case    :				Tuple						)       ->   Optional[Any]:
            super().__init__(__snake_case						)
            _lowerCAmelCase							  =							torch.nn.Linear(config.hidden_size    ,    config.hidden_size						)




      def        lowercase__					(    self    :				Dict    ,    __snake_case    :				List[Any]						)       ->   Dict:
            return self.linear(__snake_case						)




      def        lowercase__					(    self    :				List[Any]    ,    __snake_case    :				int						)       ->   Any:
            pass




class 				UpperCAmelCase  (    snake_case_     ):
      _lowercase:    List[str]		  =     NoSuperInitConfig




      def __init__(    self    :				List[str]    ,    __snake_case    :				List[str]						)       ->   int:
            super().__init__(__snake_case						)
            _lowerCAmelCase							  =							torch.nn.Linear(config.attribute    ,    config.attribute						)




      def        lowercase__					(    self    :				List[str]    ,    __snake_case    :				Dict						)       ->   Any:
            return self.linear(__snake_case						)




      def        lowercase__					(    self    :				Optional[int]    ,    __snake_case    :				List[Any]						)       ->   Dict:
            pass






