
import json
from typing import List, Optional, Tuple

from tokenizers import normalizers

from ...tokenization_utils_fast import PreTrainedTokenizerFast
from .tokenization_electra import ElectraTokenizer


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

lowercase    :   int		       =				{
    'vocab_file': {
        'google/electra-small-generator': (
            'https://huggingface.co/google/electra-small-generator/resolve/main/vocab.txt'
        ),
        'google/electra-base-generator': 'https://huggingface.co/google/electra-base-generator/resolve/main/vocab.txt',
        'google/electra-large-generator': (
            'https://huggingface.co/google/electra-large-generator/resolve/main/vocab.txt'
        ),
        'google/electra-small-discriminator': (
            'https://huggingface.co/google/electra-small-discriminator/resolve/main/vocab.txt'
        ),
        'google/electra-base-discriminator': (
            'https://huggingface.co/google/electra-base-discriminator/resolve/main/vocab.txt'
        ),
        'google/electra-large-discriminator': (
            'https://huggingface.co/google/electra-large-discriminator/resolve/main/vocab.txt'
        ),
    },
    'tokenizer_file': {
        'google/electra-small-generator': (
            'https://huggingface.co/google/electra-small-generator/resolve/main/tokenizer.json'
        ),
        'google/electra-base-generator': (
            'https://huggingface.co/google/electra-base-generator/resolve/main/tokenizer.json'
        ),
        'google/electra-large-generator': (
            'https://huggingface.co/google/electra-large-generator/resolve/main/tokenizer.json'
        ),
        'google/electra-small-discriminator': (
            'https://huggingface.co/google/electra-small-discriminator/resolve/main/tokenizer.json'
        ),
        'google/electra-base-discriminator': (
            'https://huggingface.co/google/electra-base-discriminator/resolve/main/tokenizer.json'
        ),
        'google/electra-large-discriminator': (
            'https://huggingface.co/google/electra-large-discriminator/resolve/main/tokenizer.json'
        ),
    },
}

lowercase    :   Tuple		       =				{
    'google/electra-small-generator': 512,
    'google/electra-base-generator': 512,
    'google/electra-large-generator': 512,
    'google/electra-small-discriminator': 512,
    'google/electra-base-discriminator': 512,
    'google/electra-large-discriminator': 512,
}

lowercase    :   Union[str, Any]		       =				{
    'google/electra-small-generator': {'do_lower_case': True},
    'google/electra-base-generator': {'do_lower_case': True},
    'google/electra-large-generator': {'do_lower_case': True},
    'google/electra-small-discriminator': {'do_lower_case': True},
    'google/electra-base-discriminator': {'do_lower_case': True},
    'google/electra-large-discriminator': {'do_lower_case': True},
}

