§
    ‚Štjº$  ã                   óÖ   — d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZ  e	¦   «         rddlZ e
¦   «         rddlZ ej        e¦  «        ZddiZd	„ Z G d
„ de¦  «        ZdgZdS )zTokenization class for VITS.é    N)ÚAnyé   )ÚPreTrainedTokenizer)Úis_phonemizer_availableÚis_uroman_availableÚloggingÚ
vocab_filez
vocab.jsonc                 ó`   — t          j        d¦  «        }|                     | ¦  «        }|d u}|S )Nz[^\x00-\x7F])ÚreÚcompileÚsearch)Úinput_stringÚnon_roman_patternÚmatchÚhas_non_romans       úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/vits/tokenization_vits.pyÚhas_non_roman_charactersr   $   s7   € åœ
 ?Ñ3Ô3Ðð ×$Ò$ \Ñ2Ô2€EØ Ð%€MØÐó    c                   ó  ‡ — e Zd ZdZeZddgZ	 	 	 	 	 	 	 d	 dˆ fd
„Zed„ ¦   «         Z	d„ Z
d„ Zd„ Z	 ddedededz  d	eeeeef         f         fd„Zded	ee         fd„Zdee         d	efd„Zd„ Zd„ Zddededz  d	ee         dz  fd„Zˆ xZS )ÚVitsTokenizeraÀ  
    Construct a VITS tokenizer. Also supports MMS-TTS.

    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:
        vocab_file (`str`):
            Path to the vocabulary file.
        language (`str`, *optional*):
            Language identifier.
        add_blank (`bool`, *optional*, defaults to `True`):
            Whether to insert token id 0 in between the other tokens.
        normalize (`bool`, *optional*, defaults to `True`):
            Whether to normalize the input text by removing all casing and punctuation.
        phonemize (`bool`, *optional*, defaults to `True`):
            Whether to convert the input text into phonemes.
        is_uroman (`bool`, *optional*, defaults to `False`):
            Whether the `uroman` Romanizer needs to be applied to the input text prior to tokenizing.
    Ú	input_idsÚattention_maskú<pad>ú<unk>NTFÚreturnc	                 óf  •— t          |d¬¦  «        5 }
t          j        |
¦  «        | _        d d d ¦  «         n# 1 swxY w Y   d„ | j                             ¦   «         D ¦   «         | _        || _        || _        || _        || _	        || _
         t          ¦   «         j        d|||||||ddœ|	¤Ž d S )Núutf-8©Úencodingc                 ó   — i | ]\  }}||“Œ	S © r!   )Ú.0ÚkÚvs      r   ú
<dictcomp>z*VitsTokenizer.__init__.<locals>.<dictcomp>V   s   € Ð>Ð>Ð>¡  A˜˜1Ð>Ð>Ð>r   Únone)Ú	pad_tokenÚ	unk_tokenÚlanguageÚ	add_blankÚ	normalizeÚ	phonemizeÚ	is_uromanÚspecial_tokens_patternr!   )ÚopenÚjsonÚloadÚencoderÚitemsÚdecoderr)   r*   r+   r,   r-   ÚsuperÚ__init__)Úselfr	   r'   r(   r)   r*   r+   r,   r-   ÚkwargsÚvocab_handleÚ	__class__s              €r   r6   zVitsTokenizer.__init__G   s  ø€ õ �* wÐ/Ñ/Ô/ð 	3°<Ýœ9 \Ñ2Ô2ˆDŒLð	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3ð ?Ð>¨¬×);Ò);Ñ)=Ô)=Ð>Ñ>Ô>ˆŒØ ˆŒØ"ˆŒØ"ˆŒØ"ˆŒà"ˆŒà�‰ŒÔð 
	
ØØØØØØØØ#)ð
	
ð 
	
ð ð
	
ð 
	
ð 
	
ð 
	
ð 
	
s   “9¹=Á =c                 ó*   — t          | j        ¦  «        S ©N)Úlenr2   )r7   s    r   Ú
vocab_sizezVitsTokenizer.vocab_sizej   s   € å�4”<Ñ Ô Ð r   c                 ó|   ‡ — ˆ fd„t          ‰ j        ¦  «        D ¦   «         }|                     ‰ j        ¦  «         |S )Nc                 ó<   •— i | ]}‰                      |¦  «        |“ŒS r!   )Úconvert_ids_to_tokens)r"   Úir7   s     €r   r%   z+VitsTokenizer.get_vocab.<locals>.<dictcomp>o   s)   ø€ ÐRÐRÐR°a�×+Ò+¨AÑ.Ô.°ÐRÐRÐRr   )Úranger>   ÚupdateÚadded_tokens_encoder)r7   Úvocabs   ` r   Ú	get_vocabzVitsTokenizer.get_vocabn   s@   ø€ ØRÐRÐRÐR½5ÀÄÑ;QÔ;QÐRÑRÔRˆØ�Š�TÔ.Ñ/Ô/Ð/Øˆr   c                 ó¼  — t          | j                             ¦   «         ¦  «        t          | j                             ¦   «         ¦  «        z   }d}d}|t	          |¦  «        k     rwd}|D ];}|||t	          |¦  «        z   …         |k    r||z  }|t	          |¦  «        z  }d} nŒ<|s"|||                              ¦   «         z  }|dz  }|t	          |¦  «        k     °w|S )zfLowercase the input string, respecting any special token ids that may be part or entirely upper-cased.Ú r   FTé   )Úlistr2   ÚkeysrE   r=   Úlower)r7   r   Úall_vocabularyÚfiltered_textrB   Úfound_matchÚwords          r   Únormalize_textzVitsTokenizer.normalize_texts   sû   € å˜dœl×/Ò/Ñ1Ô1Ñ2Ô2µT¸$Ô:S×:XÒ:XÑ:ZÔ:ZÑ5[Ô5[Ñ[ˆØˆàˆØ•#�lÑ#Ô#Ò#Ð#ØˆKØ&ð ð �Ø  A­¨D©	¬	¡MÐ 1Ô2°dÒ:Ð:Ø! TÑ)�MØ�˜T™œ‘N�AØ"&�KØ�Eð	 ;ð ð Ø ¨a¤×!6Ò!6Ñ!8Ô!8Ñ8�Ø�Q‘�ð •#�lÑ#Ô#Ò#Ð#ð Ðr   c                 óH   — | j         dk    r|                     dd¦  «        }|S )z4Special treatment of characters in certain languagesÚronu   È›u   Å£)r)   Úreplace)r7   Útexts     r   Ú_preprocess_charzVitsTokenizer._preprocess_charˆ   s'   € àŒ=˜EÒ!Ð!Ø—<’<  dÑ+Ô+ˆDØˆr   rV   Úis_split_into_wordsr+   c                 ó€  ‡ — |�|n‰ j         }|r‰                      |¦  «        }‰                      |¦  «        }t          |¦  «        rX‰ j        rQt          ¦   «         st                               d¦  «         n(t          j	        ¦   «         }| 
                    |¦  «        }‰ j        rNt          ¦   «         st          d¦  «        ‚t          j        |ddddd¬¦  «        }t          j        dd	|¦  «        }nG|rEd
                     t%          t'          ˆ fd„|¦  «        ¦  «        ¦  «                             ¦   «         }||fS )a  
        Performs any necessary transformations before tokenization.

        This method should pop the arguments from kwargs and return the remaining `kwargs` as well. We test the
        `kwargs` at the end of the encoding process to be sure all the arguments have been used.

        Args:
            text (`str`):
                The text to prepare.
            is_split_into_words (`bool`, *optional*, defaults to `False`):
                Whether or not the input is already pre-tokenized (e.g., split into words). If set to `True`, the
                tokenizer assumes the input is already split into words (for instance, by splitting it on whitespace)
                which it will tokenize.
            normalize (`bool`, *optional*, defaults to `None`):
                Whether or not to apply punctuation and casing normalization to the text inputs. Typically, VITS is
                trained on lower-cased and un-punctuated text. Hence, normalization is used to ensure that the input
                text consists only of lower-case characters.
            kwargs (`dict[str, Any]`, *optional*):
                Keyword arguments to use for the tokenization.

        Returns:
            `tuple[str, dict[str, Any]]`: The prepared text and the unused kwargs.
        NaC  Text to the tokenizer contains non-Roman characters. To apply the `uroman` pre-processing step automatically, ensure the `uroman` Romanizer is installed with: `pip install uroman` Note `uroman` requires python version >= 3.10Otherwise, apply the Romanizer manually as per the instructions: https://github.com/isi-nlp/uromanzEPlease install the `phonemizer` Python package to use this tokenizer.zen-usÚespeakT)r)   ÚbackendÚstripÚpreserve_punctuationÚwith_stressz\s+ú rI   c                 ó   •— | ‰j         v S r<   )r2   )Úcharr7   s    €r   ú<lambda>z8VitsTokenizer.prepare_for_tokenization.<locals>.<lambda>Ë   s   ø€ ¸TÀTÄ\Ð=Q€ r   )r+   rR   rW   r   r-   r   ÚloggerÚwarningÚurÚUromanÚromanize_stringr,   r   ÚImportErrorÚ
