
    9%i&'                     b    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	e      Zy)
    )unicode_literalsN)OrderedDictDecimal   )to_s)parse_currency_partsprefix_currencyc                       e Zd Zi Zi Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Z	 	 ddZd Zd Zd Zd Zd Z	 	 ddZd Zy)Num2Word_Basec                 h    d _         d _        g  _        d _        d _        d _        d _        d _        d _         j                          t         fd	d
D              rNt                _         j                          dt         j                  j                               d   z   _        y y )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   6   K   | ]  }t        |        y wN)hasattr).0fieldselfs     h/var/www/html/navyabakers_fullstack/navyabakers_prod/venv/lib/python3.12/site-packages/num2words/base.py	<genexpr>z)Num2Word_Base.__init__.<locals>.<genexpr>.   s      BwtU# Bs   )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MAXVALr   s   `r   __init__zNum2Word_Base.__init__    s    ABG<

  B@B B$DJdjjoo&7!8!;;DK	B    c                     | j                  | j                         | j                  | j                         | j	                  | j
                         y r   )set_high_numwordsr   set_mid_numwordsr   set_low_numwordsr   r*   s    r   r&   zNum2Word_Base.set_numwords4   s>    t112d//0d//0r,   c                     t         r   NotImplementedError)r   argss     r   r.   zNum2Word_Base.set_high_numwords9       !!r,   c                 6    |D ]  \  }}|| j                   |<    y r   )r%   )r   midkeyvals       r   r/   zNum2Word_Base.set_mid_numwords<   s"     	"HC!DJJsO	"r,   c                 x    t        |t        t        |      dz
  dd            D ]  \  }}|| j                  |<    y )Nr   )ziprangelenr%   )r   numwordswordns       r   r0   zNum2Word_Base.set_low_numwords@   s;    8U3x=1+<b"%EF 	!GD! DJJqM	!r,   c                    | j                   D ]  }||kD  r	g }|dk(  rd\  }}nt        ||      \  }}|dk(  r!|j                  | j                   d   df       n?||k(  r|| j                   |   z  ||z  fgc S |j                  | j                  |             |j                  | j                   |   |f       |r |j                  | j                  |             |c S  y )Nr   )r   r   r   )r%   divmodappendsplitnum)r   valueelemoutdivmods         r   rE   zNum2Word_Base.splitnumD   s    JJ 	De|CzS!%.Sax

DJJqM1-.%< 4::d#33SX>??

4==-.JJ

4($/0

4==-.J-	r,   c                 p    |j                  d      r"d| j                  j                         z  |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_strs     r   parse_minuszNum2Word_Base.parse_minus]   s=    c"4<<--//<<7{r,   c                     t        |      S r   r   r   rF   s     r   str_to_numberzNum2Word_Base.str_to_numberd   s    u~r,   c                    	 t        |      |k(  sJ 	 d}|dk  r(t        |      }d| j                  j                         z  }|| j                  k\  r$t        | j                  || j                  fz        | j                  |      }| j                  |      \  }}| j                  ||z         S # t        t        t        f$ r | j	                  |      cY S w xY w)NrN   r   rM   )int
ValueError	TypeErrorAssertionErrorto_cardinal_floatabsr   rP   r)   OverflowErrorr"   rE   cleantitle)r   rF   rH   r9   wordsnums         r   to_cardinalzNum2Word_Base.to_cardinalg   s    	1u:&&& 19JE$,,,,..CDKK 2 2eT[[5I IJJmmE"ZZ_
szz#+&& I~6 	1))%00	1s   B. .%CCc                 p   t        |      }t        t        t        |            j	                         j
                        | _        t        ||z
        d| j                  z  z  }t        t        |      |z
        dk  rt        t        |            }||fS t        t        j                  |            }||fS )N
   g{Gz?)
rW   r\   r   stras_tupleexponentr   roundmathfloor)r   rF   preposts       r   float2tuplezNum2Word_Base.float2tupley   s    %j WSZ099;DDE53;"dnn"44uT{T!"T)
 uT{#D Dy tzz$'(DDyr,   c                 j   	 t        |      |k(   | j                  t        |            \  }}t        |      }d| j                  t        |      z
  z  |z   }| j                  |      g}| j                  r*|j                  | j                  | j                               t        | j                        D ]9  }t        ||         }|j                  t!        | j                  |                   ; dj#                  |      S # t        t        t        t        f$ r t        | j
                  |z        w xY w)N0 )floatrX   rY   rZ   AttributeErrorr   rm   re   r   r>   rb   rD   r_   r   r=   rW   r   join)r   rF   rk   rl   rH   icurrs          r   r[   zNum2Word_Base.to_cardinal_float   s   	8%LE! $$U5\2	T4ydnns4y01D8$%>>JJtzz$..12t~~& 	5AtAw<DJJtD,,T234	5 xx}! I~~F 	8D..677	8s   D   2D2c                     t         r   r2   )r   ru   nexts      r   mergezNum2Word_Base.merge   r5   r,   c                    |}t        |      dk7  rg }|d d \  }}t        |t              rKt        |t              r;|j                  | j	                  ||             |dd  r|j                  |dd         nl|D ]g  }t        |t
              rDt        |      dk(  r|j                  |d          6|j                  | j                  |             W|j                  |       i |}t        |      dk7  r|d   S )Nr   r   r   )r>   
