o
    gRn                     @   sv   	 d dl mZ d dlZd dlZd dlZd dlZd dlZdgZejj	Z
ejjZedejejB ZG dd dejZdS )    DecimalNFractionaC  
    \A\s*                      # optional whitespace at the start, then
    (?P<sign>[-+]?)            # an optional sign, then
    (?=\d|\.\d)                # lookahead for digit or .digit
    (?P<num>\d*)               # numerator (possibly empty)
    (?:                        # followed by
       (?:/(?P<denom>\d+))?    # an optional denominator
    |                          # or
       (?:\.(?P<decimal>\d*))? # an optional fractional part
       (?:E(?P<exp>[-+]?\d+))? # and optional exponent
    )
    \s*\Z                      # and optional whitespace to finish
c                       s  e Zd Z	 dZdQdd fddZedd	 Zed
d Zdd ZdRddZ	e
dd Ze
dd Zdd Zdd Zdd Zdd Zeeej\ZZdd Zeeej\ZZdd  Zeeej\ZZd!d" Zeeej\ZZ d#d$ Z!ee!ej"\Z#Z$d%d& Z%ee%e&\Z'Z(d'd( Z)ee)ej*\Z+Z,d)d* Z-d+d, Z.d-d. Z/d/d0 Z0d1d2 Z1d3d4 Z2d5d6 Z3d7d8 Z4dSd9d:Z5d;d< Z6d=d> Z7d?d@ Z8dAdB Z9dCdD Z:dEdF Z;dGdH Z<dIdJ Z=dKdL Z>dMdN Z?dOdP Z@  ZAS )Tr   
_numerator_denominatorr   NT
_normalizec                   s  	 t t| | }|d u rt|tu r||_d|_|S t|tj	r+|j
|_|j|_|S t|ttfr<| \|_|_|S t|trt|}|d u rPtd| t|dpWd}|d}|ret|}n8d}|d}|rdt| }|| t| }||9 }|d}	|	rt|	}	|	d	kr|d|	 9 }n|d|	  9 }|d
dkr| }n3tdt|t  u rt|u rn nnt|tj	rt|tj	r|j
|j |j
|j }}ntd|d	krtd| |rt||}
|d	k r|
 }
||
 }||
 }||_||_|S )N   z Invalid literal for Fraction: %rnum0denomdecimal
   expr   Zsign-z2argument should be a string or a Rational instancez+both arguments should be Rational instanceszFraction(%s, 0))superr   __new__typeintr   r   
isinstancenumbersRational	numeratordenominatorfloatr   as_integer_ratiostr_RATIONAL_FORMATmatch
ValueErrorgrouplen	TypeErrorZeroDivisionErrormathgcd)clsr   r   r	   selfmr   r   Zscaler   g	__class__ ?/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/fractions.pyr   >   sx   





 


zFraction.__new__c                 C   sF   	 t |tjr| |S t |tstd| j|t|jf | |  S )Nz.%s.from_float() only takes floats, not %r (%s))r   r   Integralr   r#   __name__r   r   )r'   fr-   r-   r.   
from_float   s   
zFraction.from_floatc                 C   sX   	 ddl m} t|tjr|t|}nt||s&td| j|t|jf | |	  S )Nr   r   z2%s.from_decimal() only takes Decimals, not %r (%s))
r   r   r   r   r/   r   r#   r0   r   r   )r'   Zdecr   r-   r-   r.   from_decimal   s   
zFraction.from_decimalc                 C   s   	 | j | jfS Nr   r(   r-   r-   r.   r      s   zFraction.as_integer_ratio@B c                 C   s   	 |dk r	t d| j|krt| S d\}}}}| j| j}}	 || }|||  }	|	|kr/qG|||||  |	f\}}}}||||  }}q || | }
t||
|  ||
|  }t||}t||  t||  krm|S |S )Nr
   z$max_denominator should be at least 1)r   r
   r
   r   T)r    r   r   r   abs)r(   Zmax_denominatorZp0Zq0Zp1Zq1ndaZq2kZbound1Zbound2r-   r-   r.   limit_denominator   s*   

zFraction.limit_denominatorc                 C      | j S r4   )r   r:   r-   r-   r.   r         zFraction.numeratorc                 C   r=   r4   )r   r>   r-   r-   r.   r     r?   zFraction.denominatorc                 C   s   	 d| j j| j| jf S )Nz
%s(%s, %s))r,   r0   r   r   r5   r-   r-   r.   __repr__  s   zFraction.__repr__c                 C   s&   	 | j dkrt| jS d| j| j f S )Nr
   z%s/%s)r   r   r   r5   r-   r-   r.   __str__  s   

