import json
import os
import unittest

from transformers.models.roc_bert.tokenization_roc_bert import (
    VOCAB_FILES_NAMES,
    RoCBertBasicTokenizer,
    RoCBertTokenizer,
    RoCBertWordpieceTokenizer,
    _is_control,
    _is_punctuation,
    _is_whitespace,
)
from transformers.testing_utils import require_tokenizers, slow

from ...test_tokenization_common import TokenizerTesterMixin, filter_non_english




@require_tokenizers
class        __snake_case	(					__lowerCAmelCase	,				unittest.TestCase    ):
      a__				=		RoCBertTokenizer
      a__				=		None
      a__				=		False
      a__				=		True
      a__				=		filter_non_english



      def   lowerCamelCase_       (						self)     ->      Tuple:





        '''simple docstring'''





        super().setUp()

        a__:					Dict      							=     ['[UNK]', '[CLS]', '[SEP]', '[PAD]', '[MASK]', '你', '好', '是', '谁', 'a', 'b', 'c', 'd']
        a__:					Dict      							=     {}
        a__:					Any      							=     {}
        for i, value in enumerate(lowercase):
          a__:					Optional[Any]      							=     i
          a__:					Tuple      							=     i
        a__:					Any      							=     os.path.join(self.tmpdirname   ,      VOCAB_FILES_NAMES['vocab_file'])
        a__:					Tuple      							=     os.path.join(self.tmpdirname   ,      VOCAB_FILES_NAMES['word_shape_file'])
        a__:					int      							=     os.path.join(self.tmpdirname   ,      VOCAB_FILES_NAMES['word_pronunciation_file'])
        with open(self.vocab_file   ,      'w'   ,      encoding='utf-8') as vocab_writer:
          vocab_writer.write(''.join([x + '\n' for x in vocab_tokens]))
        with open(self.word_shape_file   ,      'w'   ,      encoding='utf-8') as word_shape_writer:
          json.dump(lowercase   ,      lowercase   ,      ensure_ascii=lowercase)
        with open(self.word_pronunciation_file   ,      'w'   ,      encoding='utf-8') as word_pronunciation_writer:
          json.dump(lowercase   ,      lowercase   ,      ensure_ascii=lowercase)



      def   lowerCamelCase_       (						self)     ->      int:





        '''simple docstring'''





        a__:					Any      							=     self.tokenizer_class(self.vocab_file   ,      self.word_shape_file   ,      self.word_pronunciation_file)

        a__:					List[Any]      							=     tokenizer.tokenize('你好[SEP]你是谁')
        self.assertListEqual(lowercase   ,      ['你', '好', '[SEP]', '你', '是', '谁'])
        self.assertListEqual(tokenizer.convert_tokens_to_ids(lowercase)   ,      [5, 6, 2, 5, 7, 8])
        self.assertListEqual(tokenizer.convert_tokens_to_shape_ids(lowercase)   ,      [5, 6, 2, 5, 7, 8])
        self.assertListEqual(tokenizer.convert_tokens_to_pronunciation_ids(lowercase)   ,      [5, 6, 2, 5, 7, 8])



      def   lowerCamelCase_       (						self)     ->      Any:





        '''simple docstring'''





        a__:					Union[str, Any]      							=     RoCBertBasicTokenizer()

        self.assertListEqual(tokenizer.tokenize('ah\u535A\u63A8zz')   ,      ['ah', '\u535A', '\u63A8', 'zz'])



      def   lowerCamelCase_       (						self)     ->      Any:





        '''simple docstring'''





        a__:					List[str]      							=     RoCBertBasicTokenizer(do_lower_case=lowercase)

        self.assertListEqual(
            tokenizer.tokenize(' \tHeLLo!how  \n Are yoU?  ')   ,      ['hello', '!', 'how', 'are', 'you', '?'])
        self.assertListEqual(tokenizer.tokenize('H\u00E9llo')   ,      ['hello'])



      def   lowerCamelCase_       (						self)     ->      str:





        '''simple docstring'''





        a__:					List[Any]      							=     RoCBertBasicTokenizer(do_lower_case=lowercase   ,      strip_accents=lowercase)

        self.assertListEqual(
            tokenizer.tokenize(' \tHäLLo!how  \n Are yoU?  ')   ,      ['hällo', '!', 'how', 'are', 'you', '?'])
        self.assertListEqual(tokenizer.tokenize('H\u00E9llo')   ,      ['h\u00E9llo'])



      def   lowerCamelCase_       (						self)     ->      int:





        '''simple docstring'''





        a__:					Optional[int]      							=     RoCBertBasicTokenizer(do_lower_case=lowercase   ,      strip_accents=lowercase)

        self.assertListEqual(
            tokenizer.tokenize(' \tHäLLo!how  \n Are yoU?  ')   ,      ['hallo', '!', 'how', 'are', 'you', '?'])
        self.assertListEqual(tokenizer.tokenize('H\u00E9llo')   ,      ['hello'])



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





        '''simple docstring'''





        a__:					List[Any]      							=     RoCBertBasicTokenizer(do_lower_case=lowercase)

        self.assertListEqual(
            tokenizer.tokenize(' \tHäLLo!how  \n Are yoU?  ')   ,      ['hallo', '!', 'how', 'are', 'you', '?'])
        self.assertListEqual(tokenizer.tokenize('H\u00E9llo')   ,      ['hello'])



      def   lowerCamelCase_       (						self)     ->      List[str]:





        '''simple docstring'''





        a__:					List[Any]      							=     RoCBertBasicTokenizer(do_lower_case=lowercase)

        self.assertListEqual(
            tokenizer.tokenize(' \tHeLLo!how  \n Are yoU?  ')   ,      ['HeLLo', '!', 'how', 'Are', 'yoU', '?'])



      def   lowerCamelCase_       (						self)     ->      Dict:





        '''simple docstring'''





        a__:					List[Any]      							=     RoCBertBasicTokenizer(do_lower_case=lowercase   ,      strip_accents=lowercase)

        self.assertListEqual(
            tokenizer.tokenize(' \tHäLLo!how  \n Are yoU?  ')   ,      ['HäLLo', '!', 'how', 'Are', 'yoU', '?'])



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





        '''simple docstring'''





        a__:					List[str]      							=     RoCBertBasicTokenizer(do_lower_case=lowercase   ,      strip_accents=lowercase)

        self.assertListEqual(
            tokenizer.tokenize(' \tHäLLo!how  \n Are yoU?  ')   ,      ['HaLLo', '!', 'how', 'Are', 'yoU', '?'])



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





        '''simple docstring'''





        a__:					Optional[Any]      							=     RoCBertBasicTokenizer(do_lower_case=lowercase   ,      never_split=['[UNK]'])

        self.assertListEqual(
            tokenizer.tokenize(' \tHeLLo!how  \n Are yoU? [UNK]')   ,      ['HeLLo', '!', 'how', 'Are', 'yoU', '?', '[UNK]'])



      def   lowerCamelCase_       (						self)     ->      Union[str, Any]:





        '''simple docstring'''





        a__:					Dict      							=     ['[UNK]', '[CLS]', '[SEP]', 'want', '##want', '##ed', 'wa', 'un', 'runn', '##ing']

        a__:					Optional[int]      							=     {}
        for i, token in enumerate(lowercase):
          a__:					Any      							=     i
        a__:					Dict      							=     RoCBertWordpieceTokenizer(vocab=lowercase   ,      unk_token='[UNK]')

        self.assertListEqual(tokenizer.tokenize('')   ,      [])

        self.assertListEqual(tokenizer.tokenize('unwanted running')   ,      ['un', '##want', '##ed', 'runn', '##ing'])

        self.assertListEqual(tokenizer.tokenize('unwantedX running')   ,      ['[UNK]', 'runn', '##ing'])



      def   lowerCamelCase_       (						self)     ->      Tuple:





        '''simple docstring'''





        self.assertTrue(_is_whitespace(' '))
        self.assertTrue(_is_whitespace('\t'))
        self.assertTrue(_is_whitespace('\r'))
        self.assertTrue(_is_whitespace('\n'))
        self.assertTrue(_is_whitespace('\u00A0'))

        self.assertFalse(_is_whitespace('A'))
        self.assertFalse(_is_whitespace('-'))



      def   lowerCamelCase_       (						self)     ->      Union[str, Any]:





        '''simple docstring'''





        self.assertTrue(_is_control('\u0005'))

        self.assertFalse(_is_control('A'))
        self.assertFalse(_is_control(' '))
        self.assertFalse(_is_control('\t'))
        self.assertFalse(_is_control('\r'))



      def   lowerCamelCase_       (						self)     ->      Tuple:





        '''simple docstring'''





        self.assertTrue(_is_punctuation('-'))
        self.assertTrue(_is_punctuation('$'))
        self.assertTrue(_is_punctuation('`'))
        self.assertTrue(_is_punctuation('.'))

        self.assertFalse(_is_punctuation('A'))
        self.assertFalse(_is_punctuation(' '))



      def   lowerCamelCase_       (						self)     ->      Any:





        '''simple docstring'''





        a__:					str      							=     self.get_tokenizer()

        # Example taken from the issue https://github.com/huggingface/tokenizers/issues/340
        self.assertListEqual([tokenizer.tokenize(lowercase) for t in ['Test', '\xad', 'test']]   ,      [['[UNK]'], [], ['[UNK]']])

        if self.test_rust_tokenizer:
          a__:					Dict      							=     self.get_rust_tokenizer()
          self.assertListEqual(
              [rust_tokenizer.tokenize(lowercase) for t in ['Test', '\xad', 'test']]   ,      [['[UNK]'], [], ['[UNK]']])



      def   lowerCamelCase_       (						self)     ->      Any:





        '''simple docstring'''





        for tokenizer, pretrained_name, kwargs in self.tokenizers_list:
          with self.subTest(f'{tokenizer.__class__.__name__} ({pretrained_name})'):
            a__:					str      							=     self.rust_tokenizer_class.from_pretrained(lowercase   ,      **lowercase)

            a__:					List[Any]      							=     f'A, naïve {tokenizer_r.mask_token} AllenNLP sentence.'
            a__:					Optional[Any]      							=     tokenizer_r.encode_plus(
                lowercase   ,      return_attention_mask=lowercase   ,      return_token_type_ids=lowercase   ,      return_offsets_mapping=lowercase   ,      add_special_tokens=lowercase   ,      )

            a__:					str      							=     tokenizer_r.do_lower_case if hasattr(lowercase   ,      'do_lower_case') else False
            a__:					List[Any]      							=     (
                [
                    ((0, 0), tokenizer_r.cls_token),
                    ((0, 1), 'A'),
                    ((1, 2), ','),
                    ((3, 5), 'na'),
                    ((5, 6), '##ï'),
                    ((6, 8), '##ve'),
                    ((9, 15), tokenizer_r.mask_token),
                    ((16, 21), 'Allen'),
                    ((21, 23), '##NL'),
                    ((23, 24), '##P'),
                    ((25, 33), 'sentence'),
                    ((33, 34), '.'),
                    ((0, 0), tokenizer_r.sep_token),
                ]
                if not do_lower_case
                else [
                    ((0, 0), tokenizer_r.cls_token),
                    ((0, 1), 'a'),
                    ((1, 2), ','),
                    ((3, 8), 'naive'),
                    ((9, 15), tokenizer_r.mask_token),
                    ((16, 21), 'allen'),
                    ((21, 23), '##nl'),
                    ((23, 24), '##p'),
                    ((25, 33), 'sentence'),
                    ((33, 34), '.'),
                    ((0, 0), tokenizer_r.sep_token),
                ]
            )

            self.assertEqual(
                [e[1] for e in expected_results]   ,      tokenizer_r.convert_ids_to_tokens(tokens['input_ids']))
            self.assertEqual([e[0] for e in expected_results]   ,      tokens['offset_mapping'])



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





        '''simple docstring'''





        a__:					int      							=     ['的', '人', '有']
        a__:					str      							=     ''.join(lowercase)
        for tokenizer, pretrained_name, kwargs in self.tokenizers_list:
          with self.subTest(f'{tokenizer.__class__.__name__} ({pretrained_name})'):
            a__:					Optional[int]      							=     True
            a__:					Optional[Any]      							=     self.tokenizer_class.from_pretrained(lowercase   ,      **lowercase)
            a__:					List[str]      							=     self.rust_tokenizer_class.from_pretrained(lowercase   ,      **lowercase)

            a__:					Union[str, Any]      							=     tokenizer_p.encode(lowercase   ,      add_special_tokens=lowercase)
            a__:					str      							=     tokenizer_r.encode(lowercase   ,      add_special_tokens=lowercase)

            a__:					Dict      							=     tokenizer_r.convert_ids_to_tokens(lowercase)
            a__:					List[Any]      							=     tokenizer_p.convert_ids_to_tokens(lowercase)

            # it is expected that each Chinese character is not preceded by "##"
            self.assertListEqual(lowercase   ,      lowercase)
            self.assertListEqual(lowercase   ,      lowercase)

            a__:					Optional[int]      							=     False
            a__:					str      							=     self.rust_tokenizer_class.from_pretrained(lowercase   ,      **lowercase)
            a__:					List[Any]      							=     self.tokenizer_class.from_pretrained(lowercase   ,      **lowercase)

            a__:					int      							=     tokenizer_r.encode(lowercase   ,      add_special_tokens=lowercase)
            a__:					Optional[int]      							=     tokenizer_p.encode(lowercase   ,      add_special_tokens=lowercase)

            a__:					Any      							=     tokenizer_r.convert_ids_to_tokens(lowercase)
            a__:					Any      							=     tokenizer_p.convert_ids_to_tokens(lowercase)

            # it is expected that only the first Chinese character is not preceded by "##".
            a__:					Any      							=     [
                f'##{token}' if idx != 0 else token for idx, token in enumerate(lowercase)
            ]
            self.assertListEqual(lowercase   ,      lowercase)
            self.assertListEqual(lowercase   ,      lowercase)



      @slow
      def   lowerCamelCase_       (						self)     ->      Optional[int]:





        '''simple docstring'''





        a__:					Dict      							=     self.tokenizer_class(self.vocab_file   ,      self.word_shape_file   ,      self.word_pronunciation_file)

        a__:					Any      							=     tokenizer.encode('你好'   ,      add_special_tokens=lowercase)
        a__:					List[Any]      							=     tokenizer.encode('你是谁'   ,      add_special_tokens=lowercase)

        a__:					Optional[int]      							=     tokenizer.build_inputs_with_special_tokens(lowercase)
        a__:					Optional[Any]      							=     tokenizer.build_inputs_with_special_tokens(lowercase   ,      lowercase)

        assert encoded_sentence == [1] + text + [2]
        assert encoded_pair == [1] + text + [2] + text_a + [2]



      def   lowerCamelCase_       (						self)     ->      int:





        '''simple docstring'''





        a__:					str      							=     self.get_tokenizers(do_lower_case=lowercase)
        for tokenizer in tokenizers:
          with self.subTest(f'{tokenizer.__class__.__name__}'):
            a__:					List[Any]      							=     '你好，你是谁'
            a__:					Optional[Any]      							=     tokenizer.tokenize(lowercase)
            a__:					Any      							=     tokenizer.convert_tokens_to_ids(lowercase)
            a__:					int      							=     tokenizer.convert_tokens_to_shape_ids(lowercase)
            a__:					str      							=     tokenizer.convert_tokens_to_pronunciation_ids(lowercase)
            a__:					Tuple      							=     tokenizer.prepare_for_model(
                lowercase   ,      lowercase   ,      lowercase   ,      add_special_tokens=lowercase)

            a__:					List[str]      							=     tokenizer.encode_plus(lowercase   ,      add_special_tokens=lowercase)

            self.assertEqual(lowercase   ,      lowercase)



