File: //usr/lib64/python3.6/__pycache__/fractions.cpython-36.opt-1.pyc
3
  \W\  �               @   s�   d Z ddlmZ ddlZddlZddlZddlZddlZddgZdd� Z	dd� Z
ejjZ
ejjZejd	ejejB �ZG d
d� dej�ZdS )z+Fraction, infinite-precision, real numbers.�    )�DecimalN�Fraction�gcdc             C   sf   ddl }|jdtd� t| �t  ko0t|�kn  r\|p<| dk rPtj| |� S tj| |�S t| |�S )z�Calculate the Greatest Common Divisor of a and b.
    Unless b==0, the result will have the same sign as b (so that when
    b is divided by it, the result comes out positive).
    r   Nz6fractions.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 ZdZdSZdTdd�� fdd	�Zed
d� �Zedd
� �ZdUdd�Z	e
dd� �Ze
dd� �Zdd� Z
dd� Zdd� Zdd� Zeeej�\ZZdd� Zeeej�\ZZdd � Zeeej�\ZZd!d"� Zeeej�\ZZ d#d$� Z!d%d&� Z"d'd(� Z#d)d*� Z$d+d,� Z%d-d.� Z&d/d0� Z'd1d2� Z(d3d4� Z)d5d6� Z*d7d8� Z+d9d:� Z,dVd;d<�Z-d=d>� Z.d?d@� Z/dAdB� Z0dCdD� Z1dEdF� Z2dGdH� Z3dIdJ� Z4dKdL� Z5dMdN� Z6dOdP� Z7dQdR� Z8�  Z9S )Wr   a]  This class implements rational numbers.
    In the two-argument form of the constructor, Fraction(8, 6) will
    produce a rational number equivalent to 4/3. Both arguments must
    be Rational. The numerator defaults to 0 and the denominator
    defaults to 1 so that Fraction(3) == 3 and Fraction() == 0.
    Fractions can also be constructed from:
      - numeric strings similar to those accepted by the
        float constructor (for example, '-2.3' or '1e10')
      - strings of the form '123/456'
      - float and Decimal instances
      - other Rational instances (including integers)
    �
_numerator�_denominatorr   NT)�
_normalizec               sR  t t| �j| �}|dk�rdt|�tkr6||_d|_|S t|tj	�rV|j
|_|j|_|S t|tt
f�rx|j� \|_|_|S t|t��rZtj|�}|dkr�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 )a�  Constructs a Rational.
        Takes a string like '3/2' or '1.5', another Rational instance, a
        numerator/denominator pair, or a float.
        Examples
        --------
        >>> Fraction(10, -8)
        Fraction(-5, 4)
        >>> Fraction(Fraction(1, 7), 5)
        Fraction(1, 35)
        >>> Fraction(Fraction(1, 7), Fraction(2, 3))
        Fraction(3, 14)
        >>> Fraction('314')
        Fraction(314, 1)
        >>> Fraction('-35/4')
        Fraction(-35, 4)
        >>> Fraction('3.1415') # conversion from numeric string
        Fraction(6283, 2000)
        >>> Fraction('-47e-2') # string may include a decimal exponent
        Fraction(-47, 100)
        >>> Fraction(1.47)  # direct construction from float (exact conversion)
        Fraction(6620291452234629, 4503599627370496)
        >>> Fraction(2.25)
        Fraction(9, 4)
        >>> Fraction(Decimal('1.47'))
        Fraction(147, 100)
        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 )z�Converts a finite float to a rational number, exactly.
        Beware that Fraction.from_float(0.3) != Fraction(3, 10).
        z.%s.from_float() only takes floats, not %r (%s))r   r   �Integralr"