






import json
from typing import List, Optional, Tuple

from tokenizers import normalizers

from ...tokenization_utils_fast import PreTrainedTokenizerFast
from ...utils import logging
from .tokenization_bert import BertTokenizer


__snake_case      :      Optional[Any]             =       logging.get_logger(__name__)

__snake_case      :      List[str]             =       {"""vocab_file""": """vocab.txt""", """tokenizer_file""": """tokenizer.json"""}

__snake_case      :      Optional[int]             =       {
    """vocab_file""": {
        """bert-base-uncased""": """https://huggingface.co/bert-base-uncased/resolve/main/vocab.txt""",
        """bert-large-uncased""": """https://huggingface.co/bert-large-uncased/resolve/main/vocab.txt""",
        """bert-base-cased""": """https://huggingface.co/bert-base-cased/resolve/main/vocab.txt""",
        """bert-large-cased""": """https://huggingface.co/bert-large-cased/resolve/main/vocab.txt""",
        """bert-base-multilingual-uncased""": (
            """https://huggingface.co/bert-base-multilingual-uncased/resolve/main/vocab.txt"""
        ),
        """bert-base-multilingual-cased""": """https://huggingface.co/bert-base-multilingual-cased/resolve/main/vocab.txt""",
        """bert-base-chinese""": """https://huggingface.co/bert-base-chinese/resolve/main/vocab.txt""",
        """bert-base-german-cased""": """https://huggingface.co/bert-base-german-cased/resolve/main/vocab.txt""",
        """bert-large-uncased-whole-word-masking""": (
            """https://huggingface.co/bert-large-uncased-whole-word-masking/resolve/main/vocab.txt"""
        ),
        """bert-large-cased-whole-word-masking""": (
            """https://huggingface.co/bert-large-cased-whole-word-masking/resolve/main/vocab.txt"""
        ),
        """bert-large-uncased-whole-word-masking-finetuned-squad""": (
            """https://huggingface.co/bert-large-uncased-whole-word-masking-finetuned-squad/resolve/main/vocab.txt"""
        ),
        """bert-large-cased-whole-word-masking-finetuned-squad""": (
            """https://huggingface.co/bert-large-cased-whole-word-masking-finetuned-squad/resolve/main/vocab.txt"""
        ),
        """bert-base-cased-finetuned-mrpc""": (
            """https://huggingface.co/bert-base-cased-finetuned-mrpc/resolve/main/vocab.txt"""
        ),
        """bert-base-german-dbmdz-cased""": """https://huggingface.co/bert-base-german-dbmdz-cased/resolve/main/vocab.txt""",
        """bert-base-german-dbmdz-uncased""": (
            """https://huggingface.co/bert-base-german-dbmdz-uncased/resolve/main/vocab.txt"""
        ),
        """TurkuNLP/bert-base-finnish-cased-v1""": (
            """https://huggingface.co/TurkuNLP/bert-base-finnish-cased-v1/resolve/main/vocab.txt"""
        ),
        """TurkuNLP/bert-base-finnish-uncased-v1""": (
            """https://huggingface.co/TurkuNLP/bert-base-finnish-uncased-v1/resolve/main/vocab.txt"""
        ),
        """wietsedv/bert-base-dutch-cased""": (
            """https://huggingface.co/wietsedv/bert-base-dutch-cased/resolve/main/vocab.txt"""
        ),
    },
    """tokenizer_file""": {
        """bert-base-uncased""": """https://huggingface.co/bert-base-uncased/resolve/main/tokenizer.json""",
        """bert-large-uncased""": """https://huggingface.co/bert-large-uncased/resolve/main/tokenizer.json""",
        """bert-base-cased""": """https://huggingface.co/bert-base-cased/resolve/main/tokenizer.json""",
        """bert-large-cased""": """https://huggingface.co/bert-large-cased/resolve/main/tokenizer.json""",
        """bert-base-multilingual-uncased""": (
            """https://huggingface.co/bert-base-multilingual-uncased/resolve/main/tokenizer.json"""
        ),
        """bert-base-multilingual-cased""": (
            """https://huggingface.co/bert-base-multilingual-cased/resolve/main/tokenizer.json"""
        ),
        """bert-base-chinese""": """https://huggingface.co/bert-base-chinese/resolve/main/tokenizer.json""",
        """bert-base-german-cased""": """https://huggingface.co/bert-base-german-cased/resolve/main/tokenizer.json""",
        """bert-large-uncased-whole-word-masking""": (
            """https://huggingface.co/bert-large-uncased-whole-word-masking/resolve/main/tokenizer.json"""
        ),
        """bert-large-cased-whole-word-masking""": (
            """https://huggingface.co/bert-large-cased-whole-word-masking/resolve/main/tokenizer.json"""
        ),
        """bert-large-uncased-whole-word-masking-finetuned-squad""": (
            """https://huggingface.co/bert-large-uncased-whole-word-masking-finetuned-squad/resolve/main/tokenizer.json"""
        ),
        """bert-large-cased-whole-word-masking-finetuned-squad""": (
            """https://huggingface.co/bert-large-cased-whole-word-masking-finetuned-squad/resolve/main/tokenizer.json"""
        ),
        """bert-base-cased-finetuned-mrpc""": (
            """https://huggingface.co/bert-base-cased-finetuned-mrpc/resolve/main/tokenizer.json"""
        ),
        """bert-base-german-dbmdz-cased""": (
            """https://huggingface.co/bert-base-german-dbmdz-cased/resolve/main/tokenizer.json"""
        ),
        """bert-base-german-dbmdz-uncased""": (
            """https://huggingface.co/bert-base-german-dbmdz-uncased/resolve/main/tokenizer.json"""
        ),
        """TurkuNLP/bert-base-finnish-cased-v1""": (
            """https://huggingface.co/TurkuNLP/bert-base-finnish-cased-v1/resolve/main/tokenizer.json"""
        ),
        """TurkuNLP/bert-base-finnish-uncased-v1""": (
            """https://huggingface.co/TurkuNLP/bert-base-finnish-uncased-v1/resolve/main/tokenizer.json"""
        ),
        """wietsedv/bert-base-dutch-cased""": (
            """https://huggingface.co/wietsedv/bert-base-dutch-cased/resolve/main/tokenizer.json"""
        ),
    },
}