"""simple docstring"""
def 						__a       (     _SCREAMING_SNAKE_CASE       )     ->bool:
  return credit_card_number.startswith(('34', '35', '37', '4', '5', '6')       )







def 						__a       (     _SCREAMING_SNAKE_CASE       )     ->bool:
  a__:					Any      							=     credit_card_number
  a__:					Tuple      							=     0
  a__:					List[str]      							=     len(_SCREAMING_SNAKE_CASE       ) - 2
  for i in range(_SCREAMING_SNAKE_CASE		,					-1		,					-2       ):
    #  double the value of every second digit
    a__:					Tuple      							=     int(cc_number[i]       )
    digit *= 2
    # If doubling of a number results in a two digit number
    # i.e greater than 9(e.g., 6 × 2 = 12),
    # then add the digits of the product (e.g., 12: 1 + 2 = 3, 15: 1 + 5 = 6),
    # to get a single digit number.
    if digit > 9:
      digit %= 10
      digit += 1
    a__:					Optional[Any]      							=     cc_number[:i] + str(_SCREAMING_SNAKE_CASE       ) + cc_number[i + 1 :]
    total += digit

  # Sum up the remaining digits
  for i in range(len(_SCREAMING_SNAKE_CASE       ) - 1		,					-1		,					-2       ):
    total += int(cc_number[i]       )

  return total % 10 == 0







def 						__a       (     _SCREAMING_SNAKE_CASE       )     ->bool:
  a__:					Optional[int]      							=     F'{credit_card_number} is an invalid credit card number because'
  if not credit_card_number.isdigit():
    print(F'{error_message} it has nonnumerical characters.'       )
    return False

  if not 13 <= len(_SCREAMING_SNAKE_CASE       ) <= 16:
    print(F'{error_message} of its length.'       )
    return False

  if not validate_initial_digits(_SCREAMING_SNAKE_CASE       ):
    print(F'{error_message} of its first two digits.'       )
    return False

  if not luhn_validation(_SCREAMING_SNAKE_CASE       ):
    print(F'{error_message} it fails the Luhn check.'       )
    return False

  print(F'{credit_card_number} is a valid credit card number.'       )
  return True


if __name__ == "__main__":
 import doctest

 doctest.testmod()
 validate_credit_card_number('4111111111111111')
 validate_credit_card_number('32323')


