
    k7iY                        % S r SSKJr  SSKrSr\(       a  SSKJrJr  SSKJ	r	  OSSKJr  Sr
S	\S
'   SrS	\S'    SrS	\S'    \ " S S\5      5       r\ " S S\5      5       r\ " S S5      5       rS\R&                  " S5      \R&                  " S5      4S\R&                  " S5      \R&                  " S5      4S\R&                  " S5      \R&                  " S5      4S\R&                  " S5      \R&                  " S 5      4S!\R&                  " S"5      \R&                  " S#5      4S$\R&                  " S%5      \R&                  " S&5      4S'\R&                  " S(5      \R&                  " S)5      4S*\R&                  " S+5      \R&                  " S,5      4S-\R&                  " S.5      \R&                  " S/5      4S0\R&                  " S15      \R&                  " S25      4S3\R&                  " S45      \R&                  " S55      4S6\R&                  " S75      \R&                  " S85      4S\R&                  " S95      \R&                  " S:5      4/rS	\S;'   g)<z/Conversion between integers and roman numerals.    )annotationsNF)Finalfinal)Self)r   )MAXMINInvalidRomanNumeralErrorOutOfRangeErrorRomanNumeralr   __all__   r   i  r   c                      \ rS rSrSrSrg)r
   +   z2Number out of range (must be between 1 and 4,999). N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       X/home/james-whalen/.local/lib/python3.13/site-packages/docutils/utils/_roman_numerals.pyr
   r
   +   s    <r   r
   c                  0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )r	   0   zNot a valid Roman numeral.c                2   > SU 3n[         TU ]  " U/UQ76   g )NzInvalid Roman numeral: )super__init__)selfvalueargsmsg	__class__s       r   r   !InvalidRomanNumeralError.__init__4   s!    'w/$t$r   r   )r   strr    objectreturnNone)r   r   r   r   r   r   r   __classcell__r"   s   @r   r	   r	   0   s    $% %r   r	   c                     ^  \ rS rSr% SrSrS\S'   SU 4S jjrSS jrSS jr	SS	 jr
