MINI MINI MANI MO
3
  \W\                 @   s   d dl mZ d dlZd dlZd dlZd dlZd dlZddgZdd Zdd Z	ej
jZej
j
ZejdejejB ZG d	d dejZdS )
    )DecimalNFractiongcdc             C   sf   dd l }|jdtd t| t  ko0t|kn  r\|p<| dk rPtj| | S tj| |S t| |S )Nr   z6fractions.gcd() is deprecated. Use math.gcd() instead.   )warningswarnDeprecationWarningtypeintmathr   _gcd)abr    r   !/usr/lib64/python3.6/fractions.pyr      s     c             C   s   x|r|| |  } }qW | 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 Zd ZdRZdSdd fddZed	d
 Zedd ZdTddZe	dd Z
e	dd Zdd Zdd Z
dd Zdd Zeeej\ZZdd Zeeej\ZZdd Zeeej\ZZd d! Zeeej\ZZd"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 krdt|tkr6||_d|_|S t|tj	rV|j
|_|j|_|S t|tt
frx|j \|_|_|S t|trZtj|}|d krtd| t|jdpd}|jd}|rt|}nvd}|jd}|rdt| }|| t| }||9 }|jd}	|	rBt|	}	|	d	kr4|d|	 9 }n|d|	  9 }|jd
dkrb| }ntdnft|t  kot|kn  rn@t|tj	rt|tj	r|j
|j |j
|j  }}ntd
|d	krtd| |rBt|t  kot|kn  r(tj||}
|d	k r2|
 }
n
t||}
||
 }||
 }||_||_|S )N   z Invalid literal for Fraction: %rZnum0denomdecimal
   expr   Zsign-z2argument should be a string or a Rational instancez+both arguments should be Rational instanceszFraction(%s, 0))superr   __new__r	   r
   r   r   
isinstancenumbersRational	numeratordenominatorfloatr   as_integer_ratiostr_RATIONAL_FORMATmatch
ValueErrorgrouplen	TypeErrorZeroDivisionErrorr   r   r   )clsr    r!   r   selfmr   r   Zscaler   g)	__class__r   r   r   T   sr    
$
$
zFraction.__new__c             C   sD   t |tjr| |S t |ts8td| j|t|jf | |j  S )Nz.%s.from_float() only takes floats, not %r (%s))r   r   Integralr"