Your IP : 3.137.177.116
3
\W\ � @ s� d dl mZ d dlZd dlZd dlZd dlZd dlZddgZdd� Zdd� Z ej
jZej
j
ZejdejejB �ZG d d� dej�ZdS )
� )�DecimalN�Fraction�gcdc 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.� )�warnings�warn�DeprecationWarning�type�int�mathr �_gcd)�a�br � 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�� fdd�Zed d
� �Zedd� �ZdTdd�Ze 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 k�rdt|�tkr6||_d|_|S t|tj �rV|j
|_|j|_|S t|tt
f�rx|j� \|_|_|S t|t��rZtj|�}|d kr�td| ��t|jd�p�d�}|jd�}|r�t|�}nvd}|jd�}|�rdt|� }|| t|� }||9 }|jd�} | �rBt| �} | d k�r4|d| 9 }n|d| 9 }|jd
�dk�rb| }ntd��nft|�t k�o�t|�kn �r�n@t|tj ��r�t|tj ��r�|j
|j |j
|j }}ntd
��|d k�r�td| ��|�rBt|�t k�ot|�kn �r(tj||�}
|d k �r2|
}
n
t||�}
||
}||
}||_||_|S )N� z Invalid literal for Fraction: %rZnum�0�denom�decimal�
�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 �
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 Zscaler �g)� __class__r r r T sr
$
$
zFraction.__new__c C sD t |tj�r| |�S t |t�s8td| j|t|�jf ��| |j� � S )Nz.%s.from_float() only takes floats, not %r (%s))r r �Integralr"