
from collections import deque
from math import floor
from random import random
from time import time
class 	A__   :





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



											"""simple docstring"""


											__lowercase								=					{}





							def 			a__ ( self  :   Dict     , _UpperCAmelCase  :   Tuple     , _UpperCAmelCase  :   List[str]     , _UpperCAmelCase  :   int=1				)						->		Optional[Any]:



											"""simple docstring"""


											if self.graph.get(lowerCamelCase__				):
															if self.graph[u].count([w, v]				) == 0:
																			self.graph[u].append([w, v]				)
											else:
															__lowercase								=					[[w, v]]
											if not self.graph.get(lowerCamelCase__				):
															__lowercase								=					[]





							def 			a__ ( self  :   Any				)						->		Tuple:



											"""simple docstring"""


											return list(self.graph				)





							def 			a__ ( self  :   Tuple     , _UpperCAmelCase  :   Union[str, Any]     , _UpperCAmelCase  :   str				)						->		Any:



											"""simple docstring"""


											if self.graph.get(lowerCamelCase__				):
															for _ in self.graph[u]:
																			if _[1] == v:
																							self.graph[u].remove(lowerCamelCase__				)





							def 			a__ ( self  :   int     , _UpperCAmelCase  :   Optional[Any]=-2     , _UpperCAmelCase  :   Optional[int]=-1				)						->		int:



											"""simple docstring"""


											if s == d:
															return []
											__lowercase								=					[]
											__lowercase								=					[]
											if s == -2:
															__lowercase								=					list(self.graph				)[0]
											stack.append(lowerCamelCase__				)
											visited.append(lowerCamelCase__				)
											__lowercase								=					s

											while True:
															# check if there is any non isolated nodes
															if len(self.graph[s]				) != 0:
																			__lowercase								=					s
																			for node in self.graph[s]:
																							if visited.count(node[1]				) < 1:
																											if node[1] == d:
																															visited.append(lowerCamelCase__				)
																															return visited
																											else:
																															stack.append(node[1]				)
																															visited.append(node[1]				)
																															__lowercase								=					node[1]
																															break

            # check if all the children are visited
															if s == ss:
																			stack.pop()
																			if len(lowerCamelCase__				) != 0:
																							__lowercase								=					stack[len(lowerCamelCase__				) - 1]
															else:
																			__lowercase								=					ss

															# check if se have reached the starting point
															if len(lowerCamelCase__				) == 0:
																			return visited





							def 			a__ ( self  :   List[Any]     , _UpperCAmelCase  :   Any=-1				)						->		str:



											"""simple docstring"""


											if c == -1:
															__lowercase								=					floor(random() * 1_00_00				) + 10
											for i in range(lowerCamelCase__				):
															# every vertex has max 100 edges
															for _ in range(floor(random() * 1_02				) + 1				):
																			__lowercase								=					floor(random() * c				) + 1
																			if n != i:
																							self.add_pair(lowerCamelCase__     , lowerCamelCase__     , 1				)





							def 			a__ ( self  :   Any     , _UpperCAmelCase  :   Union[str, Any]=-2				)						->		Union[str, Any]:



											"""simple docstring"""


											__lowercase								=					deque()
											__lowercase								=					[]
											if s == -2:
															__lowercase								=					list(self.graph				)[0]
											d.append(lowerCamelCase__				)
											visited.append(lowerCamelCase__				)
											while d:
															__lowercase								=					d.popleft()
															if len(self.graph[s]				) != 0:
																			for node in self.graph[s]:
																							if visited.count(node[1]				) < 1:
																											d.append(node[1]				)
																											visited.append(node[1]				)
											return visited





							def 			a__ ( self  :   Dict     , _UpperCAmelCase  :   Union[str, Any]				)						->		Dict:



											"""simple docstring"""


											__lowercase								=					0
											for x in self.graph:
															for y in self.graph[x]:
																			if y[1] == u:
																							count += 1
											return count





							def 			a__ ( self  :   int     , _UpperCAmelCase  :   Union[str, Any]				)						->		int:



											"""simple docstring"""


											return len(self.graph[u]				)





							def 			a__ ( self  :   int     , _UpperCAmelCase  :   Any=-2				)						->		int:



											"""simple docstring"""


											__lowercase								=					[]
											__lowercase								=					[]
											if s == -2:
															__lowercase								=					list(self.graph				)[0]
											stack.append(lowerCamelCase__				)
											visited.append(lowerCamelCase__				)
											__lowercase								=					s
											__lowercase								=					[]

											while True:
															# check if there is any non isolated nodes
															if len(self.graph[s]				) != 0:
																			__lowercase								=					s
																			for node in self.graph[s]:
																							if visited.count(node[1]				) < 1:
																											stack.append(node[1]				)
																											visited.append(node[1]				)
																											__lowercase								=					node[1]
																											break

            # check if all the children are visited
															if s == ss:
																			sorted_nodes.append(stack.pop()				)
																			if len(lowerCamelCase__				) != 0:
																							__lowercase								=					stack[len(lowerCamelCase__				) - 1]
															else:
																			__lowercase								=					ss

															# check if se have reached the starting point
															if len(lowerCamelCase__				) == 0:
																			return sorted_nodes





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



											"""simple docstring"""


											__lowercase								=					[]
											__lowercase								=					[]
											__lowercase								=					list(self.graph				)[0]
											stack.append(lowerCamelCase__				)
											visited.append(lowerCamelCase__				)
											__lowercase								=					-2
											__lowercase								=					[]
											__lowercase								=					s
											__lowercase								=					False
											__lowercase								=					set()

											while True:
															# check if there is any non isolated nodes
															if len(self.graph[s]				) != 0:
																			__lowercase								=					s
																			for node in self.graph[s]:
																							if (
																							    visited.count(node[1]				) > 0
																							    and node[1] != parent
																							    and indirect_parents.count(node[1]				) > 0
																							    and not on_the_way_back
																							):
																											__lowercase								=					len(lowerCamelCase__				) - 1
																											while len_stack >= 0:
																															if stack[len_stack] == node[1]:
																																			anticipating_nodes.add(node[1]				)
																																			break
																															else:
																																			anticipating_nodes.add(stack[len_stack]				)
																																			len_stack -= 1
																							if visited.count(node[1]				) < 1:
																											stack.append(node[1]				)
																											visited.append(node[1]				)
																											__lowercase								=					node[1]
																											break

            # check if all the children are visited
															if s == ss:
																			stack.pop()
																			__lowercase								=					True
																			if len(lowerCamelCase__				) != 0:
																							__lowercase								=					stack[len(lowerCamelCase__				) - 1]
															else:
																			__lowercase								=					False
																			indirect_parents.append(lowerCamelCase__				)
																			__lowercase								=					s
																			__lowercase								=					ss

															# check if se have reached the starting point
															if len(lowerCamelCase__				) == 0:
																			return list(lowerCamelCase__				)





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



											"""simple docstring"""


											__lowercase								=					[]
											__lowercase								=					[]
											__lowercase								=					list(self.graph				)[0]
											stack.append(lowerCamelCase__				)
											visited.append(lowerCamelCase__				)
											__lowercase								=					-2
											__lowercase								=					[]
											__lowercase								=					s
											__lowercase								=					False
											__lowercase								=					set()

											while True:
															# check if there is any non isolated nodes
															if len(self.graph[s]				) != 0:
																			__lowercase								=					s
																			for node in self.graph[s]:
																							if (
																							    visited.count(node[1]				) > 0
																							    and node[1] != parent
																							    and indirect_parents.count(node[1]				) > 0
																							    and not on_the_way_back
																							):
																											__lowercase								=					len(lowerCamelCase__				) - 1
																											while len_stack_minus_one >= 0:
																															if stack[len_stack_minus_one] == node[1]:
																																			anticipating_nodes.add(node[1]				)
																																			break
																															else:
																																			return True
																							if visited.count(node[1]				) < 1:
																											stack.append(node[1]				)
																											visited.append(node[1]				)
																											__lowercase								=					node[1]
																											break

            # check if all the children are visited
															if s == ss:
																			stack.pop()
																			__lowercase								=					True
																			if len(lowerCamelCase__				) != 0:
																							__lowercase								=					stack[len(lowerCamelCase__				) - 1]
															else:
																			__lowercase								=					False
																			indirect_parents.append(lowerCamelCase__				)
																			__lowercase								=					s
																			__lowercase								=					ss

															# check if se have reached the starting point
															if len(lowerCamelCase__				) == 0:
																			return False





							def 			a__ ( self  :   str     , _UpperCAmelCase  :   Tuple=-2     , _UpperCAmelCase  :   Union[str, Any]=-1				)						->		Any:



											"""simple docstring"""


											__lowercase								=					time()
											self.dfs(lowerCamelCase__     , lowerCamelCase__				)
											__lowercase								=					time()
											return end - begin





							def 			a__ ( self  :   List[Any]     , _UpperCAmelCase  :   Dict=-2				)						->		Union[str, Any]:



											"""simple docstring"""


											__lowercase								=					time()
											self.bfs(lowerCamelCase__				)
											__lowercase								=					time()
											return end - begin