__snake_case      :      Optional[Any]             =       {
    """bert-base-uncased""": 5_12,
    """bert-large-uncased""": 5_12,
    """bert-base-cased""": 5_12,
    """bert-large-cased""": 5_12,
    """bert-base-multilingual-uncased""": 5_12,
    """bert-base-multilingual-cased""": 5_12,
    """bert-base-chinese""": 5_12,
    """bert-base-german-cased""": 5_12,
    """bert-large-uncased-whole-word-masking""": 5_12,
    """bert-large-cased-whole-word-masking""": 5_12,
    """bert-large-uncased-whole-word-masking-finetuned-squad""": 5_12,
    """bert-large-cased-whole-word-masking-finetuned-squad""": 5_12,
    """bert-base-cased-finetuned-mrpc""": 5_12,
    """bert-base-german-dbmdz-cased""": 5_12,
    """bert-base-german-dbmdz-uncased""": 5_12,
    """TurkuNLP/bert-base-finnish-cased-v1""": 5_12,
    """TurkuNLP/bert-base-finnish-uncased-v1""": 5_12,
    """wietsedv/bert-base-dutch-cased""": 5_12,
}

__snake_case      :      str             =       {
    """bert-base-uncased""": {"""do_lower_case""": True},
    """bert-large-uncased""": {"""do_lower_case""": True},
    """bert-base-cased""": {"""do_lower_case""": False},
    """bert-large-cased""": {"""do_lower_case""": False},
    """bert-base-multilingual-uncased""": {"""do_lower_case""": True},
    """bert-base-multilingual-cased""": {"""do_lower_case""": False},
    """bert-base-chinese""": {"""do_lower_case""": False},
    """bert-base-german-cased""": {"""do_lower_case""": False},
    """bert-large-uncased-whole-word-masking""": {"""do_lower_case""": True},
    """bert-large-cased-whole-word-masking""": {"""do_lower_case""": False},
    """bert-large-uncased-whole-word-masking-finetuned-squad""": {"""do_lower_case""": True},
    """bert-large-cased-whole-word-masking-finetuned-squad""": {"""do_lower_case""": False},
    """bert-base-cased-finetuned-mrpc""": {"""do_lower_case""": False},
    """bert-base-german-dbmdz-cased""": {"""do_lower_case""": False},
    """bert-base-german-dbmdz-uncased""": {"""do_lower_case""": True},
    """TurkuNLP/bert-base-finnish-cased-v1""": {"""do_lower_case""": False},
    """TurkuNLP/bert-base-finnish-uncased-v1""": {"""do_lower_case""": True},
    """wietsedv/bert-base-dutch-cased""": {"""do_lower_case""": False},
}