phonemizerr   ÚsubÚjoinrK   Úfilterr\   )r7   rV   rX   r+   r8   rO   Úuromans   `      r   Úprepare_for_tokenizationz&VitsTokenizer.prepare_for_tokenizationŽ   se  ø€ ð4 "+Ð!6�I�I¸D¼Nˆ	àð 	-à×&Ò& tÑ,Ô,ˆDà×-Ò-¨dÑ3Ô3ˆå# MÑ2Ô2ð 
	F°t´~ð 
	FÝ&Ñ(Ô(ð 	FÝ—’ðyñô ð ð õ œ™œ�Ø &× 6Ò 6°}Ñ EÔ E�àŒ>ð 	lÝ*Ñ,Ô,ð kÝ!Ð"iÑjÔjÐjå&Ô0ØØ Ø ØØ%)Ø ðñ ô ˆMõ œF 6¨3°Ñ>Ô>ˆMˆMØð 	làŸGšG¥D­Ð0QÐ0QÐ0QÐ0QÐS`Ñ)aÔ)aÑ$bÔ$bÑcÔc×iÒiÑkÔkˆMà˜fÐ$Ð$r   c                 óž   — t          |¦  «        }| j        r6|                      d¦  «        gt          |¦  «        dz  dz   z  }||ddd…<   |}|S )z]Tokenize a string by inserting the `<pad>` token at the boundary between adjacent characters.r   é   rJ   N)rK   r*   Ú_convert_id_to_tokenr=   )r7   rV   ÚtokensÚintersperseds       r   Ú	_tokenizezVitsTokenizer._tokenizeÏ   s[   € å�d‘”ˆàŒ>ð 	"Ø ×5Ò5°aÑ8Ô8Ð9½SÀ¹[¼[È1¹_ÈqÑ=PÑQˆLØ!'ˆL˜˜˜A˜ÑØ!ˆFàˆr   rr   c                 óv   — | j         rt          |¦  «        dk    r|dd d…         }d                     |¦  «        S )NrJ   rp   rI   )r*   r=   rk   )r7   rr   s     r   Úconvert_tokens_to_stringz&VitsTokenizer.convert_tokens_to_stringÚ   s9   € ØŒ>ð 	"�c &™kœk¨Ašo˜oØ˜A˜D˜q˜D”\ˆFØ�wŠw�v‰ŒÐr   c                 ó<   — || j         v r| j         |         S | j        S )z0Converts a token (str) in an id using the vocab.)r2   Úunk_token_id)r7   Útokens     r   Ú_convert_token_to_idz"VitsTokenizer._convert_token_to_idß   s%   € à�D”LÐ Ð Ø”< Ô&Ð&ØÔ Ð r   c                 ó6   — | j                              |¦  «        S )z=Converts an index (integer) in a token (str) using the vocab.)r4   Úget)r7   Úindexs     r   rq   z"VitsTokenizer._convert_id_to_tokenå   s   € àŒ|×Ò Ñ&Ô&Ð&r   Úsave_directoryÚfilename_prefixc           	      óª  — t           j                             |¦  «        s t                               d|› d�¦  «         d S t           j                             ||r|dz   ndt          d         z   ¦  «        }t          |dd¬¦  «        5 }|                     t          j
        | j        d	d
