
    -Ph                       U d Z ddlmZ ddlZdZerddlmZmZmZ ddl	m
Z
  ed          ZndCd
ZdZded<   dZded<   dZded<   dZded<   	 dZded<   	 e G d de                      Ze G d de                      Ze G d d                      Zd ej        d           ej        d          fd ej        d            ej        d!          fd" ej        d#           ej        d$          fd% ej        d&           ej        d'          fd( ej        d)           ej        d*          fd+ ej        d,           ej        d-          fd. ej        d/           ej        d0          fd1 ej        d2           ej        d3          fd4 ej        d5           ej        d6          fd7 ej        d8           ej        d9          fd: ej        d;           ej        d<          fd= ej        d>           ej        d?          fd ej        d@           ej        dA          fgZdedB<   dS )DzConversion between integers and roman numerals.

Copyright (c) 2024, Adam Turner.

This project is licenced under the terms of either the Zero-Clause BSD licence
or the CC0 1.0 Universal licence.
    )annotationsNF)FinalTypeVarfinal)Self_Tfreturnc                    | S )N )r	   s    W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/roman_numerals/__init__.pyr   r      s        z3.1.0r   __version__)      r   version_info)MAXMINInvalidRomanNumeralErrorOutOfRangeErrorRomanNumeral__all__r   r   i  r   c                      e Zd ZdZdS )r   z2Number out of range (must be between 1 and 3,999).N)__name__
__module____qualname____doc__r   r   r   r   r   ,   s        <<<<r   r   c                  $     e Zd ZdZd	 fdZ xZS )
r   zNot a valid Roman numeral.valuestrargsobjectr
   Nonec                F    d| } t                      j        |g|R   d S )NzInvalid Roman numeral: )super__init__)selfr   r!   msg	__class__s       r   r&   z!InvalidRomanNumeralError.__init__5   s5    ///$t$$$$$$r   )r   r    r!   r"   r
   r#   )r   r   r   r   r&   __classcell__r)   s   @r   r   r   1   sC        $$% % % % % % % % % %r   r   c                       e Zd ZU dZdZded<   d fdZdd	ZddZddZ	ddZ
ddZddZd fdZddZddZedd            Z xZS ) r   zA Roman numeral.

    Only values between 1 and 3,999 are valid.
    Stores the value internally as an ``int``.

    >>> answer = RomanNumeral(42)
    >>> print(answer.to_uppercase())
    XLII
    _valueintr.   r   r
   r#   c                  t          |t                    s(t          |          j        }d|}t	          |          |t
          k     s|t          k    rd| d}t          |          t                      	                    d|           d S )Nz*RomanNumeral: an integer is required, not z7Number out of range (must be between 1 and 3,999). Got .r.   )