isinstancetuplerD   rx   r'   r^   )r   r9   rH   leftrightrG   s         r   r^   zNum2Word_Base.clean   s    #h!mCbq'KD%$&:eU+C

4::dE23qr7JJs12w' )D!$-t9>JJtAw/JJtzz$'78

4() C! #h!m" 1vr,   c                    | j                   rrg }|j                         }|D ]J  }|| j                  v r|j                  |       #|j                  |d   j	                         |dd  z          L dj                  |      }|S )Nr   r   rp   )r   splitr   rD   upperrs   )r   rF   rH   r@   s       r   r_   zNum2Word_Base.title   sw    ==CKKME ;4---JJt$JJtAw}}ab9:	;
 HHSMEr,   c                     |t        |      k(  st        | j                  |z        t        |      |k(  st        | j                  |z        y r   )rW   rY   r    r\   r!   rT   s     r   verify_ordinalzNum2Word_Base.verify_ordinal   sK    E
"D0058995zU"D..677 #r,   c                 $    | j                  |      S r   rb   rT   s     r   
to_ordinalzNum2Word_Base.to_ordinal       &&r,   c                     |S r    rT   s     r   to_ordinal_numzNum2Word_Base.to_ordinal_num   s    r,   c                 Z    |j                  d      }|dk(  r|d   S dj                  |      S )N/r   r   rN   )r   rs   )r   rF   texts      r   inflectzNum2Word_Base.inflect   s-    zz#A:7Nwwt}r,   c                    g }t        |t              r| j                  |      \  }	}
n	 |\  }	}
|	r| j                  | j                  |	|            }|j                  | j                  |	             |
r8|rI|r|j                  |       |r4|j                  | j                  |             n|r|j                  |       |
rk|r!|j                  | j                  |
             n|j                  d|
z         |r2|r0|j                  | j                  | j                  |
|                   dj                  |      S # t        $ r t	        ||      \  }	}
Y )w xY w)N%02drp   )
rz   rq   rm   rY   rC   r_   r   rD   rb   rs   )r   r9   hightxtlowtxtjointxtdivisorlongvalcentsrH   highlows              r   to_splitnumzNum2Word_Base.to_splitnum   s%   c5!((-ID#1	c jjdG!<=GJJt''-.

7+

4::g#67

7#

4++C01

6C<('

4::dll3&?@Axx}/  1"30	c1s   D< <EEc                 $    | j                  |      S r   r   )r   rF   kwargss      r   to_yearzNum2Word_Base.to_year   r   r,   c                     t         )z
        Should resolve gettext form:
        http://docs.translatehouse.org/projects/localization-guide/en/latest/l10n/pluralforms.html
        r2   )r   rA   formss      r   	pluralizezNum2Word_Base.pluralize   s
    
 "!r,   c                 $    | j                  |      S r   r   r   numbercurrencys      r   _money_verbosezNum2Word_Base._money_verbose      ''r,   c                 $    | j                  |      S r   r   r   s      r   _cents_verbosezNum2Word_Base._cents_verbose  r   r,   c                     d|z  S )Nr   r   r   s      r   _cents_tersezNum2Word_Base._cents_terse
  s    r,   c                    t        |      \  }}}	 | j                  |   \  }	}
|r'|| j                  v rt        | j                  |   |	      }	|rd| j                  j                         z  nd}| j                  ||      }|r| j                  ||      n| j                  ||      }||d| j                  ||	      |d|d| j                  ||
      	S # t        $ r' t        d|d| j                  j
                  d      w xY w)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 "z" not implemented for ""rM   rN   rp   )r	   CURRENCY_FORMSKeyErrorr3   	__class____name__CURRENCY_ADJECTIVESr
   r   rP   r   r   r   r   )r   r9   r   r   	separator	adjectiver|   r}   is_negativecr1cr2	minus_str	money_str	cents_strs                 r   to_currencyzNum2Word_Base.to_currency  s    $8#< e[	5**84HC T%=%==!$":":8"DcJC4?EDLL..00R	''h7	 ''x8++E8< 	 NN4%NN5#&
 	
  	5%4>>2245 5	5s   C 0Dc                      y r   r   r*   s    r   r#   zNum2Word_Base.setup5  s    r,   N)rN   rN   rN   d   TT)EURT,F)r   
__module____qualname__r   r   r+   r&   r.   r/   r0   rE   rR   rU   rb   rm   r[   rx   r^   r_   r   r   r   r   r   r   r   r   r   r   r   r#   r   r,   r   r   r      s    N<(1
""!2'$$*"*
8' ?A59 D'"(( FI#&
Pr,   r   )
__future__r   ri   collectionsr   decimalr   compatr   r   r	   r
   objectr   r   r,   r   <module>r      s'   $ (  #   ;ZF Zr,   