Ë
    ÛÓ^jÖ"  ã                   óT   — d Z ddlZej                  dk\  rddlZnddlZ G d„ d«      Zy)z"English Normalizer class for CLVP.é    N)é   é   c                   ó¸   — e Zd Zd„ Zdedefd„Zdedefd„Zdedefd„Zdedefd	„Z	dedefd
„Z
dedefd„Zdedefd„Zdedefd„Zdedefd„Zdedefd„Zd„ Zy)ÚEnglishNormalizerc                 óÈ   — dD �cg c]1  }t        j                  d|d   z  t         j                  «      |d   f‘Œ3 c}| _        g d¢| _        g d¢| _        g d¢| _        y c c}w )N))ÚmrsÚmisess)ÚmrÚmister)ÚdrÚdoctor)ÚstÚsaint)ÚcoÚcompany)ÚjrÚjunior)ÚmajÚmajor)ÚgenÚgeneral)ÚdrsÚdoctors)ÚrevÚreverend)ÚltÚ
lieutenant)ÚhonÚ	honorable)ÚsgtÚsergeant)ÚcaptÚcaptain)ÚesqÚesquire)ÚltdÚlimited)ÚcolÚcolonel)ÚftÚfortz\b%s\.r   é   )
Ú ÚoneÚtwoÚthreeÚfourÚfiveÚsixÚsevenÚeightÚnine)
ÚtenÚelevenÚtwelveÚthirteenÚfourteenÚfifteenÚsixteenÚ	seventeenÚeighteenÚnineteen)
r-   r-   ÚtwentyÚthirtyÚfortyÚfiftyÚsixtyÚseventyÚeightyÚninety)ÚreÚcompileÚ
IGNORECASEÚ_abbreviationsÚonesÚteensÚtens)ÚselfÚxs     úu/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/clvp/number_normalizer.pyÚ__init__zEnglishNormalizer.__init__   sc   € ðö
àô �Z‰Z˜
 Q q¡TÑ)¬2¯=©=Ó9¸1¸Q¹4Ò@ò
ˆÔò0 aˆŒ	ò
ˆŒ
ò kˆ�	ùòK
s   …6AÚnumÚreturnc                 ó  — |dk(  ry|dk  rd| j                  t        |«      «      z   S |dk  r| j                  |   S |dk  r| j                  |dz
     S |dk  r6| j                  |dz     |dz  dk7  rd| j                  |dz  «      z   z   S dz   S |d	k  r9| j                  |dz     d
z   |dz  dk7  rd| j                  |dz  «      z   z   S dz   S |dk  r;| j                  |d	z  «      dz   |d	z  dk7  rd| j                  |d	z  «      z   z   S dz   S |dk  r;| j                  |dz  «      dz   |dz  dk7  rd| j                  |dz  «      z   z   S dz   S |dk  r;| j                  |dz  «      dz   |dz  dk7  rd| j                  |dz  «      z   z   S dz   S |dk  r;| j                  |dz  «      dz   |dz  dk7  rd| j                  |dz  «      z   z   S dz   S |dk  r;| j                  |dz  «      dz   |dz  dk7  rd| j                  |dz  «      z   z   S dz   S y)ax  
        Converts numbers(`int`) to words(`str`).

        Please note that it only supports upto - "'nine hundred ninety-nine quadrillion, nine hundred ninety-nine
        trillion, nine hundred ninety-nine billion, nine hundred ninety-nine million, nine hundred ninety-nine
        thousand, nine hundred ninety-nine'" or `number_to_words(999_999_999_999_999_999)`.
        r   Úzerozminus é
   é   éd   ú-r-   éè  ú hundredú i@B z	 thousandú, i Êš;z millionl    J)£z billionl     �Iú5 z	 trillionl     ÈNÎZoz quadrillionznumber out of range)Únumber_to_wordsÚabsrM   rN   rO   )rP   rT   s     rR   r`   z!EnglishNormalizer.number_to_wordsE   s	  € ð �!Š8ØØ�1ŠWØ˜d×2Ñ2´3°s³8Ó<Ñ<Ð<Ø�2ŠXØ—9‘9˜S‘>Ð!Ø�2ŠXØ—:‘:˜c B™hÑ'Ð'Ø�3ŠYØ—9‘9˜S B™YÑ'ÐSVÐY[ÑS[Ð_`ÒS`¨3°×1EÑ1EÀcÈBÁhÓ1OÑ+OÑiÐiÐfhÑiÐiØ�4ŠZà—	‘	˜# ™*Ñ%¨
Ñ2Ð_bÐehÑ_hÐlmÒ_m°c¸D×<PÑ<PÐQTÐWZÑQZÓ<[Ñ6[ÑvðØsuÑvðð �9Š_à×$Ñ$ S¨D¡[Ó1Øñà>AÀD¹jÈAºo�4˜$×.Ñ.¨s°T©zÓ:Ñ:ñWðð TVñWðð
 �=Ò à×$Ñ$ S¨IÑ%5Ó6ØñàCFÈÁ?ÐVWÒCW�4˜$×.Ñ.¨s°Y©Ó?Ñ?ñaðð ^`ñaðð
 Ð$Ò$à×$Ñ$ S¨MÑ%9Ó:ØñàGJÈ]ÑGZÐ^_ÒG_�4˜$×.Ñ.¨s°]Ñ/BÓCÑCñiðð fhñiðð
 Ð(Ò(à×$Ñ$ SÐ,=Ñ%=Ó>ØñàKNÐQbÑKbÐfgÒKg�4˜$×.Ñ.¨sÐ5FÑ/FÓGÑGñqðð npñqðð
 Ð,Ò,à×$Ñ$ SÐ,AÑ%AÓBØ ñ!ð Ð2Ñ2°aÒ7ð ˜4×/Ñ/°Ð6KÑ0KÓLÑLñðð ñðð )ó    Útextc                 óD   — |j                  dd«      j                  d«      S )z+
        Converts unicode to ascii
        ÚasciiÚignorezutf-8)ÚencodeÚdecode©rP   rc   s     rR   Úconvert_to_asciiz"EnglishNormalizer.convert_to_ascii€   s    € ð �{‰{˜7 HÓ-×4Ñ4°WÓ=Ð=rb   Úmc                 ól  — |j                  d«      }|j                  d«      }t        |«      dkD  r|dz   S |d   rt        |d   «      nd}t        |«      dkD  r|d   rt        |d   «      nd}|r!|r|dk(  rdnd}|dk(  rdnd	}|›d