class 	A__   :





							def __init__( self  :   Tuple				)						->		int:



											"""simple docstring"""


											__lowercase								=					{}





							def 			a__ ( self  :   int     , _UpperCAmelCase  :   List[str]     , _UpperCAmelCase  :   str     , _UpperCAmelCase  :   Tuple=1				)						->		int:



											"""simple docstring"""


											if self.graph.get(lowerCamelCase__				):
															# if there already is a edge
															if self.graph[u].count([w, v]				) == 0:
																			self.graph[u].append([w, v]				)
											else:
															# if u does not exist
															__lowercase								=					[[w, v]]
											# add the other way
											if self.graph.get(lowerCamelCase__				):
															# if there already is a edge
															if self.graph[v].count([w, u]				) == 0:
																			self.graph[v].append([w, u]				)
											else:
															# if u does not exist
															__lowercase								=					[[w, u]]





							def 			a__ ( self  :   Dict     , _UpperCAmelCase  :   Any     , _UpperCAmelCase  :   Optional[Any]				)						->		Dict:



											"""simple docstring"""


											if self.graph.get(lowerCamelCase__				):
															for _ in self.graph[u]:
																			if _[1] == v:
																							self.graph[u].remove(lowerCamelCase__				)
        # the other way round
											if self.graph.get(lowerCamelCase__				):
															for _ in self.graph[v]:
																			if _[1] == u:
																							self.graph[v].remove(lowerCamelCase__				)





							def 			a__ ( self  :   List[str]     , _UpperCAmelCase  :   List[str]=-2     , _UpperCAmelCase  :   List[str]=-1				)						->		List[Any]:



											"""simple docstring"""


											if s == d:
															return []
											__lowercase								=					[]
											__lowercase								=					[]
											if s == -2:
															__lowercase								=					list(self.graph				)[0]
											stack.append(lowerCamelCase__				)
											visited.append(lowerCamelCase__				)
											__lowercase								=					s

											while True:
															# check if there is any non isolated nodes
															if len(self.graph[s]				) != 0:
																			__lowercase								=					s
																			for node in self.graph[s]:
																							if visited.count(node[1]				) < 1:
																											if node[1] == d:
																															visited.append(lowerCamelCase__				)
																															return visited
																											else:
																															stack.append(node[1]				)
																															visited.append(node[1]				)
																															__lowercase								=					node[1]
																															break

            # check if all the children are visited
															if s == ss:
																			stack.pop()
																			if len(lowerCamelCase__				) != 0:
																							__lowercase								=					stack[len(lowerCamelCase__				) - 1]
															else:
																			__lowercase								=					ss

															# check if se have reached the starting point
															if len(lowerCamelCase__				) == 0:
																			return visited





							def 			a__ ( self  :   Any     , _UpperCAmelCase  :   Dict=-1				)						->		str:



											"""simple docstring"""


											if c == -1:
															__lowercase								=					floor(random() * 1_00_00				) + 10
											for i in range(lowerCamelCase__				):
															# every vertex has max 100 edges
															for _ in range(floor(random() * 1_02				) + 1				):
																			__lowercase								=					floor(random() * c				) + 1
																			if n != i:
																							self.add_pair(lowerCamelCase__     , lowerCamelCase__     , 1				)





							def 			a__ ( self  :   str     , _UpperCAmelCase  :   Union[str, Any]=-2				)						->		Any:



											"""simple docstring"""


											__lowercase								=					deque()
											__lowercase								=					[]
											if s == -2:
															__lowercase								=					list(self.graph				)[0]
											d.append(lowerCamelCase__				)
											visited.append(lowerCamelCase__				)
											while d:
															__lowercase								=					d.popleft()
															if len(self.graph[s]				) != 0:
																			for node in self.graph[s]:
																							if visited.count(node[1]				) < 1:
																											d.append(node[1]				)
																											visited.append(node[1]				)
											return visited





							def 			a__ ( self  :   Union[str, Any]     , _UpperCAmelCase  :   Dict				)						->		Optional[Any]:



											"""simple docstring"""


											return len(self.graph[u]				)





							def 			a__ ( self  :   str				)						->		Any:



											"""simple docstring"""


											__lowercase								=					[]
											__lowercase								=					[]
											__lowercase								=					list(self.graph				)[0]
											stack.append(lowerCamelCase__				)
											visited.append(lowerCamelCase__				)
											__lowercase								=					-2
											__lowercase								=					[]
											__lowercase								=					s
											__lowercase								=					False
											__lowercase								=					set()

											while True:
															# check if there is any non isolated nodes
															if len(self.graph[s]				) != 0:
																			__lowercase								=					s
																			for node in self.graph[s]:
																							if (
																							    visited.count(node[1]				) > 0
																							    and node[1] != parent
																							    and indirect_parents.count(node[1]				) > 0
																							    and not on_the_way_back
																							):
																											__lowercase								=					len(lowerCamelCase__				) - 1
																											while len_stack >= 0:
																															if stack[len_stack] == node[1]:
																																			anticipating_nodes.add(node[1]				)
																																			break
																															else:
																																			anticipating_nodes.add(stack[len_stack]				)
																																			len_stack -= 1
																							if visited.count(node[1]				) < 1:
																											stack.append(node[1]				)
																											visited.append(node[1]				)
																											__lowercase								=					node[1]
																											break

            # check if all the children are visited
															if s == ss:
																			stack.pop()
																			__lowercase								=					True
																			if len(lowerCamelCase__				) != 0:
																							__lowercase								=					stack[len(lowerCamelCase__				) - 1]
															else:
																			__lowercase								=					False
																			indirect_parents.append(lowerCamelCase__				)
																			__lowercase								=					s
																			__lowercase								=					ss

															# check if se have reached the starting point
															if len(lowerCamelCase__				) == 0:
																			return list(lowerCamelCase__				)





							def 			a__ ( self  :   Optional[Any]				)						->		Dict:



											"""simple docstring"""


											__lowercase								=					[]
											__lowercase								=					[]
											__lowercase								=					list(self.graph				)[0]
											stack.append(lowerCamelCase__				)
											visited.append(lowerCamelCase__				)
											__lowercase								=					-2
											__lowercase								=					[]
											__lowercase								=					s
											__lowercase								=					False
											__lowercase								=					set()

											while True:
															# check if there is any non isolated nodes
															if len(self.graph[s]				) != 0:
																			__lowercase								=					s
																			for node in self.graph[s]:
																							if (
																							    visited.count(node[1]				) > 0
																							    and node[1] != parent
																							    and indirect_parents.count(node[1]				) > 0
																							    and not on_the_way_back
																							):
																											__lowercase								=					len(lowerCamelCase__				) - 1
																											while len_stack_minus_one >= 0:
																															if stack[len_stack_minus_one] == node[1]:
																																			anticipating_nodes.add(node[1]				)
																																			break
																															else:
																																			return True
																							if visited.count(node[1]				) < 1:
																											stack.append(node[1]				)
																											visited.append(node[1]				)
																											__lowercase								=					node[1]
																											break

            # check if all the children are visited
															if s == ss:
																			stack.pop()
																			__lowercase								=					True
																			if len(lowerCamelCase__				) != 0:
																							__lowercase								=					stack[len(lowerCamelCase__				) - 1]
															else:
																			__lowercase								=					False
																			indirect_parents.append(lowerCamelCase__				)
																			__lowercase								=					s
																			__lowercase								=					ss

															# check if se have reached the starting point
															if len(lowerCamelCase__				) == 0:
																			return False





							def 			a__ ( self  :   Optional[Any]				)						->		int:



											"""simple docstring"""


											return list(self.graph				)





							def 			a__ ( self  :   int     , _UpperCAmelCase  :   Dict=-2     , _UpperCAmelCase  :   Dict=-1				)						->		List[Any]:



											"""simple docstring"""


											__lowercase								=					time()
											self.dfs(lowerCamelCase__     , lowerCamelCase__				)
											__lowercase								=					time()
											return end - begin





							def 			a__ ( self  :   int     , _UpperCAmelCase  :   Any=-2				)						->		int:



											"""simple docstring"""


											__lowercase								=					time()
											self.bfs(lowerCamelCase__				)
											__lowercase								=					time()
											return end - begin