zFraction.__str__c                    sV   	  fdd}d j  d |_ j|_ fdd}d j  d |_ j|_||fS )Nc                    sL   t |ttfr| |S t |tr t| |S t |tr$ t| |S tS r4   )r   r   r   r   complexNotImplementedr:   bfallback_operatormonomorphic_operatorr-   r.   forwardd  s   


z-Fraction._operator_fallbacks.<locals>.forward__c                    sV   t |tjr|| S t |tjr t|t| S t |tjr) t|t| S tS r4   )r   r   r   ZRealr   ComplexrB   rC   rE   r:   rF   r-   r.   reversep  s   
z-Fraction._operator_fallbacks.<locals>.reverseZ__r)r0   __doc__)rH   rG   rI   rM   r-   rF   r.   _operator_fallbacks  s   O	
zFraction._operator_fallbacksc           
      C   s   	 | j | j}}|j |j}}t||}|dkr(t|| ||  || ddS || }|||  ||  }t||}	|	dkrIt||| ddS t||	 |||	  ddS Nr
   Fr   r   r   r%   r&   r   
r:   rE   nadanbdbr*   stg2r-   r-   r.   _add     zFraction._addc           
      C   s   	 | j | j}}|j |j}}t||}|dkr(t|| ||  || ddS || }|||  ||  }t||}	|	dkrIt||| ddS t||	 |||	  ddS rP   rQ   rR   r-   r-   r.   _sub  r[   zFraction._subc                 C   s|   	 | j | j}}|j |j}}t||}|dkr!|| }|| }t||}|dkr3|| }|| }t|| || ddS rP   rQ   )r:   rE   rS   rT   rU   rV   g1rY   r-   r-   r.   _mul  s   zFraction._mulc           
      C   s   	 | j | j}}|j |j}}t||}|dkr!|| }|| }t||}|dkr3|| }|| }|| || }}	|	dk rG| |	 }}	t||	ddS Nr
   r   Fr   rQ   )
r:   rE   rS   rT   rU   rV   r]   rY   r8   r9   r-   r-   r.   _div  s   zFraction._divc                 C   s   	 | j |j | j|j   S r4   r   r   rD   r-   r-   r.   	_floordiv  s   zFraction._floordivc                 C   s<   	 | j |j }}t| j| ||j \}}|t||| fS r4   )r   divmodr   r   )r:   rE   rT   rV   ZdivZn_modr-   r-   r.   _divmod  s   zFraction._divmodc                 C   s.   	 | j |j }}t| j| |j|  || S r4   )r   r   r   )r:   rE   rT   rV   r-   r-   r.   _mod  s   zFraction._modc                 C   s   	 t |tjrM|jdkrE|j}|dkr t| j| | j| ddS | jdkr4t| j|  | j|  ddS t| j |  | j |  ddS t| t| S t| | S r_   )	r   r   r   r   r   r   r   r   r   )r:   rE   Zpowerr-   r-   r.   __pow__  s(   



zFraction.__pow__c                 C   s^   	 | j dkr| jdkr|| j S t|tjrt|j|j|  S | j dkr)|| j S |t|  S )Nr
   r   )	r   r   r   r   r   r   r   r   r   rL   r-   r-   r.   __rpow__:  s   


