§
    ‚Štj/  ã                   óh   — d Z ddlmZmZ ddlmZ  ej        e¦  «        Z G d„ de¦  «        Z	dgZ
dS )z!Tokenization class for Perceiver.é   )Ú
AddedTokenÚPreTrainedTokenizer)Úloggingc            
       óR  ‡ — e Zd ZdZddgZ	 	 	 	 	 	 	 d	 dˆ fd„Zdeeef         fd„Z	e
d„ ¦   «         Z	 d dee         dee         dz  dedee         fˆ fd„Z	 d!dee         dee         dz  dee         fd„Zdedee         fd„Zd„ Zd„ Zd„ Zd!dededz  dee         fd„Zˆ xZS )"ÚPerceiverTokenizeraS  
    Construct a Perceiver tokenizer. The Perceiver simply uses raw bytes utf-8 encoding.

    This tokenizer inherits from [`PreTrainedTokenizer`] which contains most of the main methods. Users should refer to
    this superclass for more information regarding those methods.

    Args:
        pad_token (`str`, *optional*, defaults to `"[PAD]"`):
            The token used for padding, for example when batching sequences of different lengths.
        bos_token (`str`, *optional*, defaults to `"[BOS]"`):
            The BOS token (reserved in the vocab, but not actually used).
        eos_token (`str`, *optional*, defaults to `"[EOS]"`):
            The end of sequence token (reserved in the vocab, but not actually used).

            <Tip>

            When building a sequence using special tokens, this is not the token that is used for the end of sequence.
            The token used is the `sep_token`.

            </Tip>

        mask_token (`str`, *optional*, defaults to `"[MASK]"`):
            The MASK token, useful for masked language modeling.
        cls_token (`str`, *optional*, defaults to `"[CLS]"`):
            The CLS token (reserved in the vocab, but not actually used).
        sep_token (`str`, *optional*, defaults to `"[SEP]"`):
            The separator token, which is used when building a sequence from two sequences.

    Ú	input_idsÚattention_maskú[PAD]ú[BOS]ú[EOS]ú[MASK]ú[CLS]ú[SEP]é   ÚreturnNc                 ó’  •— t          |t          ¦  «        rt          |dd¬¦  «        n|}t          |t          ¦  «        rt          |dd¬¦  «        n|}t          |t          ¦  «        rt          |dd¬¦  «        n|}t          |t          ¦  «        rt          |dd¬¦  «        n|}t          |t          ¦  «        rt          |dd¬¦  «        n|}t          |t          ¦  «        rt          |dd¬¦  «        n|}d| _        ||||||dœ| _        t          | j        ¦  «        | _         t          ¦   «         j        d|||||||dœ|¤Ž d S )NF)ÚlstripÚrstripé   )é    é   é   r   é   é   )Ú	pad_tokenÚ	bos_tokenÚ	eos_tokenÚ
