o
    |¨Êh/&  ã                   @   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	#	%d8d&d'„Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Z	1	2d9d3d4„Zd5d6„ Zd7S ):Ú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© ú@/var/www/html/env/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   )r   Únum_strr   r   r   Úparse_minus]   s   
zNum2Word_Base.parse_minusc              
   C   s–   z
t |ƒ|ks	J ‚W n tttfy   |  |¡ Y S w d}|dk r)t|ƒ}| j}|| jkr8t| j	|| jf ƒ‚|  
|¡}|  |¡\}}|  || ¡S )NrD   r   )ÚintÚ
ValueErrorÚ	TypeErrorÚAssertionErrorÚto_cardinal_floatÚabsr   r&   ÚOverflowErrorr   r<   ÚcleanÚtitle)r   r=   r?   r2   ÚwordsÚnumr   r   r   Úto_cardinald   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{®Gáz„?)
rH   rM   r   ÚstrÚas_tupleÚexponentr   ÚroundÚmathÚfloor)r   r=   ÚpreÚpostr   r   r   Úfloat2tuplev   s   þzNum2Word_Base.float2tuplec              
   C   sÂ   zt |ƒ|k W n tttfy   t| j| ƒ‚w |  t |ƒ¡\}}t|ƒ}d| jt|ƒ  | }|  	|¡g}| jrD| 
|  | j¡¡ t| jƒD ]}t|| ƒ}| 
t|  	|¡ƒ¡ qId |¡S )NÚ0ú )ÚfloatrI   rJ   rK   r   r]   rU   r   r6   rS   r;   rP   r   r5   rH   r   Újoin)r   r=   r[   r\   r?   ÚiÚcurrr   r   r   rL   ˆ   s   ÿ
zNum2Word_Base.to_cardinal_floatc                 C   r+   r   r,   )r   rc   Únextr   r   r   Úmerge�   r/   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   )r6   Ú
isinstanceÚtupler;   re   r$   rO   )r   r2   r?   ÚleftÚrightr>   r   r   r   rO       s$   €
ðzNum2Word_Base.cleanc                 C   s^   | j r-g }| ¡ }|D ]}|| jv r| |¡ q| |d  ¡ |dd …  ¡ qd |¡}|S )Nr   r   r_   )r   Úsplitr   r;   Úupperra   )r   r=   r?   r8   r   r   r   rP   µ   s   
 
zNum2Word_Base.titlec                 C   s8   |t |ƒkst| j| ƒ‚t|ƒ|kst| j| ƒ‚d S r   )rH   rJ   r   rM   r   ©r   r=   r   r   r   Úverify_ordinalÁ   s
   ÿzNum2Word_Base.verify_ordinalc                 C   ó
   |   |¡S r   ©rS   rl   r   r   r   Ú
to_ordinalÇ   ó   
zNum2Word_Base.to_ordinalc                 C   s   |S r   r   rl   r   r   r   Úto_ordinal_numÊ   r/   zNum2Word_Base.to_ordinal_numc                 C   s$   |  d¡}|dkr|d S d |¡S )Nú/r   r   rD   )rj   ra   )r   r=   Útextr   r   r   ÚinflectÎ   s   

zNum2Word_Base.inflectrD   é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ú%02dr_   )
rf   r`   r]   rJ   r:   rP   ru   r;   rS   ra   )r   r2   ÚhightxtÚlowtxtÚjointxtÚdivisorÚlongvalÚcentsr?   ÚhighÚlowr   r   r   Úto_splitnumÕ   s6   
ÿ
€

zNum2Word_Base.to_splitnumc                 K   rn   r   ro   )r   r=   Úkwargsr   r   r   Úto_year÷   rq   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   r9   Úformsr   r   r   Ú	pluralizeú   s   zNum2Word_Base.pluralizec                 C   rn   r   ro   ©r   ÚnumberÚcurrencyr   r   r   Ú_cents_verbose  rq   zNum2Word_Base._cents_verbosec                 C   s   d| S )Nrw   r   r…   r   r   r   Ú_cents_terse  s   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| |	ƒ}	|r8d| j nd}|rB|  	||¡n|  
||¡}d||  |¡|  ||	¡|||  ||
¡f S )a*  
        Args:
            val: Numeric value
            currency (str): Currency code
            cents (bool): Verbose cents
            seperator (str): Cent seperator
            adjective (bool): Prefix currency name with adjective
        Returns:
            str: Formatted string

        z+Currency code "%s" not implemented for "%s"rC   rD   z%s%s %s%s %s %s)r   ÚCURRENCY_FORMSÚKeyErrorr-   Ú	__class__Ú__name__ÚCURRENCY_ADJECTIVESr   r   rˆ   r‰   rS   r„   )r   r2   r‡   r}   Ú	seperatorÚ	adjectiverh   ri   Úis_negativeÚcr1Úcr2Ú	minus_strÚ	cents_strr   r   r   Úto_currency  s2   
ÿÿÿÿ
ÿ

úzNum2Word_Base.to_currencyc                 C   s   d S r   r   r   r   r   r   r    .  r/   zNum2Word_Base.setupN)rD   rD   rD   rv   TT)rŠ   Tr‹   F)r�   Ú
__module__Ú__qualname__rŒ   r�   r'   r#   r(   r)   r*   r<   rG   rS   r]   rL   re   rO   rP   rm   rp   rr   ru   r€   r‚   r„   rˆ   r‰   r˜   r    r   r   r   r   r	      s>    
ÿ"
ÿ'r	   )Ú
__future__r   rY   Úcollectionsr   Údecimalr   Úcompatr   r‡   r   r   Úobjectr	   r   r   r   r   Ú<module>   s   