???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    e5d	_                     @   s   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dgZdd Zdd 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Fractiongcdc                 C   sf   dd l }|dtd t| t  kr2t|kr\n n&|p<| dk rPt| | S t| |S t| |S )Nr   z6fractions.gcd() is deprecated. Use math.gcd() instead.   )warningswarnDeprecationWarningtypeintmathr   _gcd)abr    r   !/usr/lib64/python3.8/fractions.pyr      s      c                 C   s   |r|| |  } }q | S Nr   r   r   r   r   r   r       s    r   aC  
    \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                   sR  t t| | }|d krdt|tkr6||_d|_|S t|tj	rV|j
|_|j|_|S t|ttfrx| \|_|_|S t|trZt|}|d krtd| t|dpd}|d}|rt|}nvd}|d}|rdt| }|| t| }||9 }|d}	|	rBt|	}	|	d	kr4|d|	 9 }n|d|	  9 }|d
dkrb| }ntdnft|t  krt|krn nn@t|tj	rt|tj	r|j
|j |j
|j  }}ntd|d	krtd| |rBt|t  krt|kr(n nt||}
|d	k r2|
 }
n
t||}
||
 }||
 }||_||_|S )N   z Invalid literal for Fraction: %rZ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__r
   r   r   r   
isinstancenumbersRational	numeratordenominatorfloatr   as_integer_ratiostr_RATIONAL_FORMATmatch
ValueErrorgrouplen	TypeErrorZeroDivisionErrorr   r   r   )clsr%   r&   r   selfmr   r   Zscaler   g	__class__r   r   r!   T   sx    







$



$

zFraction.__new__c                 C   sD   t |tjr| |S t |ts8td| j|t|jf | |  S )Nz.%s.from_float() only takes floats, not %r (%s))r"   r#   Integralr'   r/   __name__r
   r(   )r1   fr   r   r   
from_float   s    
zFraction.from_floatc                 C   sV   ddl m} t|tjr&|t|}n$t||sJtd| j|t|jf | |	  S )Nr   r   z2%s.from_decimal() only takes Decimals, not %r (%s))
r   r   r"   r#   r7   r   r/   r8   r
   r(   )r1   Zdecr   r   r   r   from_decimal   s    
zFraction.from_decimalc                 C   s   | j | jfS r   r   r2   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rZq|||||  |	f\}}}}||||   }}q<|| | }
t||
|  ||
|  }t||}t||  t||  kr|S |S d S )Nr   z$max_denominator should be at least 1)r   r   r   r   )r,   r   r   r   abs)r2   Zmax_denominatorZp0Zq0Zp1Zq1ndr   Zq2kZbound1Zbound2r   r   r   limit_denominator   s$     

zFraction.limit_denominatorc                 C   s   | j S r   )r   r   r   r   r   r%     s    zFraction.numeratorc                 C   s   | j S r   )r   rC   r   r   r   r&     s    zFraction.denominatorc                 C   s   d| j j| j| jf S )Nz
%s(%s, %s))r6   r8   r   r   r<   r   r   r   __repr__"  s     zFraction.__repr__c                 C   s(   | j dkrt| jS d| j| j f S d S )Nr   z%s/%s)r   r)   r   r<   r   r   r   __str__'  s    

zFraction.__str__c                    sT    fdd}d j  d |_ j|_ fdd}d j  d |_ j|_||fS )Nc                    sP   t |ttfr| |S t |tr0 t| |S t |trH t| |S tS d S r   )r"   r   r   r'   complexNotImplementedr   fallback_operatormonomorphic_operatorr   r   forward~  s    


z-Fraction._operator_fallbacks.<locals>.forward__c                    sZ   t |tjr|| S t |tjr4 t|t| S t |tjrR t|t| S tS d S r   )r"   r#   r$   ZRealr'   ComplexrF   rG   r   r   rH   r   r   reverse  s    
z-Fraction._operator_fallbacks.<locals>.reverseZ__r)r8   __doc__)rJ   rI   rK   rO   r   rH   r   _operator_fallbacks.  s    P	
zFraction._operator_fallbacksc                 C   s,   | j |j  }}t| j| |j|  || S r   r&   r   r%   r   r   dadbr   r   r   _add  s    zFraction._addc                 C   s,   | j |j  }}t| j| |j|  || S r   rR   rS   r   r   r   _sub  s    zFraction._subc                 C   s   t | j|j | j|j S r   r   r%   r&   r   r   r   r   _mul  s    zFraction._mulc                 C   s   t | j|j | j|j S r   rX   r   r   r   r   _div  s    
zFraction._divc                 C   s   | j |j | j|j   S r   r%   r&   r   r   r   r   	_floordiv  s    zFraction._floordivc                 C   s:   | j |j  }}t| j| ||j \}}|t||| fS r   )r&   divmodr%   r   )r   r   rT   rU   ZdivZn_modr   r   r   _divmod  s    zFraction._divmodc                 C   s,   | j |j  }}t| j| |j|  || S r   rR   rS   r   r   r   _mod  s    zFraction._modc                 C   s   t |tjr|jdkr|j}|dkr>t| j| | j| ddS | jdkrft| j|  | j|  ddS t| j |  | j |  ddS qt| t| S nt| | S d S )Nr   r   Fr   )	r"   r#   r$   r&   r%   r   r   r   r'   )r   r   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rP|| j S |t|  S )Nr   r   )	r   r   r"   r#   r$   r   r%   r&   r'   rN   r   r   r   __rpow__  s    