class __snake_case						( _lowerCamelCase	):
    _a						:		Union[str, Any]=							VOCAB_FILES_NAMES
    _a						:		Optional[Any]=							PRETRAINED_VOCAB_FILES_MAP
    _a						:		Optional[int]=							PRETRAINED_INIT_CONFIGURATION
    _a						:		Tuple=							PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
    _a						:		Dict=							ElectraTokenizer
    def __init__(    self						,snake_case=None						,snake_case=None						,snake_case=True						,snake_case="[UNK]"						,snake_case="[SEP]"						,snake_case="[PAD]"						,snake_case="[CLS]"						,snake_case="[MASK]"						,snake_case=True						,snake_case=None						,**snake_case						,):



           '''simple docstring'''







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

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

           lowercase				:	Optional[int]			      = do_lower_case
    def  _SCREAMING_SNAKE_CASE			(    self						,snake_case						,snake_case=None ):



           '''simple docstring'''







           lowercase				:	Any			      = [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  _SCREAMING_SNAKE_CASE			(    self						,snake_case						,snake_case = None ):



           '''simple docstring'''







           lowercase				:	int			      = [self.sep_token_id]
           lowercase				:	Tuple			      = [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  _SCREAMING_SNAKE_CASE			(    self						,snake_case						,snake_case = None ):



           '''simple docstring'''







           lowercase				:	Optional[Any]			      = self._tokenizer.model.save(__UpperCamelCase						,name=__UpperCamelCase )
           return tuple(__UpperCamelCase )





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


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

__snake_case     :Tuple			       ={
    'transfo-xl-wt103': 'https://huggingface.co/transfo-xl-wt103/resolve/main/config.json',
}



class        lowerCAmelCase__					(  _lowerCamelCase       ):
				A_   :     Any								=     'transfo-xl'
				A_   :     Dict								=     ['mems']
				A_   :     int								=     {
				    'n_token': 'vocab_size',
				    'hidden_size': 'd_model',
				    'num_attention_heads': 'n_head',
				    'num_hidden_layers': 'n_layer',
				}


				def __init__(							self      :  Optional[Any]						, __UpperCamelCase      :  str=267_735						, __UpperCamelCase      :  int=[20_000, 40_000, 200_000]						, __UpperCamelCase      :  List[str]=1_024						, __UpperCamelCase      :  Union[str, Any]=1_024						, __UpperCamelCase      :  Optional[Any]=16						, __UpperCamelCase      :  Dict=64						, __UpperCamelCase      :  Optional[Any]=4_096						, __UpperCamelCase      :  int=4						, __UpperCamelCase      :  List[str]=False						, __UpperCamelCase      :  Optional[int]=18						, __UpperCamelCase      :  int=1_600						, __UpperCamelCase      :  Dict=1_000						, __UpperCamelCase      :  Optional[Any]=True						, __UpperCamelCase      :  Optional[Any]=True						, __UpperCamelCase      :  Optional[Any]=0						, __UpperCamelCase      :  Any=-1						, __UpperCamelCase      :  Any=True						, __UpperCamelCase      :  List[Any]=0.1						, __UpperCamelCase      :  str=0.0						, __UpperCamelCase      :  Dict=True						, __UpperCamelCase      :  int="normal"						, __UpperCamelCase      :  List[Any]=0.0_1						, __UpperCamelCase      :  str=0.0_1						, __UpperCamelCase      :  Any=0.0_2						, __UpperCamelCase      :  str=1e-5						, __UpperCamelCase      :  Optional[int]=0						, **__UpperCamelCase      :  Any						, )		->     int:
											A      						=    vocab_size
											A      						=    []
											self.cutoffs.extend(__UpperCamelCase       )
											if proj_share_all_but_first:
																		A      						=    [False] + [True] * len(self.cutoffs       )
											else:
																		A      						=    [False] + [False] * len(self.cutoffs       )
											A      						=    d_model
											A      						=    d_embed
											A      						=    d_head
											A      						=    d_inner
											A      						=    div_val
											A      						=    pre_lnorm
											A      						=    n_layer
											A      						=    n_head
											A      						=    mem_len
											A      						=    same_length
											A      						=    attn_type
											A      						=    clamp_len
											A      						=    sample_softmax
											A      						=    adaptive
											A      						=    dropout
											A      						=    dropatt
											A      						=    untie_r
											A      						=    init
											A      						=    init_range
											A      						=    proj_init_std
											A      						=    init_std
											A      						=    layer_norm_epsilon
											super().__init__(eos_token_id=__UpperCamelCase						, **__UpperCamelCase       )


				@property
				def __UpperCamelCase						(							self      :  Any       )		->     Optional[int]:
											# Message copied from Transformer-XL documentation
											logger.info(f'''The model {self.model_type} is one of the few models that has no sequence length limit.'''       )
											return -1


				@max_position_embeddings.setter
				def __UpperCamelCase						(							self      :  List[Any]						, __UpperCamelCase      :  List[Any]       )		->     List[Any]:
											# Message copied from Transformer-XL documentation
											raise NotImplementedError(
											    f'''The model {self.model_type} is one of the few models that has no sequence length limit.'''       )