|›d|›d
|›�S |r|dk(  rdnd}|›d
|›�S |r|dk(  rdnd	}|›d
|›�S y)zZ
        This method is used to expand numerical dollar values into spoken words.
        r,   ú.é   z dollarsr   ÚdollarÚdollarsÚcentÚcentsr^   r_   zzero dollars)ÚgroupÚsplitÚlenÚint)rP   rk   ÚmatchÚpartsrp   rr   Údollar_unitÚ	cent_units           rR   Ú_expand_dollarsz!EnglishNormalizer._expand_dollars†   sÐ   € ð —‘˜“
ˆØ—‘˜CÓ ˆÜˆu‹:˜Š>Ø˜:Ñ%Ð%à#(¨¢8”#�e˜A‘h”-°ˆÜ!$ U£¨a¢°E¸!²H”�E˜!‘H”À!ˆÙ‘uØ&-°¢l™(¸	ˆKØ"'¨1¢*™°'ˆIÚ%,ªkº5Á)ÐLÐLÙØ&-°¢l™(¸	ˆKÚ%¡{Ð3Ð3ÙØ"'¨1¢*™°'ˆIÚ#¡YÐ/Ð/à!rb   c                 óD   — |j                  d«      j                  dd«      S )zF
        This method is used to remove commas from sentences.
        r,   ú,r-   ©rs   Úreplace©rP   rk   s     rR   Ú_remove_commasz EnglishNormalizer._remove_commasž   s   € ð �w‰w�q‹z×!Ñ! # rÓ*Ð*rb   c                 óD   — |j                  d«      j                  dd«      S )zO
        This method is used to expand '.' into spoken word ' point '.
        r,   rm   z point r~   r€   s     rR   Ú_expand_decimal_pointz'EnglishNormalizer._expand_decimal_point¤   s   € ð �w‰w�q‹z×!Ñ! # yÓ1Ð1rb   c                 óÀ   — ddddœ}t        |j                  d«      dd «      }|dz  d	k\  r|dz  d
k  rd}n|j                  |d	z  d«      }| j                  |«      |z   S )z`
        This method is used to expand ordinals such as '1st', '2nd' into spoken words.
        r   ÚndÚrd)r,   rn   r   r   NéþÿÿÿrZ   rX   rY   Úth)rv   rs   Úgetr`   )rP   rT   Úordinal_suffixesÚsuffixs       rR   Ú_expand_ordinalz!EnglishNormalizer._expand_ordinalª   sp   € ð  $¨°Ñ6Ðä�#—)‘)˜A“,˜s Ð#Ó$ˆØ�‰9˜Š?˜s S™y¨BšØ‰Fà%×)Ñ)¨#°©(°DÓ9ˆFØ×#Ñ# CÓ(¨6Ñ1Ð1rb   c                 ó  — t        |j                  d«      «      }|dkD  r\|dk  rW|dk(  ry|dkD  r|dk  rd| j                  |dz  «      z   S |dz  dk(  r| j                  |dz  «      d	z   S | j                  |«      S | j                  |«      S )
