o
    noi!+                     @   s  d dl Z d dlZd dlmZ d dlmZ d dlmZ d dl	mZ
 d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl mZ! d dl"mZ# d dl$mZ% d dl&mZ' d dl(mZ) d dl*mZ+ d dl,mZ- d dl.mZ/ d dl0mZ1 d dl2mZ3 d dl4mZ5 d dl6mZ7 d dl8m9Z: d dl;m9Z< d dl=m9Z> d dl?m9Z@ d dlAm9ZB d dlCm9ZD d dlEm9ZF d dlGm9ZH d dlIm9ZJ d dlKm9ZL d dl8mMZN d dl;mMZO d dl=mMZP d dl?mMZQ d dlAmMZR d dlCmMZS d dlEmMZT d dlGmMZU d dlImMZV d dlKmMZW d dlXmYZZ d dl[mYZ\ d dl]mYZ^ d dl_mYZ` d dlamYZb d dlcmYZd d dlemYZf d dlgmYZh d dlimYZj d dlkmYZl d dlmmnZo d dlpmnZq d dlrmnZs d dltmnZu d dlvmnZw d dlxmnZy d dlzmnZ{ d dl|mnZ} d dl~mnZ d dlmnZ dZd	Zeeee
eeeeeeeeedZee!e#e%e'e)e+e-e/e1e3e5e7dZe:e<e>e@eBeDeFeHeJeLd	
ZeNeOePeQeReSeTeUeVeWd	
ZeZe\e^e`ebedefehejeld	
Zeoeqeseueweye{e}eed	
ZdddZddeeB dedededeeB f
ddZdd Zdd ZdS )    N)convert)
variations)DIRECT_DICT)EXCEPTIONS_DICT)split_number)process_text)asbnenguhimlmrorpatateknur)
doisatmaisdbrxnemnikokkssar
   Fc                    s   t | tr|  dd} |  std tv r!t|  ||dS  tvr)tdt| }t	|dk}|s7|rCd
 fdd	| D S t  | }|d
krQ|d S ttt|  }|| dd |D }|S )N, z#Input string must be a valid number)langr   splitz7Language not supported. Please check the language code.	    c                 3   s     | ]}t   |d  V  qdS r   N)lang_func_dict.0digitr!    O/home/ubuntu/.local/lib/python3.10/site-packages/indic_numtowords/numtowords.py	<genexpr>       znum2words.<locals>.<genexpr>Fr   c                 S      g | ]	}t d d|qS z[\u200c\u200b]r    resub)r(   liner+   r+   r,   
<listcomp>       znum2words.<locals>.<listcomp>)
isinstancestrstripreplaceisdigit
ValueErrorextended_supported_langsnum2words_extendedsupported_langslenjoinr&   listsetget_variationsextend)numberr!   r   r"   
number_strextendedresultsr+   r*   r,   	num2words   s&   

rJ   rF   r!   r   r"   returnc                    s  t | dpd}t|dk}|s|r&d fdd|r!| D S |D S t  |}g }t dkr5|nt|D ]\}}	 dkrJt|d | n|}t  |	||t|}q:t  	|g }
 dkrm|
d	d
 |D  ndd
 |D |
 } dkr|dnd}|r|S || S )a  
    Convert a number to its textual representation in a specified Indian language.

    Args:
        number (int or str): The number to convert, provided as an integer or a numeric string.
        lang (str): The language code representing the target Indian language for conversion.
        variations (bool, optional): Returns a list of possible textual variations if set to True. Defaults to False.
        split (bool, optional): Converts each digit separately into its word form when set to True. Defaults to False.

    Returns:
        str: The textual representation of the number if `variations` is False.
        list[str]: A list of textual variations if `variations` is True.

    Raises:
        ValueError: If the input is not a valid number.
    0r#   r$   c                 3   s     | ]}t   | d  V  qdS r%   )direct_dict_mappingr'   r*   r+   r,   r-      r.   z%num2words_extended.<locals>.<genexpr>r      r   c                 S   r/   r0   r1   r(   ir+   r+   r,   r5      r6   z&num2words_extended.<locals>.<listcomp>c                 S   r/   r0   r1   rO   r+   r+   r,   r5      r6   r   )
r8   lstripr@   rA   split_number_mapping	enumeratereversedprocess_text_mappingexceptions_dict_mappingget)rF   r!   r   r"   rG   rH   numbersconverted_textindexnum
exceptionsresult_textidxr+   r*   r,   r>      s    & r>   c           	      C   s  t | }t }t|d }tj|dd}|D ]}t|dd  ||d < qW d    n1 s/w   Y  | |v r@||  | n|g|| < t|d.}| D ] } | d }||  D ]}||d 7 }qY| }|d7 }|	| qOW d    d S 1 s{w   Y  d S )Nr	)	delimiterrN   r   w
)
user_variation_file_mapdictopencsvreaderrB   appendkeysr9   write)	r\   wordr!   user_variation_fileuser_variation_dictfri   rowr4   r+   r+   r,   add_variation   s*   
"rr   c                 C   s*   t | }t| |v rt|t|  S t S )N)re   intrC   )r\   r!   ro   r+   r+   r,   rD      s   rD   )r
   FF)FF)r2   rh   indic_numtowords.asm.cardinalr   
as_convertindic_numtowords.ben.cardinal
bn_convertindic_numtowords.eng.cardinal
en_convertindic_numtowords.guj.cardinal
gu_convertindic_numtowords.hin.cardinal
hi_convertindic_numtowords.mal.cardinal
ml_convertindic_numtowords.mar.cardinal
mr_convertindic_numtowords.ori.cardinal
or_convertindic_numtowords.pun.cardinal
pa_convertindic_numtowords.tam.cardinal
ta_convertindic_numtowords.tel.cardinal
te_convertindic_numtowords.kan.cardinal
kn_convertindic_numtowords.urd.cardinal
ur_convert)indic_numtowords.asm.data.user_variationsr   as_variations)indic_numtowords.ben.data.user_variationsbn_variations)indic_numtowords.eng.data.user_variationsen_variations)indic_numtowords.guj.data.user_variationsgu_variations)indic_numtowords.hin.data.user_variationshi_variations)indic_numtowords.mal.data.user_variationsml_variations)indic_numtowords.mar.data.user_variationsmr_variations)indic_numtowords.ori.data.user_variationsor_variations)indic_numtowords.pun.data.user_variationspa_variations)indic_numtowords.tam.data.user_variationsta_variations)indic_numtowords.tel.data.user_variationste_variations)indic_numtowords.kan.data.user_variationskn_variations)indic_numtowords.urd.data.user_variationsur_variationsindic_numtowords.doi.data.numsr   doi_direct_dictindic_numtowords.sat.data.numssat_direct_dictindic_numtowords.mai.data.numsmai_direct_dictindic_numtowords.sin.data.numssd_direct_dictindic_numtowords.brx.data.numsbrx_direct_dictindic_numtowords.nep.data.numsne_direct_dictindic_numtowords.mni.data.numsmni_direct_dictindic_numtowords.kok.data.numskok_direct_dictindic_numtowords.kas.data.numsks_direct_dictindic_numtowords.san.data.numssa_direct_dictr   doi_exceptions_dictsat_exceptions_dictmai_exceptions_dictsd_exceptions_dictbrx_exceptions_dictne_exceptions_dictmni_exceptions_dictkok_exceptions_dictks_exceptions_dictsa_exceptions_dictindic_numtowords.doi.utilsr   doi_split_numberindic_numtowords.sat.utilssat_split_numberindic_numtowords.mai.utilsmai_split_numberindic_numtowords.sin.utilssd_split_numberindic_numtowords.brx.utilsbrx_split_numberindic_numtowords.nep.utilsne_split_numberindic_numtowords.mni.utilsmni_split_numberindic_numtowords.kok.utilskok_split_numberindic_numtowords.kas.utilsks_split_numberindic_numtowords.san.utilssa_split_numberindic_numtowords.doi.cardinalr   doi_process_textindic_numtowords.sat.cardinalsat_process_textindic_numtowords.mai.cardinalmai_process_textindic_numtowords.sin.cardinalsd_process_textindic_numtowords.brx.cardinalbrx_process_textindic_numtowords.nep.cardinalne_process_textindic_numtowords.mni.cardinalmni_process_textindic_numtowords.kok.cardinalkok_process_textindic_numtowords.kas.cardinalks_process_textindic_numtowords.san.cardinalsa_process_textr?   r=   r&   re   rM   rW   rS   rV   rJ   rs   r8   boolrB   r>   rr   rD   r+   r+   r+   r,   <module>   s$   
(+