o
    ph&'                     @   s\   d dl m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
mZ G dd	 d	eZdS )
    )unicode_literalsN)OrderedDictDecimal   )to_s)parse_currency_partsprefix_currencyc                   @   s   e Zd Zi Zi Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Z	%	'd<d(d)Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Z	5	6d=d7d8Zd9d: Zd;S )>Num2Word_Basec                    s   d _ d _g  _d _d _d _d _d _d _ 	  t
 fd	d
dD r@t  _   dt j d   _d S d S )NF   z(-) z(.)z"type(%s) not in [long, int, float]z!Cannot treat float %s as ordinal.z(Cannot treat negative num %s as ordinal.zabs(%s) must be less than %s.c                 3   s    | ]}t  |V  qd S N)hasattr).0fieldself Z/var/www/html/Testing_prj/Navya-Bakers/venv/lib/python3.10/site-packages/num2words/base.py	<genexpr>.   s    z)Num2Word_Base.__init__.<locals>.<genexpr>)high_numwordsmid_numwordslow_numwordsi  r   )is_title	precisionexclude_titlenegword	pointworderrmsg_nonnumerrmsg_floatorderrmsg_negorderrmsg_toobigsetupanyr   cardsset_numwordslistkeysMAXVALr   r   r   r   __init__    s"   zNum2Word_Base.__init__c                 C   s(   |  | j | | j | | j d S r   )set_high_numwordsr   set_mid_numwordsr   set_low_numwordsr   r   r   r   r   r$   4   s   zNum2Word_Base.set_numwordsc                 G      t r   NotImplementedError)r   argsr   r   r   r)   9      zNum2Word_Base.set_high_numwordsc                 C   s   |D ]	\}}|| j |< qd S r   )r#   )r   midkeyvalr   r   r   r*   <   s   zNum2Word_Base.set_mid_numwordsc                 C   s2   t |tt|d ddD ]	\}}|| j|< qd S )Nr   )ziprangelenr#   )r   numwordswordnr   r   r   r+   @   s   "zNum2Word_Base.set_low_numwordsc                 C   s   | j D ]Y}||kr
qg }|dkrd\}}nt||\}}|dkr+|| j d df n||kr=|| j |  || fg  S || | || j | |f |rY|| | |  S d S )Nr   )r   r   r   )r#   divmodappendsplitnum)r   valueelemoutdivmodr   r   r   r=   D   s"   

zNum2Word_Base.splitnumc                 C   s,   | drd| j  |dd fS d|fS )z6Detach minus and return it as symbol with new num_str.-%s r   N )
startswithr   strip)r   num_strr   r   r   parse_minus]   s   
zNum2Word_Base.parse_minusc                 C   s   t |S r   r   r   r>   r   r   r   str_to_numberd      zNum2Word_Base.str_to_numberc              
   C   s   z
t ||ks	J W n tttfy   | | Y S w d}|dk r-t|}d| j  }|| jkr<t	| j
|| jf | |}| |\}}| || S )NrE   r   rD   )int
ValueError	TypeErrorAssertionErrorto_cardinal_floatabsr   rG   r'   OverflowErrorr    r=   cleantitle)r   r>   r@   r3   wordsnumr   r   r   to_cardinalg   s   

zNum2Word_Base.to_cardinalc                 C   st   t |}ttt| j| _t|| d| j  }tt|| dk r/t t|}||fS t t	|}||fS )N
   g{Gz?)