'''simple docstring'''


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


lowerCamelCase__					=   logging.get_logger(__name__)

lowerCamelCase__					=   {'vocab_file': 'vocab.txt', 'tokenizer_file': 'tokenizer.json'}

lowerCamelCase__					=   {
    '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'
        ),
    },
}

lowerCamelCase__					=   {
    'bert-base-uncased': 512,
    'bert-large-uncased': 512,
    'bert-base-cased': 512,
    'bert-large-cased': 512,
    'bert-base-multilingual-uncased': 512,
    'bert-base-multilingual-cased': 512,
    'bert-base-chinese': 512,
    'bert-base-german-cased': 512,
    'bert-large-uncased-whole-word-masking': 512,
    'bert-large-cased-whole-word-masking': 512,
    'bert-large-uncased-whole-word-masking-finetuned-squad': 512,
    'bert-large-cased-whole-word-masking-finetuned-squad': 512,
    'bert-base-cased-finetuned-mrpc': 512,
    'bert-base-german-dbmdz-cased': 512,
    'bert-base-german-dbmdz-uncased': 512,
    'TurkuNLP/bert-base-finnish-cased-v1': 512,
    'TurkuNLP/bert-base-finnish-uncased-v1': 512,
    'wietsedv/bert-base-dutch-cased': 512,
}