class       __SCREAMING_SNAKE_CASE   (				__lowercase):
						_SCREAMING_SNAKE_CASE		:    Optional[Any]						=   VOCAB_FILES_NAMES
						_SCREAMING_SNAKE_CASE		:    Any						=   PRETRAINED_VOCAB_FILES_MAP
						_SCREAMING_SNAKE_CASE		:    Optional[int]						=   PRETRAINED_INIT_CONFIGURATION
						_SCREAMING_SNAKE_CASE		:    Any						=   PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
						_SCREAMING_SNAKE_CASE		:    List[Any]						=   BertTokenizer






						def __init__(		self       ,  _UpperCamelCase=None       ,  _UpperCamelCase=None       ,  _UpperCamelCase=True       ,  _UpperCamelCase="[UNK]"       ,  _UpperCamelCase="[SEP]"       ,  _UpperCamelCase="[PAD]"       ,  _UpperCamelCase="[CLS]"       ,  _UpperCamelCase="[MASK]"       ,  _UpperCamelCase=True       ,  _UpperCamelCase=None       ,  **_UpperCamelCase       ,  ):






												"""simple docstring"""
												super().__init__(
												    _lowercase       ,  tokenizer_file=_lowercase       ,  do_lower_case=_lowercase       ,  unk_token=_lowercase       ,  sep_token=_lowercase       ,  pad_token=_lowercase       ,  cls_token=_lowercase       ,  mask_token=_lowercase       ,  tokenize_chinese_chars=_lowercase       ,  strip_accents=_lowercase       ,  **_lowercase       ,  )

												lowerCAmelCase__        =  json.loads(self.backend_tokenizer.normalizer.__getstate__()				)
												if (
												    normalizer_state.get('lowercase'       ,  _lowercase				) != do_lower_case
												    or normalizer_state.get('strip_accents'       ,  _lowercase				) != strip_accents
												    or normalizer_state.get('handle_chinese_chars'       ,  _lowercase				) != tokenize_chinese_chars
												):
																		lowerCAmelCase__        =  getattr(_lowercase       ,  normalizer_state.pop('type'				)				)
																		lowerCAmelCase__        =  do_lower_case
																		lowerCAmelCase__        =  strip_accents
																		lowerCAmelCase__        =  tokenize_chinese_chars
																		lowerCAmelCase__        =  normalizer_class(**_lowercase				)

												lowerCAmelCase__        =  do_lower_case






						def  UpperCamelCase__ (		self       ,  _UpperCamelCase       ,  _UpperCamelCase=None				):






												"""simple docstring"""
												lowerCAmelCase__        =  [self.cls_token_id] + token_ids_a + [self.sep_token_id]

												if token_ids_a:
																		output += token_ids_a + [self.sep_token_id]

												return output






						def  UpperCamelCase__ (		self       ,  _UpperCamelCase       ,  _UpperCamelCase = None				):






												"""simple docstring"""
												lowerCAmelCase__        =  [self.sep_token_id]
												lowerCAmelCase__        =  [self.cls_token_id]
												if token_ids_a is None:
																		return len(cls + token_ids_a + sep				) * [0]
												return len(cls + token_ids_a + sep				) * [0] + len(token_ids_a + sep				) * [1]







						def  UpperCamelCase__ (		self       ,  _UpperCamelCase       ,  _UpperCamelCase = None				):






												"""simple docstring"""
												lowerCAmelCase__        =  self._tokenizer.model.save(_lowercase       ,  name=_lowercase				)
												return tuple(_lowercase				)














def 		_UpperCamelCase				(      UpperCamelCase_    :   str						)					->				str:

						"""simple docstring"""



						return " ".join(input_str.split()[::-1]						)


if __name__ == "__main__":
					import doctest

					doctest.testmod()





