o
    iY                      @  s  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 deZeG dd deZeG dd dZdededfdededfdededfdeded fd!ed"ed#fd$ed%ed&fd'ed(ed)fd*ed+ed,fd-ed.ed/fd0ed1ed2fd3ed4ed5fd6ed7ed8fded9ed:fgZd	ed;< dS )<z/Conversion between integers and roman numerals.    )annotationsNF)Finalfinal)Self)r   )MAXMINInvalidRomanNumeralErrorOutOfRangeErrorRomanNumeralr   __all__   r   i  r   c                   @  s   e Zd ZdZdS )r	   z2Number out of range (must be between 1 and 4,999).N)__name__
__module____qualname____doc__ r   r   d/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/docutils/utils/_roman_numerals.pyr	   +   s    r	   c                      s"   e Zd ZdZd
 fdd	Z  ZS )r   zNot a valid Roman numeral.valuestrargsobjectreturnNonec                   s"   d| }t  j|g|R   d S )NzInvalid Roman numeral: )super__init__)selfr   r   msg	__class__r   r   r   4   s   
z!InvalidRomanNumeralError.__init__)r   r   r   r   r   r   )r   r   r   r   r   __classcell__r   r   r   r   r   0   s    r   c                      s   e Zd ZU dZdZded< d% fdd	Zd&d
dZd'ddZd'ddZ	d(ddZ
d(ddZd&ddZd) fddZd'ddZd'dd Zed*d#d$Z  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!   r   r   r   c                  s\   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 4,999). Got .r!   )

isinstancer"   typer   	TypeErrorr   r   r	   r   __setattr__)r   r   value_qualnamer   r   r   r   r   H   s   


zRomanNumeral.__init__c                 C  s   | j S )z)Return the integer value of this numeral.r    r   r   r   r   __int__R   s   zRomanNumeral.__int__r   c                 C  s   |   S )z;Return the well-formed (uppercase) string for this numeral.)to_uppercaser)   r   r   r   __str__V   s   zRomanNumeral.__str__c                 C  s   | j j d| jdS )z1Return the string representation of this numeral.())r   r   r!   r)   r   r   r   __repr__Z   s   zRomanNumeral.__repr__otherr   boolc                 C  s   t |tr| j|jkS tS )zReturn self == other.r$   r
   r!   NotImplementedr   r0   r   r   r   __eq__^      
zRomanNumeral.__eq__c                 C  s   t |tr| j|jk S tS )zReturn self < other.r2   r4   r   r   r   __lt__d   r6   zRomanNumeral.__lt__c                 C  s
   t | jS )z(Return the hashed value of this numeral.)hashr!   r)   r   r   r   __hash__j   s   
zRomanNumeral.__hash__keyc                   s.   |dkrd|d}t |t || dS )z%Implement setattr(self, name, value).r!   zCannot set the z attribute.N)AttributeErrorr   r'   )r   r:   r   r   r   r   r   r'   n   s   zRomanNumeral.__setattr__c                 C  sF   g }| j }tD ]\}}}||kr||8 }|| ||ksq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_r   r   r   r+   u      

zRomanNumeral.to_uppercasec                 C  sF   g }| j }tD ]\}}}||kr||8 }|| ||ksqd|S )zConvert a ``RomanNumeral`` to a lowercase string.

        >>> answer = RomanNumeral(42)
        >>> assert answer.to_lowercase() == 'xlii'
        r<   r=   )r   rA   rB   r   rD   rC   r   r   r   to_lowercase   rE   zRomanNumeral.to_lowercasestringr   c                C  s   |rt |tst|| r| r|d}n| r)| r)| d}nt|td	|s8t|d}d}t
dD ]}|||d  dkrU|d7 }|d7 }q@ t||kr`| |S |||d  d	krs|d
7 }|d7 }n?|||d  dkr|d7 }|d7 }n,|||d  dkr|d7 }|d7 }t
dD ]}|||d  dkr|d7 }|d7 }q t||kr| |S |||d  dkr|d7 }|d7 }n@|||d  dkr|d7 }|d7 }n-|||d  dkr|d7 }|d7 }t
dD ]}|||d  dkr|d7 }|d7 }q t||kr| |S |||d  dkr.|d7 }|d7 }nC|||d  dkrB|d7 }|d7 }n/|||d  dkrU|d7 }|d7 }t
dD ]}|||d  dkrp|d7 }|d7 }qY 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)clsrG   charsresultidxrD   r   r   r   from_string   s   









zRomanNumeral.from_string)r   r"   r   r   )r   r"   )r   r   )r0   r   r   r1   )r:   r   r   r   r   r   )rG   r   r   r   )r   r   r   r   	__slots____annotations__r   r*   r,   r/   r5   r7   r9   r'   r+   rF   classmethodrk   r   r   r   r   r   r
   9   s    
 









r
   rK   MmrM   CMcmrP   DdrN   CDcdrS   CcrT   XCxcrW   LlrU   XLxlrY   XxrZ   IXixr\   VvrI   IVivIir>   )r   
__future__r   sysTYPE_CHECKINGtypingr   r   docutils.utils._typingr   r   rm   r   r   r&   r	   
ValueErrorr   r
   internr>   r   r   r   r   <module>   sF    A