lowerCamelCase__					=   {
    '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 		lowerCAmelCase__	(	UpperCAmelCase__		):
			lowerCAmelCase       :		Union[str, Any]				      =   VOCAB_FILES_NAMES
			lowerCAmelCase       :		Dict				      =   PRETRAINED_VOCAB_FILES_MAP
			lowerCAmelCase       :		Tuple				      =   PRETRAINED_INIT_CONFIGURATION
			lowerCAmelCase       :		Optional[int]				      =   PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
			lowerCAmelCase       :		Any				      =   BertTokenizer




			def __init__(						self     :   int		,     lowerCamelCase__     :   Optional[Any]=None		,     lowerCamelCase__     :   Optional[int]=None		,     lowerCamelCase__     :   str=True		,     lowerCamelCase__     :   Tuple="[UNK]"		,     lowerCamelCase__     :   str="[SEP]"		,     lowerCamelCase__     :   Optional[Any]="[PAD]"		,     lowerCamelCase__     :   List[str]="[CLS]"		,     lowerCamelCase__     :   Union[str, Any]="[MASK]"		,     lowerCamelCase__     :   str=True		,     lowerCamelCase__     :   Dict=None		,     **lowerCamelCase__     :   Union[str, Any]		,     )      ->Tuple:



					'''simple docstring'''







					super().__init__(
					    lowerCamelCase__		,     tokenizer_file=lowerCamelCase__		,     do_lower_case=lowerCamelCase__		,     unk_token=lowerCamelCase__		,     sep_token=lowerCamelCase__		,     pad_token=lowerCamelCase__		,     cls_token=lowerCamelCase__		,     mask_token=lowerCamelCase__		,     tokenize_chinese_chars=lowerCamelCase__		,     strip_accents=lowerCamelCase__		,     **lowerCamelCase__		,     )

					_UpperCAmelCase						:				Optional[Any]	    =					json.loads(self.backend_tokenizer.normalizer.__getstate__()       )
					if (
					    normalizer_state.get("lowercase"		,     lowerCamelCase__       ) != do_lower_case
					    or normalizer_state.get("strip_accents"		,     lowerCamelCase__       ) != strip_accents
					    or normalizer_state.get("handle_chinese_chars"		,     lowerCamelCase__       ) != tokenize_chinese_chars
					):
							_UpperCAmelCase						:				str	    =					getattr(lowerCamelCase__		,     normalizer_state.pop("type"       )       )
							_UpperCAmelCase						:				Optional[Any]	    =					do_lower_case
							_UpperCAmelCase						:				Any	    =					strip_accents
							_UpperCAmelCase						:				List[Any]	    =					tokenize_chinese_chars
							_UpperCAmelCase						:				int	    =					normalizer_class(**lowerCamelCase__       )

					_UpperCAmelCase						:				Union[str, Any]	    =					do_lower_case




			def 							lowerCAmelCase__			(						self     :   List[str]		,     lowerCamelCase__     :   List[str]		,     lowerCamelCase__     :   str=None       )      ->List[Any]:



					'''simple docstring'''







					_UpperCAmelCase						:				List[str]	    =					[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 							lowerCAmelCase__			(						self     :   List[Any]		,     lowerCamelCase__     :   List[int]		,     lowerCamelCase__     :   Optional[List[int]] = None       )      ->List[int]:



					'''simple docstring'''







					_UpperCAmelCase						:				Tuple	    =					[self.sep_token_id]
					_UpperCAmelCase						:				int	    =					[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 							lowerCAmelCase__			(						self     :   List[Any]		,     lowerCamelCase__     :   str		,     lowerCamelCase__     :   Optional[str] = None       )      ->Tuple[str]:



					'''simple docstring'''







					_UpperCAmelCase						:				List[str]	    =					self._tokenizer.model.save(lowerCamelCase__		,     name=lowerCamelCase__       )
					return tuple(lowerCamelCase__       )



