




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


_SCREAMING_SNAKE_CASE						 =     get_tests_dir("""fixtures/spiece.model""")







@require_sentencepiece
@require_tokenizers
class  _SCREAMING_SNAKE_CASE       (     SCREAMING_SNAKE_CASE__			,				unittest.TestCase				):



 '''simple docstring'''





 __UpperCAmelCase		   =							ErnieMTokenizer
 __UpperCAmelCase		   =							False
 __UpperCAmelCase		   =							True
 __UpperCAmelCase		   =							False
 __UpperCAmelCase		   =							False






 def lowercase_      (self   ):

  '''simple docstring'''







  super().setUp()

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






 def lowercase_      (self					,     lowerCAmelCase__   ):

  '''simple docstring'''







  _UpperCamelCase      :	Optional[Any]					      =  "this is a test"
  _UpperCamelCase      :	Union[str, Any]					      =  "this is a test"
  return input_text, output_text






 def lowercase_      (self   ):

  '''simple docstring'''







  _UpperCamelCase      :	Optional[Any]					      =  "<pad>"
  _UpperCamelCase      :	Dict					      =  0

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






 def lowercase_      (self   ):

  '''simple docstring'''







  _UpperCamelCase      :	List[str]					      =  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(lowerCAmelCase__   )					,     3_00_00   )






 def lowercase_      (self   ):

  '''simple docstring'''







  self.assertEqual(self.get_tokenizer().vocab_size					,     3_00_00   )






 def lowercase_      (self   ):

  '''simple docstring'''







  if not self.test_rust_tokenizer:
   return

  _UpperCamelCase      :	Optional[int]					      =  self.get_tokenizer()
  _UpperCamelCase      :	Union[str, Any]					      =  self.get_rust_tokenizer()

  _UpperCamelCase      :	Optional[Any]					      =  "I was born in 92000, and this is falsé."

  _UpperCamelCase      :	List[Any]					      =  tokenizer.tokenize(lowerCAmelCase__   )
  _UpperCamelCase      :	Any					      =  rust_tokenizer.tokenize(lowerCAmelCase__   )
  self.assertListEqual(lowerCAmelCase__					,     lowerCAmelCase__   )

  _UpperCamelCase      :	List[str]					      =  tokenizer.encode(lowerCAmelCase__					,     add_special_tokens=lowerCAmelCase__   )
  _UpperCamelCase      :	str					      =  rust_tokenizer.encode(lowerCAmelCase__					,     add_special_tokens=lowerCAmelCase__   )
  self.assertListEqual(lowerCAmelCase__					,     lowerCAmelCase__   )

  _UpperCamelCase      :	Dict					      =  self.get_rust_tokenizer()
  _UpperCamelCase      :	str					      =  tokenizer.encode(lowerCAmelCase__   )
  _UpperCamelCase      :	List[Any]					      =  rust_tokenizer.encode(lowerCAmelCase__   )
  self.assertListEqual(lowerCAmelCase__					,     lowerCAmelCase__   )






 def lowercase_      (self   ):

  '''simple docstring'''







  _UpperCamelCase      :	str					      =  ErnieMTokenizer(lowerCAmelCase__					,     do_lower_case=lowerCAmelCase__					,     unk_token="<unk>"					,     pad_token="<pad>"   )

  _UpperCamelCase      :	Optional[Any]					      =  tokenizer.tokenize("This is a test"   )
  self.assertListEqual(lowerCAmelCase__					,     ["▁this", "▁is", "▁a", "▁test"]   )

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

  _UpperCamelCase      :	List[str]					      =  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(
      lowerCAmelCase__					,     ["▁i", "▁was", "▁born", "▁in", "9", "2000", ",", "▁and", "▁this", "▁is", "▁fal", "s", "é", "."]   )
  _UpperCamelCase      :	int					      =  tokenizer.convert_tokens_to_ids(lowerCAmelCase__   )
  self.assertListEqual(lowerCAmelCase__					,     [31, 23, 3_86, 19, 5_18, 30_50, 15, 17, 48, 25, 82_56, 18, 1, 9]   )

  _UpperCamelCase      :	Union[str, Any]					      =  tokenizer.convert_ids_to_tokens(lowerCAmelCase__   )
  self.assertListEqual(
      lowerCAmelCase__					,     ["▁i", "▁was", "▁born", "▁in", "9", "2000", ",", "▁and", "▁this", "▁is", "▁fal", "s", "<unk>", "."]					,     )






 def lowercase_      (self   ):

  '''simple docstring'''







  _UpperCamelCase      :	Dict					      =  ErnieMTokenizer(lowerCAmelCase__					,     unk_token="<unk>"					,     pad_token="<pad>"   )

  _UpperCamelCase      :	Dict					      =  tokenizer.encode("sequence builders"   )
  _UpperCamelCase      :	Tuple					      =  tokenizer.encode("multi-sequence build"   )

  _UpperCamelCase      :	List[Any]					      =  tokenizer.build_inputs_with_special_tokens(lowerCAmelCase__   )
  _UpperCamelCase      :	Optional[Any]					      =  tokenizer.build_inputs_with_special_tokens(lowerCAmelCase__					,     lowerCAmelCase__   )

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

  '''simple docstring'''







  _UpperCamelCase      :	int					      =  {"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=lowerCAmelCase__					,     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 platform
from argparse import ArgumentParser

import huggingface_hub
import pandas
import pyarrow

from datasets import __version__ as version
from datasets.commands import BaseDatasetsCLICommand






def 				__lowerCAmelCase					(					__lowerCAmelCase			:		Union[str, Any]						)    ->       int:
 return EnvironmentCommand()







class  _SCREAMING_SNAKE_CASE       (     SCREAMING_SNAKE_CASE__				):



 '''simple docstring'''





 @staticmethod
 def lowercase_      (lowerCAmelCase__   ):

  '''simple docstring'''







  _UpperCamelCase      :	Optional[Any]					      =  parser.add_parser("env"					,     help="Print relevant system environment info."   )
  download_parser.set_defaults(func=lowerCAmelCase__   )






 def lowercase_      (self   ):

  '''simple docstring'''







  _UpperCamelCase      :	Any					      =  {
      "`datasets` version": version,
      "Platform": platform.platform(),
      "Python version": platform.python_version(),
      "Huggingface_hub version": huggingface_hub.__version__,
      "PyArrow version": pyarrow.__version__,
      "Pandas version": pandas.__version__,
  }

  print("\nCopy-and-paste the text below in your GitHub issue.\n"   )
  print(self.format_dict(lowerCAmelCase__   )   )

  return info






 @staticmethod
 def lowercase_      (lowerCAmelCase__   ):

  '''simple docstring'''







  return "\n".join([F"- {prop}: {val}" for prop, val in d.items()]   ) + "\n"



