File: //lib64/python3.6/__pycache__/fractions.cpython-36.opt-2.pyc
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"