
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
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r¢td| ƒ‚t|jdƒp°dƒ}|jdƒ}|rÌt|ƒ}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�o€t|ƒkn  �rŠn@t|tj	ƒ�rÂt|tj	ƒ�rÂ|j
|j |j
|j  }}ntdƒ‚|d	k�ràt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 q¨t| ƒ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r€t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ƒr–tj|ƒs~tj|ƒr†d|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   