???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \W\                 @   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jdejejB ZG d	d dejZdS )
    )DecimalNFractiongcdc             C   sf   dd l }|jdtd t| t  ko0t|kn  r\|p<| dk rPtj| | S tj| |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.6/fractions.pyr      s     c             C   s   x|r|| |  } }qW | 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dRZdSdd fddZed	d
 Zedd ZdTd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 d$d% Z!d&d' Z"d(d) Z#d*d+ Z$d,d- Z%d.d/ Z&d0d1 Z'd2d3 Z(d4d5 Z)d6d7 Z*d8d9 Z+dUd:d;Z,d<d= Z-d>d? Z.d@dA Z/dBdC Z0dDdE Z1dFdG Z2dHdI Z3dJdK Z4dLdM Z5dNdO Z6dPdQ Z7  Z8S )Vr   
_numerator_denominatorr   NT)
_normalizec               sR  t t| j| }|d krdt|tkr6||_d|_|S t|tj	rV|j
|_|j|_|S t|ttfrx|j \|_|_|S t|trZtj|}|d krtd| t|jdpd}|jd}|rt|}nvd}|jd}|rdt| }|| t| }||9 }|jd}	|	rBt|	}	|	d	kr4|d|	 9 }n|d|	  9 }|jd
dkrb| }ntdnft|t  kot|kn  rn@t|tj	rt|tj	r|j
|j |j
|j  }}ntd|d	krtd| |rBt|t  kot|kn  r(tj||}
|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   sr    







$

$

zFraction.__new__c             C   sD   t |tjr| |S t |ts8td| j|t|jf | |j  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   sV   ddl m} t|tjr&|t|}n$t||sJtd| j|t|jf | |j	  S )Nr   )r   z2%s.from_decimal() only takes Decimals, not %r (%s))
r   r   r   r   r1   r
   r*   r2   r	   r#   )r,   Zdecr   r   r   r   from_decimal   s    
zFraction.from_decimal@B c             C   s   |dk rt d| j|kr"t| S d\}}}}| j| j }}xP|| }|||  }	|	|kr\P |||||  |	f\}}}}||||   }}q>W || | }
t||
|  ||
|  }t||}t||  t||  kr|S |S d S )Nr   z$max_denominator should be at least 1r   )r   r   r   r   )r'   r   r   r   abs)r-   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 )N)r   )r   r   r   r   r      s    zFraction.numeratorc             C   s   | j S )N)r   )r   r   r   r   r!     s    zFraction.denominatorc             C   s   d| j j| j| jf S )Nz
%s(%s, %s))r0   r2   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 )N)r   r
   r   r"   complexNotImplemented)r   r   )fallback_operatormonomorphic_operatorr   r   forwardv  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 )N)r   r   r   ZRealr"   Complexr>   r?   )r   r   )r@   rA   r   r   reverse  s    
z-Fraction._operator_fallbacks.<locals>.reverseZ__r)r2   __doc__)rA   r@   rB   rE   r   )r@   rA   r   _operator_fallbacks&  s    P	
zFraction._operator_fallbacksc             C   s,   | j |j  }}t| j| |j|  || S )N)r!   r   r    )r   r   dadbr   r   r   _add  s    zFraction._addc             C   s,   | j |j  }}t| j| |j|  || S )N)r!   r   r    )r   r   rH   rI   r   r   r   _sub  s    zFraction._subc             C   s   t | j|j | j|j S )N)r   r    r!   )r   r   r   r   r   _mul  s    zFraction._mulc             C   s   t | j|j | j|j S )N)r   r    r!   )r   r   r   r   r   _div  s    zFraction._divc             C   s   t j| | S )N)r   floor)r   r   r   r   r   __floordiv__  s    zFraction.__floordiv__c             C   s   t j||  S )N)r   rN   )r   r   r   r   r   __rfloordiv__  s    zFraction.__rfloordiv__c             C   s   | | }| ||  S )Nr   )r   r   divr   r   r   __mod__  s    zFraction.__mod__c             C   s   ||  }|| |  S )Nr   )r   r   rQ   r   r   r   __rmod__  s    zFraction.__rmod__c             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   F)r   )	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"   )r   r   r   r   r   __rpow__  s    


zFraction.__rpow__c             C   s   t | j| jddS )NF)r   )r   r   r   )r   r   r   r   __pos__  s    zFraction.__pos__c             C   s   t | j | jddS )NF)r   )r   r   r   )r   r   r   r   __neg__  s    zFraction.__neg__c             C   s   t t| j| jddS )NF)r   )r   r7   r   r   )r   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   r   )r   r   r   r   	__trunc__  s    
zFraction.__trunc__c             C   s   | j | j S )N)r    r!   )r   r   r   r   	__floor__  s    zFraction.__floor__c             C   s   | j  | j  S )N)r    r!   )r   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   )divmodr    r!   r7   r   round)r-   ZndigitsrN   Z	remainderZ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   r   )powr   _PyHASH_MODULUS_PyHASH_INFr7   r   )r-   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j|s~tj|rd|kS | | j|kS ntS d S )Nr   r   g        )r	   r
   r   r   r   r   r   r    r!   rD   imagrealr"   r   isnanisinfr4   r?   )r   r   r   r   r   __eq__7  s    
zFraction.__eq__c             C   sh   t |tjr&|| j|j | j|j S t |tr`tj	|sDtj
|rN|d|S || | j|S ntS d S )Ng        )r   r   r   r   r!   r   r    r"   r   rh   ri   r4   r?   )r-   otheropr   r   r   _richcmpL  s    

zFraction._richcmpc             C   s   | j |tjS )N)rm   operatorlt)r   r   r   r   r   __lt__b  s    zFraction.__lt__c             C   s   | j |tjS )N)rm   rn   gt)r   r   r   r   r   __gt__f  s    zFraction.__gt__c             C   s   | j |tjS )N)rm   rn   le)r   r   r   r   r   __le__j  s    zFraction.__le__c             C   s   | j |tjS )N)rm   rn   ge)r   r   r   r   r   __ge__n  s    zFraction.__ge__c             C   s
   | j dkS )Nr   )r   )r   r   r   r   __bool__r  s    zFraction.__bool__c             C   s   | j t| ffS )N)r0   r$   )r-   r   r   r   
__reduce__x  s    zFraction.__reduce__c             C   s    t | tkr| S | j| j| jS )N)r	   r   r0   r   r   )r-   r   r   r   __copy__{  s    zFraction.__copy__c             C   s    t | tkr| S | j| j| jS )N)r	   r   r0   r   r   )r-   memor   r   r   __deepcopy__  s    zFraction.__deepcopy__)r   r   )r   N)r6   )N)9r2   
__module____qualname__	__slots__r   classmethodr4   r5   r;   propertyr    r!   r<   r=   rG   rJ   rn   add__add____radd__rK   sub__sub____rsub__rL   mul__mul____rmul__rM   truediv__truediv____rtruediv__rO   rP   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r^   re   rj   rm   rp   rr   rt   rv   rw   rx   ry   r{   __classcell__r   r   )r0   r   r   <   sT   m
7k
)r   r   r   r   rn   resys__all__r   r   	hash_infomodulusrb   infrc   compileVERBOSE
IGNORECASEr%   r   r   r   r   r   r   <module>   s   