




import json
from typing import List, Optional, Tuple

from tokenizers import normalizers

from ...tokenization_utils import AddedToken
from ...tokenization_utils_fast import PreTrainedTokenizerFast
from ...utils import logging
from .tokenization_mpnet import MPNetTokenizer


_lowerCamelCase					:     Union[str, Any]					  =  logging.get_logger(__name__)

_lowerCamelCase					:     int					  =  {"vocab_file": "vocab.txt", "tokenizer_file": "tokenizer.json"}

_lowerCamelCase					:     Optional[int]					  =  {
    "vocab_file": {
        "microsoft/mpnet-base": "https://huggingface.co/microsoft/mpnet-base/resolve/main/vocab.txt",
    },
    "tokenizer_file": {
        "microsoft/mpnet-base": "https://huggingface.co/microsoft/mpnet-base/resolve/main/tokenizer.json",
    },
}

_lowerCamelCase					:     List[str]					  =  {
    "microsoft/mpnet-base": 5_1_2,
}

_lowerCamelCase					:     Tuple					  =  {
    "microsoft/mpnet-base": {"do_lower_case": True},
}
class 				__snake_case     (_a						):
				lowerCAmelCase__			=   VOCAB_FILES_NAMES
				lowerCAmelCase__			=   PRETRAINED_VOCAB_FILES_MAP
				lowerCAmelCase__			=   PRETRAINED_INIT_CONFIGURATION
				lowerCAmelCase__			=   PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
				lowerCAmelCase__			=   MPNetTokenizer
				lowerCAmelCase__			=   ["input_ids", "attention_mask"]



				def __init__(					self					:						List[str]						,		_UpperCAmelCase					:						Tuple=None						,		_UpperCAmelCase					:						Optional[Any]=None						,		_UpperCAmelCase					:						int=True						,		_UpperCAmelCase					:						Tuple="<s>"						,		_UpperCAmelCase					:						List[Any]="</s>"						,		_UpperCAmelCase					:						Optional[Any]="</s>"						,		_UpperCAmelCase					:						int="<s>"						,		_UpperCAmelCase					:						Optional[int]="[UNK]"						,		_UpperCAmelCase					:						int="<pad>"						,		_UpperCAmelCase					:						Optional[Any]="<mask>"						,		_UpperCAmelCase					:						Any=True						,		_UpperCAmelCase					:						Tuple=None						,		**_UpperCAmelCase					:						Optional[int]						,		)     ->			str:





								'''simple docstring'''




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

								_lowerCAmelCase			:			Optional[int]        =					json.loads(self.backend_tokenizer.normalizer.__getstate__()					)
								if (
								    pre_tok_state.get("""lowercase"""						,		_UpperCAmelCase					) != do_lower_case
								    or pre_tok_state.get("""strip_accents"""						,		_UpperCAmelCase					) != strip_accents
								):
												_lowerCAmelCase			:			Optional[int]        =					getattr(_UpperCAmelCase						,		pre_tok_state.pop("""type"""					)					)
												_lowerCAmelCase			:			Tuple        =					do_lower_case
												_lowerCAmelCase			:			Dict        =					strip_accents
												_lowerCAmelCase			:			Optional[Any]        =					pre_tok_class(**_UpperCAmelCase					)

								_lowerCAmelCase			:			Optional[int]        =					do_lower_case



				@property
				def 					SCREAMING_SNAKE_CASE				(					self					:						Union[str, Any]					)     ->			str:





								'''simple docstring'''




								if self._mask_token is None:
												if self.verbose:
																logger.error("""Using mask_token, but it is not set yet."""					)
												return None
								return str(self._mask_token					)



				@mask_token.setter
				def 					SCREAMING_SNAKE_CASE				(					self					:						Optional[Any]						,		_UpperCAmelCase					:						Tuple					)     ->			Optional[Any]:





								'''simple docstring'''




								_lowerCAmelCase			:			int        =					AddedToken(_UpperCAmelCase						,		lstrip=_UpperCAmelCase						,		rstrip=_UpperCAmelCase					) if isinstance(_UpperCAmelCase						,		_UpperCAmelCase					) else value
								_lowerCAmelCase			:			Optional[Any]        =					value



				def 					SCREAMING_SNAKE_CASE				(					self					:						Dict						,		_UpperCAmelCase					:						Dict						,		_UpperCAmelCase					:						Union[str, Any]=None					)     ->			int:





								'''simple docstring'''




								_lowerCAmelCase			:			Optional[Any]        =					[self.bos_token_id] + token_ids_a + [self.eos_token_id]
								if token_ids_a is None:
												return output

								return output + [self.eos_token_id] + token_ids_a + [self.eos_token_id]



				def 					SCREAMING_SNAKE_CASE				(					self					:						List[Any]						,		_UpperCAmelCase					:						List[int]						,		_UpperCAmelCase					:						Optional[List[int]] = None					)     ->			List[int]:





								'''simple docstring'''




								_lowerCAmelCase			:			Union[str, Any]        =					[self.sep_token_id]
								_lowerCAmelCase			:			Optional[Any]        =					[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 + sep + token_ids_a + sep					) * [0]



				def 					SCREAMING_SNAKE_CASE				(					self					:						Optional[Any]						,		_UpperCAmelCase					:						str						,		_UpperCAmelCase					:						Optional[str] = None					)     ->			Tuple[str]:





								'''simple docstring'''




								_lowerCAmelCase			:			Dict        =					self._tokenizer.model.save(_UpperCAmelCase						,		name=_UpperCAmelCase					)
								return tuple(_UpperCAmelCase					)