d¬¦  «        dz   ¦  «         d d d ¦  «         n# 1 swxY w Y   |fS )NzVocabulary path (z) should be a directoryú-rI   r	   Úwr   r   rp   TF)ÚindentÚ	sort_keysÚensure_asciiú
)ÚosÚpathÚisdirrc   Úerrorrk   ÚVOCAB_FILES_NAMESr/   Úwriter0   Údumpsr2   )r7   r~   r   r	   Úfs        r   Úsave_vocabularyzVitsTokenizer.save_vocabularyé   s!  € ÝŒw�}Š}˜^Ñ,Ô,ð 	Ý�LŠLÐT¨^ÐTÐTÐTÑUÔUÐUØˆFå”W—\’\Ø°oÐM˜_¨sÑ2Ð2È2ÕQbÐcoÔQpÑpñ
ô 
ˆ
õ �*˜c¨GÐ4Ñ4Ô4ð 	c¸Ø�GŠG•D”J˜tœ|°AÀÐTYÐZÑZÔZÐ]aÑaÑbÔbÐbð	cð 	cð 	cñ 	cô 	cð 	cð 	cð 	cð 	cð 	cð 	cøøøð 	cð 	cð 	cð 	cð ˆ}Ðs   Â4CÃCÃC)r   r   NTTTF)r   N)FNr<   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r‹   Úvocab_files_namesÚmodel_input_namesr6   Úpropertyr>   rG   rR   rW   ÚstrÚboolÚtupleÚdictr   rn   rK   rt   rv   rz   rq   r�   Ú__classcell__)r:   s   @r   r   r   .   sÅ  ø€ € € € € ðð ð* *ÐØ$Ð&6Ð7Ðð
 ØØØØØØð!