mask_tokenÚ	cls_tokenÚ	sep_tokenÚmodel_max_length© )	Ú
isinstanceÚstrr   Ú_utf_vocab_sizeÚ_added_tokens_decoderÚlenÚ_num_special_tokensÚsuperÚ__init__)
Úselfr   r   r   r   r   r    r!   ÚkwargsÚ	__class__s
            €úr/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/perceiver/tokenization_perceiver.pyr*   zPerceiverTokenizer.__init__8   s—  ø€ õ JTÐT]Õ_bÑIcÔIcÐr•J˜y°¸uÐEÑEÔEÐEÐirˆ	ÝISÐT]Õ_bÑIcÔIcÐr•J˜y°¸uÐEÑEÔEÐEÐirˆ	ÝISÐT]Õ_bÑIcÔIcÐr•J˜y°¸uÐEÑEÔEÐEÐirˆ	ÝKUÐV`ÕbeÑKfÔKfÐv•Z 
°5ÀÐGÑGÔGÐGÐlvˆ
ÝISÐT]Õ_bÑIcÔIcÐr•J˜y°¸uÐEÑEÔEÐEÐirˆ	ÝISÐT]Õ_bÑIcÔIcÐr•J˜y°¸uÐEÑEÔEÐEÐirˆ	à#ˆÔð ØØØØØð6
ð 6
ˆÔ"õ $' tÔ'AÑ#BÔ#BˆÔ Ø�‰ŒÔð 		
ØØØØ!ØØØ-ð		
ð 		
ð ð		
ð 		
ð 		
ð 		
ð 		
ó    c                 ó¤   — i }t          | j        ¦  «        D ]}t          |¦  «        }|| j        z   ||<   Œ|                     | j        ¦  «         |S ©N)Úranger%   Úchrr(   ÚupdateÚadded_tokens_encoder)r+   ÚvocabÚiÚtokens       r.   Ú	get_vocabzPerceiverTokenizer.get_vocaba   sY   € ØˆÝ�tÔ+Ñ,Ô,ð 	8ð 	8ˆAÝ˜‘F”FˆEØ˜tÔ7Ñ7ˆE�%‰LˆLØ�Š�TÔ.Ñ/Ô/Ð/Øˆr/   c                 ó   — | j         S r1   )r%   )r+   s    r.   Ú
vocab_sizezPerceiverTokenizer.vocab_sizei   s   € àÔ#Ð#r/   FÚtoken_ids_0Útoken_ids_1Úalready_has_special_tokensc                 óð   •— |r$t          ¦   «                              ||d¬¦  «        S |€dgdgt          |¦  «        z  z   dgz   S dgdgt          |¦  «        z  z   dgz   dgt          |¦  «        z  z   dgz   S )aÄ  
        Retrieve sequence ids from a token list that has no special tokens added. This method is called when adding
        special tokens using the tokenizer `prepare_for_model` method.

        Args:
            token_ids_0 (`list[int]`):
                List of IDs.
            token_ids_1 (`list[int]`, *optional*):
                Optional second list of IDs for sequence pairs.
            already_has_special_tokens (`bool`, *optional*, defaults to `False`):
                Whether or not the token list is already formatted with special tokens for the model.

        Returns:
            `list[int]`: A list of integers in the range [0, 1]: 1 for a special token, 0 for a sequence token.
        T)r<   r=   r>   Nr   r   )r)   Úget_special_tokens_maskr'   )r+   r<   r=   r>   r-   s       €r.   r@   z*PerceiverTokenizer.get_special_tokens_maskm   s¡   ø€ ð$ &ð 	Ý‘7”7×2Ò2Ø'°[Ð]að 3ñ ô ð ð
 ÐØ�3˜!˜�s ;Ñ/Ô/Ñ/Ñ/°1°#Ñ5Ð5Øˆs�q�c�C Ñ,Ô,Ñ,Ñ-°°Ñ3¸°s½SÀÑ=MÔ=MÑ7MÑNÐRSÐQTÑTÐTr/   c                 ón   — |€| j         g|z   | j        gz   S | j         g|z   | j        gz   |z   | j        gz   S )af  
        Build model inputs from a sequence or a pair of sequence for sequence classification tasks. A sequence has the
        following format:

        - single sequence: `[CLS] X [SEP]`
        - pair of sequences: `[CLS] A [SEP] B [SEP]`

        Args:
            token_ids_0 (`list[int]`):
                List of IDs to which the special tokens will be added.
            token_ids_1 (`list[int]`, *optional*):
                Optional second list of IDs for sequence pairs.

        Returns:
            `list[int]`: List of [input IDs](../glossary#input-ids) with the appropriate special tokens.
        )Úcls_token_idÚsep_token_id)r+   r<   r=   s      r.   Ú build_inputs_with_special_tokensz3PerceiverTokenizer.build_inputs_with_special_tokens‰   sS   € ð& ÐØÔ%Ð&¨Ñ4¸Ô8IÐ7JÑJÐJàÔ%Ð&¨Ñ4¸Ô8IÐ7JÑJÈ[ÑXÐ\`Ô\mÐ[nÑnÐnr/   Útextc                 óD   — d„ |                      d¦  «        D ¦   «         }|S )zPTake as input a string and return a list of strings (tokens) for words/sub-wordsc                 ó,   — g | ]}t          |¦  «        ‘ŒS r"   )r3   )Ú.0r7   s     r.   ú
<listcomp>z0PerceiverTokenizer._tokenize.<locals>.<listcomp>£   s   € Ð7Ð7Ð7˜Q•#�a‘&”&Ð7Ð7Ð7r/   úutf-8)Úencode)r+   rE   Útokenss      r.   Ú	_tokenizezPerceiverTokenizer._tokenize¡   s&   € à7Ð7 $§+¢+¨gÑ"6Ô"6Ð7Ñ7Ô7ˆØˆr/   c                 ój   — t          |¦  «        dk    r| j        }nt          |¦  «        | j        z   }|S )z0Converts a token (str) in an id using the vocab.r   )r'   Úunk_token_idÚordr(   )r+   r8   Útoken_ids      r.   Ú_convert_token_to_idz'PerceiverTokenizer._convert_token_to_id¦   s3   € åˆu‰:Œ:˜Š?ˆ?ØÔ(ˆHˆHå˜5‘z”z DÔ$<Ñ<ˆHØˆr/   c                 ó4   — t          || j        z
  ¦  «        }|S )z=Converts an index (integer) in a token (str) using the vocab.)r3   r(   )r+   Úindexr8   s      r.   Ú_convert_id_to_tokenz'PerceiverTokenizer._convert_id_to_token®   s   € å�E˜DÔ4Ñ4Ñ5Ô5ˆØˆr/   c                 óÞ   — d}|D ]P}|| j         v r#t          |¦  «                             d¦  «        }nt          t	          |¦  «        g¦  «        }||z  }ŒQ|                     dd¬¦  «        }|S )z:Converts a sequence of tokens (string) in a single string.r/   rJ   Úreplace)Úerrors)Ú_added_tokens_encoderr$   rK   ÚbytesrP   Údecode)r+   rL   Úbstringr8   Ú
tok_stringÚstrings         r.   Úconvert_tokens_to_stringz+PerceiverTokenizer.convert_tokens_to_string´   sz   € àˆØð 	"ð 	"ˆEØ˜Ô2Ð2Ð2Ý  ™ZœZ×.Ò.¨wÑ7Ô7�
�
å"¥C¨¡J¤J <Ñ0Ô0�
Ø�zÑ!ˆGˆGØ—’ °	�Ñ:Ô:ˆØˆr/   Úsave_directoryÚfilename_prefixc                 ó   — dS )Nr"   r"   )r+   r`   ra   s      r.   Úsave_vocabularyz"PerceiverTokenizer.save_vocabularyÁ   s   € Øˆrr/   )r
   r   r   r   r   r   r   )r   N)NFr1   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úmodel_input_namesr*   Údictr$   Úintr9   Úpropertyr;   ÚlistÚboolr@   rD   rM   rR   rU   r_   Útuplerc   Ú__classcell__)r-   s   @r.   r   r      sø  ø€ € € € € ðð ð< %Ð&6Ð7Ðð ØØØØØØð'
ð 
ð'
ð '
ð '
ð '
ð '
ð '
ðR˜4  S œ>ð ð ð ð ð ð$ð $ñ „Xð$ð puðUð UØ œ9ðUØ37¸´9¸tÑ3CðUØhlðUà	ˆcŒðUð Uð Uð Uð Uð Uð: GKðoð oØ œ9ðoØ37¸´9¸tÑ3Cðoà	ˆcŒðoð oð oð oð0˜cð  d¨3¤ið ð ð ð ð
ð ð ðð ð ð
ð 
ð 
ðð ¨cð ÀCÈ$ÁJð ÐZ_Ð`cÔZdð ð ð ð ð ð ð ð r/   r   N)rg   Útokenization_pythonr   r   Úutilsr   Ú
get_loggerrd   Úloggerr   Ú__all__r"   r/   r.   ú<module>ru      s�   ðð (Ð 'à BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ Ð Ð Ð Ð Ð ð 
ˆÔ	˜HÑ	%Ô	%€ðkð kð kð kð kÐ,ñ kô kð kð\  Ð
 €€€r/   