from ...configuration_utils import PretrainedConfig
from ...utils import logging


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

_lowerCamelCase					:     str					  =  {
    "google/reformer-crime-and-punishment": (
        "https://huggingface.co/google/reformer-crime-and-punishment/resolve/main/config.json"
    ),
    "google/reformer-enwik8": "https://huggingface.co/google/reformer-enwik8/resolve/main/config.json",
}
class 				__snake_case     (_a						):
				lowerCAmelCase__			=   "reformer"
				lowerCAmelCase__			=   ["past_buckets_states"]
				lowerCAmelCase__			=   {}



				def __init__(					self					:						Optional[int]						,		_UpperCAmelCase					:						str=64						,		_UpperCAmelCase					:						Tuple=["local", "lsh", "local", "lsh", "local", "lsh"]						,		_UpperCAmelCase					:						Optional[int]=1.0						,		_UpperCAmelCase					:						str=True						,		_UpperCAmelCase					:						List[Any]=[64, 64]						,		_UpperCAmelCase					:						str=[64, 192]						,		_UpperCAmelCase					:						List[Any]=0						,		_UpperCAmelCase					:						Optional[Any]=2						,		_UpperCAmelCase					:						Dict=512						,		_UpperCAmelCase					:						Optional[int]=None						,		_UpperCAmelCase					:						Tuple="relu"						,		_UpperCAmelCase					:						Tuple=0.05						,		_UpperCAmelCase					:						int=256						,		_UpperCAmelCase					:						List[str]=0.02						,		_UpperCAmelCase					:						Any=False						,		_UpperCAmelCase					:						Any=1E-12						,		_UpperCAmelCase					:						List[Any]=1						,		_UpperCAmelCase					:						Optional[Any]=0						,		_UpperCAmelCase					:						Union[str, Any]=0.05						,		_UpperCAmelCase					:						int=64						,		_UpperCAmelCase					:						List[str]=64						,		_UpperCAmelCase					:						Any=0.0						,		_UpperCAmelCase					:						Any=1						,		_UpperCAmelCase					:						Optional[Any]=0						,		_UpperCAmelCase					:						Union[str, Any]=4096						,		_UpperCAmelCase					:						Dict=12						,		_UpperCAmelCase					:						int=None						,		_UpperCAmelCase					:						List[Any]=1						,		_UpperCAmelCase					:						Union[str, Any]=0						,		_UpperCAmelCase					:						Any=320						,		_UpperCAmelCase					:						Any=False						,		_UpperCAmelCase					:						List[str]=True						,		_UpperCAmelCase					:						Optional[int]=None						,		**_UpperCAmelCase					:						Tuple						,		)     ->			List[str]:





								'''simple docstring'''




								_lowerCAmelCase			:			Union[str, Any]        =					hash_seed
								_lowerCAmelCase			:			int        =					vocab_size
								_lowerCAmelCase			:			Optional[Any]        =					attention_head_size
								_lowerCAmelCase			:			Dict        =					hidden_size
								_lowerCAmelCase			:			Union[str, Any]        =					num_attention_heads
								_lowerCAmelCase			:			int        =					num_hashes
								_lowerCAmelCase			:			Union[str, Any]        =					len(_UpperCAmelCase					)
								_lowerCAmelCase			:			int        =					tuple(_UpperCAmelCase					) if isinstance(_UpperCAmelCase						,		_UpperCAmelCase					) else num_buckets
								_lowerCAmelCase			:			Union[str, Any]        =					lsh_attn_chunk_length
								_lowerCAmelCase			:			List[str]        =					local_attn_chunk_length
								_lowerCAmelCase			:			int        =					lsh_num_chunks_after
								_lowerCAmelCase			:			Union[str, Any]        =					lsh_num_chunks_before
								_lowerCAmelCase			:			str        =					local_num_chunks_after
								_lowerCAmelCase			:			Dict        =					local_num_chunks_before
								_lowerCAmelCase			:			Any        =					hidden_act
								_lowerCAmelCase			:			List[str]        =					feed_forward_size
								_lowerCAmelCase			:			str        =					hidden_dropout_prob
								_lowerCAmelCase			:			Any        =					lsh_attention_probs_dropout_prob
								_lowerCAmelCase			:			Dict        =					local_attention_probs_dropout_prob
								_lowerCAmelCase			:			Tuple        =					max_position_embeddings
								_lowerCAmelCase			:			Any        =					initializer_range
								_lowerCAmelCase			:			List[str]        =					layer_norm_eps
								_lowerCAmelCase			:			Dict        =					axial_pos_embds
								_lowerCAmelCase			:			Union[str, Any]        =					tuple(_UpperCAmelCase					)
								_lowerCAmelCase			:			int        =					tuple(_UpperCAmelCase					)
								_lowerCAmelCase			:			List[str]        =					axial_norm_std
								_lowerCAmelCase			:			List[str]        =					chunk_size_lm_head
								_lowerCAmelCase			:			int        =					attn_layers
								_lowerCAmelCase			:			List[Any]        =					use_cache
								_lowerCAmelCase			:			Optional[int]        =					classifier_dropout
								super().__init__(
								    pad_token_id=_UpperCAmelCase						,		eos_token_id=_UpperCAmelCase						,		is_decoder=_UpperCAmelCase						,		tie_word_embeddings=_UpperCAmelCase						,		**_UpperCAmelCase						,		)