zFraction.__rpow__c                 C   s   	 t | j| jddS NFr   r   r   r   r>   r-   r-   r.   __pos__H  s   zFraction.__pos__c                 C   s   	 t | j | jddS rh   ri   r>   r-   r-   r.   __neg__L  s   zFraction.__neg__c                 C   s   	 t t| j| jddS rh   )r   r7   r   r   r>   r-   r-   r.   __abs__P  s   zFraction.__abs__c                 C   s(   	 | j dk r| j  | j  S | j | j S )Nr   r   r>   r-   r-   r.   	__trunc__T  s   
zFraction.__trunc__c                 C   s   	 | j | j S r4   ra   r>   r-   r-   r.   	__floor__[  s   zFraction.__floor__c                 C   s   	 | j  | j  S r4   ra   r>   r-   r-   r.   __ceil___  s   zFraction.__ceil__c                 C   s   	 |d u r.t | j| j\}}|d | jk r|S |d | jkr"|d S |d dkr*|S |d S dt| }|dkrAtt| | |S tt| | | S )N   r
   r   r   )rc   r   r   r7   r   round)r(   Zndigitsfloor	remaindershiftr-   r-   r.   	__round__d  s   zFraction.__round__c                 C   sf   	 z	t | jdt}W n ty   t}Y nw ttt| j| }| jdkr(|n| }|dkr1dS |S )Nr   )powr   _PyHASH_MODULUSr    _PyHASH_INFhashr7   r   )r(   ZdinvZhash_resultr-   r-   r.   __hash__}  s   zFraction.__hash__c                 C   s   	 t |tu r| j|ko| jdkS t|tjr#| j|jko"| j|jkS t|tj	r1|j
dkr1|j}t|trKt|s@t|rDd|kS | | |kS tS )Nr
   r           )r   r   r   r   r   r   r   r   r   rK   imagrealr   r%   isnanisinfr2   rC   rD   r-   r-   r.   __eq__  s   

zFraction.__eq__c                 C   sd   	 t |tjr|| j|j | j|j S t |tr0t	|s#t
|r(|d|S || | |S tS )Nr~   )r   r   r   r   r   r   r   r   r%   r   r   r2   rC   )r(   otheropr-   r-   r.   _richcmp  s   



zFraction._richcmpc                 C      	 |  |tjS r4   )r   operatorltrD   r-   r-   r.   __lt__     zFraction.__lt__c                 C   r   r4   )r   r   gtrD   r-   r-   r.   __gt__  r   zFraction.__gt__c                 C   r   r4   )r   r   lerD   r-   r-   r.   __le__  r   zFraction.__le__c                 C   r   r4   )r   r   gerD   r-   r-   r.   __ge__  r   zFraction.__ge__c                 C   s   	 t | jS r4   )boolr   r>   r-   r-   r.   __bool__  s   
zFraction.__bool__c                 C   s   | j t| ffS r4   )r,   r   r5   r-   r-   r.   
__reduce__  s   zFraction.__reduce__c                 C       t | tkr| S | | j| jS r4   r   r   r,   r   r   r5   r-   r-   r.   __copy__     zFraction.__copy__c                 C   r   r4   r   )r(   memor-   r-   r.   __deepcopy__  r   zFraction.__deepcopy__)r   N)r6   r4   )Br0   
__module____qualname__	__slots__r   classmethodr2   r3   r   r<   propertyr   r   r@   rA   rO   rZ   r   add__add____radd__r\   sub__sub____rsub__r^   mul__mul____rmul__r`   truediv__truediv____rtruediv__rb   floordiv__floordiv____rfloordiv__rd   rc   
__divmod____rdivmod__re   mod__mod____rmod__rf   rg   rj   rk   rl   rm   rn   ro   ru   r}   r   r   r   r   r   r   r   r   r   r   __classcell__r-   r-   r+   r.   r   &   sh    i


7

 0
!)r   r   r%   r   r   resys__all__	hash_infomodulusry   infrz   compileVERBOSE
IGNORECASEr   r   r   r-   r-   r-   r.   <module>   s   