zFraction.__rpow__c                 C   s   t | j| jddS NFr   r   r   r   rC   r   r   r   __pos__  s    zFraction.__pos__c                 C   s   t | j | jddS rb   rc   rC   r   r   r   __neg__  s    zFraction.__neg__c                 C   s   t t| j| jddS rb   )r   r>   r   r   rC   r   r   r   __abs__  s    zFraction.__abs__c                 C   s*   | j dk r| j  | j  S | j | j S d S )Nr   r   rC   r   r   r   	__trunc__  s    
zFraction.__trunc__c                 C   s   | j | j S r   r[   rC   r   r   r   	__floor__
  s    zFraction.__floor__c                 C   s   | j  | j  S r   r[   rC   r   r   r   __ceil__  s    zFraction.__ceil__c                 C   s   |d krZt | j| j\}}|d | jk r,|S |d | jkrB|d S |d dkrR|S |d S dt| }|dkrtt| | |S tt| | | S d S )Nr   r   r   r   )r]   r%   r&   r>   r   round)r2   ZndigitsZfloorZ	remaindershiftr   r   r   	__round__  s    zFraction.__round__c                 C   sP   t | jtd t}|st}nt| j| t }| dkr:|n| }|dkrLdS |S )Nr   r   )powr   _PyHASH_MODULUS_PyHASH_INFr>   r   )r2   ZdinvZhash_resultr   r   r   __hash__,  s    zFraction.__hash__c                 C   s   t |tkr | j|ko| jdkS t|tjrD| j|jkoB| j|jkS t|tj	r`|j
dkr`|j}t|trt|s~t|rd|kS | | |kS ntS d S )Nr   r           )r
   r   r   r   r"   r#   r$   r%   r&   rM   imagrealr'   r   isnanisinfr:   rG   r   r   r   r   __eq__B  s    

zFraction.__eq__c                 C   sh   t |tjr&|| j|j | j|j S t |tr`t	|sDt
|rN|d|S || | |S ntS d S )Nrt   )r"   r#   r$   r   r&   r   r%   r'   r   rw   rx   r:   rG   )r2   otheropr   r   r   _richcmpW  s    


zFraction._richcmpc                 C   s   |  |tjS r   )r|   operatorltr   r   r   r   __lt__m  s    zFraction.__lt__c                 C   s   |  |tjS r   )r|   r}   gtr   r   r   r   __gt__q  s    zFraction.__gt__c                 C   s   |  |tjS r   )r|   r}   ler   r   r   r   __le__u  s    zFraction.__le__c                 C   s   |  |tjS r   )r|   r}   ger   r   r   r   __ge__y  s    zFraction.__ge__c                 C   s
   t | jS r   )boolr   rC   r   r   r   __bool__}  s    zFraction.__bool__c                 C   s   | j t| ffS r   )r6   r)   r<   r   r   r   
__reduce__  s    zFraction.__reduce__c                 C   s    t | tkr| S | | j| jS r   r
   r   r6   r   r   r<   r   r   r   __copy__  s    zFraction.__copy__c                 C   s    t | tkr| S | | j| jS r   r   )r2   Zmemor   r   r   __deepcopy__  s    zFraction.__deepcopy__)r   N)r=   )N)Br8   
__module____qualname__	__slots__r!   classmethodr:   r;   r(   rB   propertyr%   r&   rD   rE   rQ   rV   r}   add__add____radd__rW   sub__sub____rsub__rY   mul__mul____rmul__rZ   truediv__truediv____rtruediv__r\   floordiv__floordiv____rfloordiv__r^   r]   
__divmod____rdivmod__r_   mod__mod____rmod__r`   ra   rd   re   rf   rg   rh   ri   rl   rs   ry   r|   r   r   r   r   r   r   r   r   __classcell__r   r   r5   r   r   <   sb   m


7

k
)r   r   r   r#   r}   resys__all__r   r   	hash_infomodulusrp   infrq   compileVERBOSE
IGNORECASEr*   r$   r   r   r   r   r   <module>   s   