isinstancer/   typer   	TypeErrorr   r   r   r%   __setattr__)r'   r   value_qualnamer(   r)   s       r   r&   zRomanNumeral.__init__I   s    %%% 	!!%[[5NQ~QQCC.. 3;;%#++TETTTC!#&&&He,,,,,r   c                    | j         S )z)Return the integer value of this numeral.r-   r'   s    r   __int__zRomanNumeral.__int__S   s
    {r   r    c                *    |                                  S )z;Return the well-formed (uppercase) string for this numeral.)to_uppercaser8   s    r   __str__zRomanNumeral.__str__W   s      """r   c                0    | j         j         d| j        dS )z1Return the string representation of this numeral.())r)   r   r.   r8   s    r   __repr__zRomanNumeral.__repr__[   s     .)<<DK<<<<r   otherr"   boolc                Z    t          |t                    r| j        |j        k    S t          S )zReturn self == other.r2   r   r.   NotImplementedr'   rA   s     r   __eq__zRomanNumeral.__eq___   s)    e\** 	/;%,..r   c                Z    t          |t                    r| j        |j        k     S t          S )zReturn self < other.rD   rF   s     r   __lt__zRomanNumeral.__lt__e   s)    e\** 	.;--r   c                *    t          | j                  S )z(Return the hashed value of this numeral.)hashr.   r8   s    r   __hash__zRomanNumeral.__hash__k   s    DK   r   keyc                    |dk    rd|d}t          |          t                                          ||           dS )z%Implement setattr(self, name, value).r.   zCannot set the z attribute.N)AttributeErrorr%   r5   )r'   rM   r   r(   r)   s       r   r5   zRomanNumeral.__setattr__o   sJ    (??6C666C %%%C'''''r   c                    g }| j         }t          D ],\  }}}||k    r ||z  }|                    |           ||k     -d                    |          S )zConvert a ``RomanNumeral`` to an uppercase string.

        >>> answer = RomanNumeral(42)
        >>> assert answer.to_uppercase() == 'XLII'
         r.   _ROMAN_NUMERAL_PREFIXESappendjoin)r'   outnr   name_s         r   r;   zRomanNumeral.to_uppercasev   sg     K5 	! 	!NE4u**U


4    u** wws||r   c                    g }| j         }t          D ],\  }}}||k    r ||z  }|                    |           ||k     -d                    |          S )zConvert a ``RomanNumeral`` to a lowercase string.

        >>> answer = RomanNumeral(42)
        >>> assert answer.to_lowercase() == 'xlii'
        rQ   rR   )r'   rV   rW   r   rY   rX   s         r   to_lowercasezRomanNumeral.to_lowercase   sg     K5 	! 	!NE1du**U


4    u** wws||r   stringr   c               b   |rt          |t                    st          |          |                                r*|                                r|                    d          }n_|                                r<|                                r(|                                                    d          }nt          |          t          d          	                    |          st          |          d}d}t          d          D ]}|||dz            dk    r|dz  }|dz  } t          |          |k    r | |          S |||dz            d	k    r|d
z  }|dz  }ne|||dz            dk    r|dz  }|dz  }nI|||dz            dk    r
|dz  }|dz  }t          d          D ]}|||dz            dk    r|dz  }|dz  } t          |          |k    r | |          S |||dz            dk    r|dz  }|dz  }ne|||dz            dk    r|dz  }|dz  }nI|||dz            dk    r
|dz  }|dz  }t          d          D ]}|||dz            dk    r|dz  }|dz  } t          |          |k    r | |          S |||dz            dk    r|dz  }|dz  }ne|||dz            dk    r|dz  }|dz  }nI|||dz            dk    r
|dz  }|dz  }t          d          D ]}|||dz            dk    r|dz  }|dz  } t          |          |k    r | |          S t          |          ) zCreate a ``RomanNumeral`` from a well-formed string representation.

        Returns ``RomanNumeral`` or raises ``InvalidRomanNumeralError``.

        >>> answer = RomanNumeral.from_string('XLII')
        >>> assert int(answer) == 42
        asciis   IVXLCDMr      r      M     s   CM  s   CD     D  r      Cd   s   XCZ   s   XL(      L2      X
   s   IX	   s   IV   V      I)r2   r    r   isasciiisupperencodeislowerupper	frozenset
issupersetrangelen)clsr\   charsresultidxrY   s         r   from_stringzRomanNumeral.from_string   s     	3Z44 	3*6222 >> 	3 0 0 	3MM'**EE^^ 	3&.."2"2 	3LLNN))'22EE +6222 $$//66 	3*6222 q 	 	AS37]#t++$qu::3v;; sQw5((cMF1HCC3q=!U**cMF1HCCS37]#t++#q1XX  sQw'4//cMF1HCCu::3v;; sQw5((bLF1HCC3q=!U**bLF1HCCS37]#t++"q1XX  sQw'4//bLF1HCCu::3v;; sQw5((aKF1HCC3q=!U**aKF1HCCS37]#t++!q1XX  sQw'4//aKF1HCCu::3v;;&v...r   )r   r/   r
   r#   )r
   r/   )r
   r    )rA   r"   r
   rB   )rM   r    r   r"   r
   r#   )r\   r    r
   r   )r   r   r   r   	__slots____annotations__r&   r9   r<   r@   rG   rI   rL   r5   r;   r[   classmethodr   r*   r+   s   @r   r   r   :   s?          IKKK- - - - - -   # # # #= = = =      ! ! ! !( ( ( ( ( (       d/ d/ d/ [d/ d/ d/ d/ d/r   r   ra   Mmrc   CMcmrf   Ddrd   CDcdrh   Ccri   XCxcrl   Llrj   XLxlrn   Xxro   IXixrq   Vvr_   IVivIirS   )r	   r   r
   r   )r   
__future__r   sysTYPE_CHECKINGtypingr   r   r   typing_extensionsr   r   r   r   r   r   r   r   r4   r   
ValueErrorr   r   internrS   r   r   r   <module>r      sd     # " " " " " 



 	,,,,,,,,,,&&&&&&	BB                  :     9 = = = = =i = = = % % % % %z % % % |/ |/ |/ |/ |/ |/ |/ |/@ 
:3:c??JCJsOO,*#*T

JCJt,,-*#*S//:3:c??+*#*T

JCJt,,-*#*S//:3:c??+D		:3:d++,C*#*S//*D		:3:d++,C*#*S//*

4*#*T**+

3C)

4*#*T**+

3C)"      C Br   