o
    Zhk                     @   s   d Z ddlZG dd dZdS )z%Number Normalizer class for SpeechT5.    Nc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
EnglishNumberNormalizerc                 C   s   g d| _ g d| _g d| _g d| _i ddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)| _d S )*N)
 onetwothreefourfivesixseveneightnine)
r   ZelevenZtwelveZthirteenZfourteenZfifteenZsixteenZ	seventeenZeighteenZnineteen)
r   tenZtwentyZthirtyZfortyZfiftyZsixtyZseventyZeightyZninety)r   ZthousandZmillionZbillionZtrillionZquadrillionZquintillionZ
sextillionZ
septillionZ	octillionZ	nonillionZ	decillion$z dollarsu   €z euros   £z pounds   ¢z cents   ¥z japanese yenu   ﷼z saudi riyalu   ₹z indian rupeesu   ₽z russian rublesu   ฿z
 thai bahtu   ₺z turkish lirasu   ₴z ukrainian hryvniau   ₣z swiss francsu   ₡z costa rican colonu   ₱z philippine pesou   ₪z israeli shekelsu   ₮u    mongolian tögrögu   ₩z south korean wonz nigerian nairau    vietnamese Đồng)u   ₦u   ₫)onesteenstens	thousandscurrency_symbolsself r   ]/var/www/auris/lib/python3.10/site-packages/transformers/models/speecht5/number_normalizer.py__init__   sT   



	
z EnglishNumberNormalizer.__init__c           	      C   s   |dkrdS g }t dt| jD ]d}|d dkrpd}|d d }|d }|dkr9|| j| d 7 }|dkr9|d7 }|dkrK|d	k rK|| j|d  7 }n | j|d  }| j|d  }|r_||7 }|rk|rg|d
7 }||7 }|| |d }qd
t|S )Nr   zeroi  r   d   z hundredz and 
       )	rangelenr   r   r   r   appendjoinreversed)	r   numpartsipartZhundredsZ
tens_unitsZ
tens_digitZ
ones_digitr   r   r   spell_numberL   s2   

z$EnglishNumberNormalizer.spell_numberc                    s(  d|v r| d\}}n|d}}d} j D ]3\}}||r-|}|t|d } n|drK|dd |rK|}d|t|d d  } nqd}|dr\d}|dd }n|drkd}|tdd }d}d	|v sud	|v rd
}|d	d}|d	d}|dt|d d d  }g }	tdt|dD ]1}
t||
|
d  }|dkr͈ 	|} j
t||
d d d  }|r|d| 7 }|	| qd|	}|dkr|s|r| | | | S | | S d fdd|D }|s|r	| | d| | | S | | d| | S )zW
        Converts an individual number passed in string form to spelt-out form
        .Z00r   N-   zminus minus%z percent   r   r    c                    s   g | ]	}  t|qS r   )r*   int).0digitr   r   r   
<listcomp>   s    z3EnglishNumberNormalizer.convert.<locals>.<listcomp>z point )splitr   items
startswithr"   replacezfillr!   r1   r*   r   r#   r$   )r   numberZinteger_partZdecimal_partcurrency_symbolsymbolnameZminus_prefixZpercent_suffixr'   r(   chunkr)   unitZspelled_integerZspelled_decimalr   r   r   convertn   sn   








zEnglishNumberNormalizer.convertc                    s>   d}t ddd |}t | fdd|}t dd|}|S )zf
        Convert numbers / number-like quantities in a string to their spelt-out counterparts
        u~   (?<!\w)(-?\$?\€?\£?\¢?\¥?\₹?\₽?\฿?\₺?\₴?\₣?\₡?\₱?\₪?\₮?\₩?\₦?\₫?\﷼?\d+(?:\.\d{1,2})?%?)(?!\w)z	(\d+,\d+)c                 S   s   |  dddS )Nr-   ,r   )groupr8   matchr   r   r   <lambda>   s    z2EnglishNumberNormalizer.__call__.<locals>.<lambda>c                    s     | dS )Nr-   )r@   rB   rC   r   r   r   rE      s    z +r    )resub)r   textpatternZconverted_textr   r   r   __call__   s
   z EnglishNumberNormalizer.__call__N)__name__
__module____qualname__r   r*   r@   rJ   r   r   r   r   r      s
    7"Dr   )__doc__rF   r   r   r   r   r   <module>   s   