a  
        This method acts as a preprocessing step for numbers between 1000 and 3000 (same as the original repository,
        link :
        https://github.com/neonbjb/tortoise-tts/blob/4003544b6ff4b68c09856e04d3eff9da26d023c2/tortoise/utils/tokenizer.py#L86)
        r   r\   i¸  iÐ  ztwo thousandiÚ  ztwo thousand rZ   r]   )rv   rs   r`   )rP   rk   rT   s      rR   Ú_expand_numberz EnglishNormalizer._expand_number·   sš   € ô �!—'‘'˜!“*‹oˆà�Š:˜# š*Ø�dŠ{Ø%Ø�t’  d¢
Ø&¨×)=Ñ)=¸cÀC¹iÓ)HÑHÐHØ�s‘˜a’Ø×+Ñ+¨C°3©JÓ7¸*ÑDÐDà×+Ñ+¨CÓ0Ð0à×'Ñ'¨Ó,Ð,rb   c                 ó~  — t        j                  d| j                  |«      }t        j                  dd|«      }t        j                  d| j                  |«      }t        j                  d| j                  |«      }t        j                  d| j
                  |«      }t        j                  d| j                  |«      }|S )z�
        This method is used to normalize numbers within a text such as converting the numbers to words, removing
        commas, etc.
        z([0-9][0-9,]+[0-9])u   Â£([0-9,]*[0-9])z	\1 poundsz\$([0-9.,]*[0-9])z([0-9]++\.[0-9]+)z[0-9]++(st|nd|rd|th)z[0-9]+)rI   Úsubr�   r{   rƒ   rŒ   rŽ   ri   s     rR   Únormalize_numbersz#EnglishNormalizer.normalize_numbersË   s˜   € ô
 �v‰vÐ,¨d×.AÑ.AÀ4ÓHˆÜ�v‰vÐ)¨<¸Ó>ˆÜ�v‰vÐ*¨D×,@Ñ,@À$ÓGˆÜ�v‰vÐ*¨D×,FÑ,FÈÓMˆÜ�v‰vÐ-¨t×/CÑ/CÀTÓJˆÜ�v‰v�i ×!4Ñ!4°dÓ;ˆØˆrb   c                 ó\   — | j                   D ]  \  }}t        j                  |||«      }Œ |S )z/
        Expands the abbreviate words.
        )rL   rI   r�   )rP   rc   ÚregexÚreplacements       rR   Úexpand_abbreviationsz&EnglishNormalizer.expand_abbreviationsØ   s5   € ð #'×"5Ñ"5ò 	4ÑˆE�;Ü—6‘6˜% ¨dÓ3‰Dð	4àˆrb   c                 óV   — t        j                  t        j                  d«      d|«      S )z.
        Removes multiple whitespaces
        z\s+r^   )rI   r�   rJ   ri   s     rR   Úcollapse_whitespacez%EnglishNormalizer.collapse_whitespaceà   s    € ô �v‰v”b—j‘j Ó(¨#¨tÓ4Ð4rb   c                 óÒ   — | j                  |«      }|j                  «       }| j                  |«      }| j                  |«      }| j	                  |«      }|j                  dd«      }|S )zŒ
        Converts text to ascii, numbers / number-like quantities to their spelt-out counterparts and expands
        abbreviations
        ú"r-   )rj   Úlowerr‘   r•   r—   r   ri   s     rR   Ú__call__zEnglishNormalizer.__call__æ   sd   € ð ×$Ñ$ TÓ*ˆØ�z‰z‹|ˆØ×%Ñ% dÓ+ˆØ×(Ñ(¨Ó.ˆØ×'Ñ'¨Ó-ˆØ�|‰|˜C Ó$ˆàˆrb   N)Ú__name__Ú
__module__Ú__qualname__rS   rv   Ústrr`   rj   r{   r�   rƒ   rŒ   rŽ   r‘   r•   r—   r›   © rb   rR   r   r      sÍ   „ ò'kðR9) 3ð 9)¨3ó 9)ðv> Sð >¨Só >ð" ð "¨ó "ð0+ ð +¨ó +ð2 sð 2¨só 2ð2 3ð 2¨3ó 2ð- ð -¨ó -ð( cð ¨có ð¨ð °ó ð5¨ð 5°ó 5órb   r   )Ú__doc__ÚsysÚversion_inforI   r“   r   r    rb   rR   ú<module>r¤      s/   ðñ )ã 
ð ×Ñ�wÒäã÷Xò Xrb   