ð 
ð!
ð !
ð !
ð !
ð !
ð !
ðF ð!ð !ñ „Xð!ðð ð ð
ð ð ð*ð ð ð VZð?%ð ?%Øð?%Ø.2ð?%ØGKÈdÁ{ð?%à	ˆs�D˜˜c˜”NÐ"Ô	#ð?%ð ?%ð ?%ð ?%ðB	˜cð 	 d¨3¤ið 	ð 	ð 	ð 	ð¨t°C¬yð ¸Sð ð ð ð ð
!ð !ð !ð'ð 'ð 'ðð ¨cð ÀCÈ$ÁJð ÐZ_Ð`cÔZdÐgkÑZkð ð ð ð ð ð ð ð r   r   )r“   r0   r‡   r   Útypingr   Útokenization_pythonr   Úutilsr   r   r   ri   rm   re   Ú
get_loggerr�   rc   r‹   r   r   Ú__all__r!   r   r   ú<module>r¡      s  ðð #Ð "à €€€Ø 	€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ð Ð à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jð ÐÑÔð ØÐÐÐàÐÑÔð ØÐÐÐà	ˆÔ	˜HÑ	%Ô	%€à! <Ð0Ð ðð ð ðGð Gð Gð Gð GÐ'ñ Gô Gð GðT Ð
€€€r   