o
    w•i*  ã                   @   s²   d Z ddlmZmZmZ ddlZdZdZ	dZ
g d¢Zg d¢Zd	Zd
Ze
fdededefdd„Zdd„ ZedeƒZdedefdd„Zdd„ ZddddddddœZd d!„ Zd"d#„ ZdS )$z˜
Library to convert to and from Roman numerals in various encodings

Placed here till https://github.com/jambonrose/roman-numerals/pull/64 is accepted.
é    )ÚVERBOSEÚcompileÚsubNé   é   é   ))iè  õ   â…¯)i„  u   â…­â…¯)iô  õ   â…®)i  u   â…­â…®)éd   õ   â…­)éZ   u   â…©â…­)é2   õ   â…¬)é(   u   â…©â…¬)é
   õ   â…©)é	   õ   â…¨)é   õ   â…¤)é   õ   â…£)r   õ   â… )	)u	   â…©â… â… u   â…«)u   â…©â… u   â…ª)u   â… â…©r   )u   â…¤â… â… â… u   â…§)u	   â…¤â… â… u   â…¦)u   â…¤â… u   â…¥)õ   â… â…¤r   )u	   â… â… â… u   â…¢)u   â… â… u   â…¡u0   â…¯â…®â…­â…¬â…«â…ªâ…©â…¨â…§â…¦â…¥â…¤â…£â…¢â…¡â… u0   â…¿â…¾â…½â…¼â…»â…ºâ…¹â…¸â…·â…¶â…µâ…´â…³â…²â…±â…°Údecimal_integerÚmodeÚreturnc           	      C   s²   t | tƒr
t | tƒrtdƒ‚t |tƒrt |tƒrtdƒ‚g }| }tD ]\}}t||ƒ\}}| || ¡ q"d |¡}|t	krDt
|d}nt|ƒ}|tkrWt tt¡}| |¡}|S )z,Convert a decimal integer to a Roman numeralú#decimal_integer must be of type intzmode not recognizedÚ ©Únumeral_string)Ú
isinstanceÚintÚboolÚ	TypeErrorÚ
ValueErrorÚROMAN_NUMERAL_TABLEÚdivmodÚappendÚjoinÚ
MODE_ASCIIÚroman_to_asciiÚuse_shorteningsÚMODE_LOWERCASEÚstrÚ	maketransÚSTANDARD_TRANSÚLOWERCASE_TRANSÚ	translate)	r   r   Úreturn_listÚ	remainderÚintegerÚnumeralÚrepetitionsr    Útrans_to_lowercase© r9   úg/home/ubuntu/maya3_transcribe/venv/lib/python3.10/site-packages/indic_transliteration/roman_numerals.pyÚconvert_to_numeral0   s.   
ÿ
ÿÿ

r;   c                 C   s"   t D ]\}}td| || ƒ} q| S ©Nz%s$©ÚSHORTENINGSÚ
substitute)r    Úfull_stringÚ
shorteningr9   r9   r:   r,   L   s   ýr,   uM  
  â…¯*                # thousands
  (â…­â…¯|â…­â…®|â…®?â…­{0,3})  # hundreds - â…­â…¯ (900), â…­â…® (400), â…®â…­â…­â…­ (800), â…­â…­â…­ (300)
  (â…©â…­|â…©â…¬|â…¬?â…©{0,3})  # tens - â…©â…­ (90), â…©â…¬ (40), â…¬â…©â…©â…© (80), â…©â…©â…© (30)
  (â…¨|â…£|â…¤?â… {0,3})   # ones - â…¨ (9), â…£ (4), â…¤â… â… â…  (8), â… â… â…  (3)
  Úroman_numeralc                 C   sZ   t | tƒs	tdƒ‚| dkrt d¡‚t tt¡}|  |¡}t	|ƒ}t
|d}t |¡}|S )z,Convert a Roman numeral to a decimal integerr   r   z'roman_numeral cannot be an empty stringr   )r!   r.   r$   ÚromanÚInvalidRomanNumeralErrorr/   r1   r0   r2   Úremove_shorteningsr+   Ú	fromRoman)rB   Útrans_to_uppercaseÚpartial_numeralÚvaluer9   r9   r:   Úconvert_to_integera   s   




rJ   c                 C   s"   t D ]\}}td| || ƒ} q| S r<   r=   )rH   r@   rA   r9   r9   r:   rE   t   s   ýrE   ÚIÚVÚXÚLÚCÚDÚM)r   r   r   r   r   r	   r   c                 C   s*   t | ƒ} t ¡ D ]
\}}|  ||¡} q| S )N)rE   Úroman_to_ascii_mapÚitemsÚreplace©r    ÚromÚascr9   r9   r:   r+   ‚   s   r+   c                 C   s6   t  ¡ D ]
\}}|  ||¡} qt| ƒ} |  dd¡ | S )Nr   r   )rR   rS   rT   r,   rU   r9   r9   r:   Úascii_to_romanŠ   s
   rX   )Ú__doc__Úrer   r   Ú
re_compiler   r?   rC   ÚMODE_STANDARDr-   r*   r&   r>   r0   r1   r"   r.   r;   r,   ÚNUMERAL_PATTERNrJ   rE   rR   r+   rX   r9   r9   r9   r:   Ú<module>   s*    
ù