rM   rR   r   stras_tupleexponentr   roundmathfloor)r   r>   prepostr   r   r   float2tupley   s   zNum2Word_Base.float2tuplec                 C   s   zt ||k W n ttttfy   t| j| w | t |\}}t|}d| jt	|  | }| 
|g}| jrE|| | j t| jD ]}t|| }|t| 
| qJd|S )N0 )floatrN   rO   rP   AttributeErrorr   rb   rZ   r   r7   rX   r<   rU   r   r6   rM   r   join)r   r>   r`   ra   r@   icurrr   r   r   rQ      s   
zNum2Word_Base.to_cardinal_floatc                 C   r,   r   r-   )r   ri   nextr   r   r   merge   r0   zNum2Word_Base.mergec                 C   s   |}t |dkrcg }|d d \}}t|tr5t|tr5|| || |dd  r4||dd   n&|D ]#}t|trUt |dkrL||d  q7|| | q7|| q7|}t |dks|d S )Nr   r   r   )r7   
isinstancetupler<   rk   r%   rT   )r   r3   r@   leftrightr?   r   r   r   rT      s$   
zNum2Word_Base.cleanc                 C   s^   | j r-g }| }|D ]}|| jv r|| q||d  |dd    qd|}|S )Nr   r   rd   )r   splitr   r<   upperrg   )r   r>   r@   r9   r   r   r   rU      s   
 
zNum2Word_Base.titlec                 C   s8   |t |kst| j| t||kst| j| d S r   )rM   rO   r   rR   r   rJ   r   r   r   verify_ordinal   s
   zNum2Word_Base.verify_ordinalc                 C   
   |  |S r   rX   rJ   r   r   r   
to_ordinal      
zNum2Word_Base.to_ordinalc                 C   s   |S r   r   rJ   r   r   r   to_ordinal_num   r0   zNum2Word_Base.to_ordinal_numc                 C   s$   | d}|dkr|d S d|S )N/r   r   rE   )rp   rg   )r   r>   textr   r   r   inflect   s   

zNum2Word_Base.inflectrE   d   Tc                 C   s   g }t |tr| |\}	}
nz|\}	}
W n ty%   t||\}	}
Y nw |	rV| | |	|}|| |	 |
rO|rN|rD|| |rN|| | n|rV|| |
rz|rc|| |
 n|d|
  |rz|rz|| | |
| d	|S )N%02drd   )
rl   re   rb   rO   r;   rU   rz   r<   rX   rg   )r   r3   hightxtlowtxtjointxtdivisorlongvalcentsr@   highlowr   r   r   to_splitnum   s6   



zNum2Word_Base.to_splitnumc                 K   rs   r   rt   )r   r>   kwargsr   r   r   to_year   rv   zNum2Word_Base.to_yearc                 C   r,   )z
        Should resolve gettext form:
        http://docs.translatehouse.org/projects/localization-guide/en/latest/l10n/pluralforms.html
        r-   )r   r:   formsr   r   r   	pluralize   s   zNum2Word_Base.pluralizec                 C   rs   r   rt   r   numbercurrencyr   r   r   _money_verbose  rv   zNum2Word_Base._money_verbosec                 C   rs   r   rt   r   r   r   r   _cents_verbose  rv   zNum2Word_Base._cents_verbosec                 C   s   d| S )Nr|   r   r   r   r   r   _cents_terse
  rL   zNum2Word_Base._cents_terseEUR,Fc              
   C   s   t |\}}}z	| j| \}	}
W n ty!   td|| jjf w |r1|| jv r1t| j| |	}	|r:d| j	  nd}| 
||}|rJ| ||n| ||}d||| ||	||| ||
f S )a*  
        Args:
            val: Numeric value
            currency (str): Currency code
            cents (bool): Verbose cents
            separator (str): Cent separator
            adjective (bool): Prefix currency name with adjective
        Returns:
            str: Formatted string

        z+Currency code "%s" not implemented for "%s"rD   rE   z%s%s %s%s %s %s)r   CURRENCY_FORMSKeyErrorr.   	__class____name__CURRENCY_ADJECTIVESr	   r   rG   r   r   r   r   )r   r3   r   r   	separator	adjectivern   ro   is_negativecr1cr2	minus_str	money_str	cents_strr   r   r   to_currency  s4   



zNum2Word_Base.to_currencyc                 C   s   d S r   r   r   r   r   r   r!   5  r0   zNum2Word_Base.setupN)rE   rE   rE   r{   TT)r   Tr   F)r   
__module____qualname__r   r   r(   r$   r)   r*   r+   r=   rI   rK   rX   rb   rQ   rk   rT   rU   rr   ru   rw   rz   r   r   r   r   r   r   r   r!   r   r   r   r   r
      sB    
"
(r
   )
__future__r   r^   collectionsr   decimalr   compatr   r   r   r	   objectr
   r   r   r   r   <module>   s   