SS
 jrSS jrSS jrSU 4S jjrSS jrSS jr\SS j5       rSrU =r$ )r   9   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                  > [        U[        5      (       d&  [        U5      R                  nSU< 3n[	        U5      eU[
        :  d
  U[        :  a  SU S3n[        U5      e[        TU ]%  SU5        g )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   RomanNumeral.__init__H   sl    %%%!%[55N>~>PQCC. 3;%#+KE7RSTC!#&&He,r   c                    U R                   $ )z)Return the integer value of this numeral.r,   r   s    r   __int__RomanNumeral.__int__R   s    {{r   c                "    U R                  5       $ )z;Return the well-formed (uppercase) string for this numeral.)to_uppercaser8   s    r   __str__RomanNumeral.__str__V   s      ""r   c                P    U R                   R                   SU R                  < S3$ )z1Return the string representation of this numeral.())r"   r   r-   r8   s    r   __repr__RomanNumeral.__repr__Z   s$    ..))*!DKK?!<<r   c                j    [        U[        5      (       a  U R                  UR                  :H  $ [        $ )zReturn self == other.r1   r   r-   NotImplementedr   others     r   __eq__RomanNumeral.__eq__^   s(    e\**;;%,,..r   c                j    [        U[        5      (       a  U R                  UR                  :  $ [        $ )zReturn self < other.rE   rG   s     r   __lt__RomanNumeral.__lt__d   s(    e\**;;--r   c                ,    [        U R                  5      $ )z(Return the hashed value of this numeral.)hashr-   r8   s    r   __hash__RomanNumeral.__hash__j   s    DKK  r   c                T   > US:X  a  SU< S3n[        U5      e[        TU ]	  X5        g)z%Implement setattr(self, name, value).r-   zCannot set the z attribute.N)AttributeErrorr   r4   )r   keyr   r!   r"   s       r   r4   RomanNumeral.__setattr__n   s0    (?#C7+6C %%C'r   c                    / nU R                   n[         H)  u  p4nX#:  d  M  X#-  nUR                  U5        X#:  a  M  M+     SR                  U5      $ )z}Convert 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<   RomanNumeral.to_uppercaseu   sO     KK5NE*


4  * 6 wws|r   c                    / nU R                   n[         H)  u  p4nX#:  d  M  X#-  nUR                  U5        X#:  a  M  M+     SR                  U5      $ )z|Convert a ``RomanNumeral`` to a lowercase string.

>>> answer = RomanNumeral(42)
>>> assert answer.to_lowercase() == 'xlii'
rW   rX   )r   r\   r]   r   r_   r^   s         r   to_lowercaseRomanNumeral.to_lowercase   sO     KK5NEd*


4  * 6 wws|r   c               j   U(       a  [        U[        5      (       d  [        U5      eUR                  5       (       a'  UR	                  5       (       a  UR                  S5      nOUUR                  5       (       a5  UR                  5       (       a   UR                  5       R                  S5      nO[        U5      e[        S5      R                  U5      (       d  [        U5      eSnSn[        S5       H  nX$US-    S:X  a  US-  nUS-  nM    O   [        U5      U:X  a  U " U5      $ X$US-    S	:X  a  US
-  nUS-  nOTX$US-    S:X  a  US-  nUS-  nO>X$US-    S:X  a
  US-  nUS-  n[        S5       H  nX$US-    S:X  a  US-  nUS-  nM    O   [        U5      U:X  a  U " U5      $ X$US-    S:X  a  US-  nUS-  nOTX$US-    S:X  a  US-  nUS-  nO>X$US-    S:X  a
  US-  nUS-  n[        S5       H  nX$US-    S:X  a  US-  nUS-  nM    O   [        U5      U:X  a  U " U5      $ X$US-    S:X  a  US-  nUS-  nOTX$US-    S:X  a  US-  nUS-  nO>X$US-    S:X  a
  US-  nUS-  n[        S5       H  nX$US-    S:X  a  US-  nUS-  nM    O   [        U5      U:X  a  U " U5      $ [        U5      e) 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)r1   r$   r	   isasciiisupperencodeislowerupper	frozenset
issupersetrangelen)clsstringcharsresultidxr_   s         r   from_stringRomanNumeral.from_string   s.    Z44*622 >> 0 0MM'*E^^&.."2"2LLN))'2E +622 $//66*622 qAq!T)$q  u:v; S1W&cMF1HCsQw5(cMF1HCq!T)#q1XS1W%-cMF1HC  u:v; S1W&bLF1HCsQw5(bLF1HCq!T)"q1XS1W%-bLF1HC  u:v; S1W&aKF1HCsQw5(aKF1HCq!T)!q1XS1W%-aKF1HC  u:v;&v..r   r   )r   r.   r&   r'   )r&   r.   )r&   r$   )rH   r%   r&   bool)rT   r$   r   r%   r&   r'   )r   r$   r&   r   )r   r   r   r   r   	__slots____annotations__r   r9   r=   rB   rI   rL   rP   r4   r<   rb   classmethodr   r   r(   r)   s   @r   r   r   9   s\     IK-#=!( d/ d/r   r   rh   Mmrj   CMcmrm   Ddrk   CDcdrp   Ccrq   XCxcrt   Llrr   XLxlrv   Xxrw   IXixry   Vvrf   IVivIirY   )r   
__future__r   sysTYPE_CHECKINGtypingr   r   docutils.utils._typingr   r   r   r   r   r3   r
   
ValueErrorr	   r   internrY   r   r   r   <module>r      s   6 " 
#+,  U : U  9 =i = = %z % % |/ |/ |/@ 
3::c?CJJsO,#**T
CJJt,-#**S/3::c?+#**T
CJJt,-#**S/3::c?+D	3::d+,C#**S/*D	3::d+,C#**S/*

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

3C)

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

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