
    f2iY                        U d Z ddlmZ ddlZdZerddlmZmZ ddlm	Z	 nddlmZ 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&                  d)      fd* ej&                  d+       ej&                  d,      fd- ej&                  d.       ej&                  d/      fd0 ej&                  d1       ej&                  d2      fd3 ej&                  d4       ej&                  d5      fd6 ej&                  d7       ej&                  d8      fd ej&                  d9       ej&                  d:      fgZd	ed;<   y)<z/Conversion between integers and roman numerals.    )annotationsNF)Finalfinal)Self)r   )MAXMINInvalidRomanNumeralErrorOutOfRangeErrorRomanNumeralr   __all__   r   i  r   c                      e Zd ZdZy)r
   z2Number out of range (must be between 1 and 4,999).N)__name__
__module____qualname____doc__     h/mnt/e/genesis-system/.venvs/voice-bridge/lib/python3.12/site-packages/docutils/utils/_roman_numerals.pyr
   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.c                0    d| }t        |   |g|  y )NzInvalid Roman numeral: )super__init__)selfvalueargsmsg	__class__s       r   r   z!InvalidRomanNumeralError.__init__4   s!    'w/$t$r   )r   strr   objectreturnNone)r   r   r   r   r   __classcell__r   s   @r   r	   r	   0   s    $% %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 4,999 are valid.
    Stores the value internally as an ``int``.

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

isinstancer(   typer   	TypeErrorr   r   r
   r   __setattr__)r   r   value_qualnamer   r   s       r   r   zRomanNumeral.__init__H   si    %%!%[55N>~>PQCC. 3;%#+KE7RSTC!#&&He,r   c                    | j                   S )z)Return the integer value of this numeral.r&   r   s    r   __int__zRomanNumeral.__int__R   s    {{r   c                "    | j                         S )z;Return the well-formed (uppercase) string for this numeral.)to_uppercaser1   s    r   __str__zRomanNumeral.__str__V   s      ""r   c                N    | j                   j                   d| j                  dS )z1Return the string representation of this numeral.())r   r   r'   r1   s    r   __repr__zRomanNumeral.__repr__Z   s$    ..))*!DKK?!<<r   c                `    t        |t              r| j                  |j                  k(  S t        S )zReturn self == other.r+   r   r'   NotImplementedr   others     r   __eq__zRomanNumeral.__eq__^   s%    e\*;;%,,..r   c                `    t        |t              r| j                  |j                  k  S t        S )zReturn self < other.r;   r=   s     r   __lt__zRomanNumeral.__lt__d   s%    e\*;;--r   c                ,    t        | j                        S )z(Return the hashed value of this numeral.)hashr'   r1   s    r   __hash__zRomanNumeral.__hash__j   s    DKK  r   c                R    |dk(  rd|d}t        |      t        | 	  ||       y)z%Implement setattr(self, name, value).r'   zCannot set the z attribute.N)AttributeErrorr   r.   )r   keyr   r   r   s       r   r.   zRomanNumeral.__setattr__n   s2    (?#C7+6C %%C'r   c                    g }| j                   }t        D ](  \  }}}||k\  s||z  }|j                  |       ||k\  r* dj                  |      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   r4   zRomanNumeral.to_uppercaseu   s\     KK5 	!NE4u*U


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

        >>> answer = RomanNumeral(42)
        >>> assert answer.to_lowercase() == 'xlii'
        rI   rJ   )r   rN   rO   r   rQ   rP   s         r   to_lowercasezRomanNumeral.to_lowercase   s\     KK5 	!NE1du*U


4  u*	! wws|r   c                  |rt        |t              st        |      |j                         r"|j	                         r|j                  d      }nK|j                         r0|j                         r |j                         j                  d      }nt        |      t        d      j                  |      st        |      d}d}t        d      D ]  }|||dz    dk(  r|dz  }|dz  } n t        |      |k(  r | |      S |||dz    d	k(  r|d
z  }|dz  }nR|||dz    dk(  r|dz  }|dz  }n<|||dz    dk(  r
|dz  }|dz  }t        d      D ]  }|||dz    dk(  r|dz  }|dz  } n t        |      |k(  r | |      S |||dz    dk(  r|dz  }|dz  }nR|||dz    dk(  r|dz  }|dz  }n<|||dz    dk(  r
|dz  }|dz  }t        d      D ]  }|||dz    dk(  r|dz  }|dz  } n t        |      |k(  r | |      S |||dz    dk(  r|dz  }|dz  }nR|||dz    dk(  r|dz  }|dz  }n<|||dz    dk(  r
|dz  }|dz  }t        d      D ]  }|||dz    dk(  r|dz  }|dz  } n 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        Cd   s   XCZ   s   XL(      L2      X
   s   IX	   s   IV   V      I)r+   r   r	   isasciiisupperencodeislowerupper	frozenset
issupersetrangelen)clsstringcharsresultidxrQ   s         r   from_stringzRomanNumeral.from_string   sJ    Z4*622 >> 0MM'*E^^&.."2LLN))'2E +622 $//6*622 q 	ASq!T)$q	 u:v; S1W&cMF1HC3sQw5(cMF1HCSq!T)#q1X S1W%-cMF1HC u:v; S1W&bLF1HC3sQw5(bLF1HCSq!T)"q1X S1W%-bLF1HC u:v; S1W&aKF1HC3sQw5(aKF1HCSq!T)!q1X S1W%-aKF1HC u:v;&v..r   )r   r(   r!   r"   )r!   r(   )r!   r   )r>   r    r!   bool)rG   r   r   r    r!   r"   )ru   r   r!   r   )r   r   r   r   	__slots____annotations__r   r2   r5   r9   r?   rA   rD   r.   r4   rS   classmethodry   r#   r$   s   @r   r   r   9   s\     IK-#=!( d/ d/r   r   rX   MmrZ   CMcmr]   Ddr[   CDcdr`   Ccra   XCxcrd   Llrb   XLxlrf   Xxrg   IXixri   VvrV   IVivIirK   )r   
__future__r   sysTYPE_CHECKINGtypingr   r   docutils.utils._typingr   r   r|   r   r   r-   r
   
ValueErrorr	   r   internrK   r   r   r   <module>r      sH   6 " 
#+,  U : U  9 =i = = %z % % |/ |/ |/@ 
:3::c?JCJJsO,*#**T
JCJJt,-*#**S/:3::c?+*#**T
JCJJt,-*#**S/:3::c?+D	:3::d+,C*#**S/*D	:3::d+,C*#**S/*


4*#**T*+


3C)


4*#**T*+


3C)"   Cr   