File: //lib/python3.10/__pycache__/fractions.cpython-310.pyc
o
    E�hRn  �                   @   sx   d Z ddlmZ ddlZddlZddlZddlZddlZdgZej	j
Zej	jZ
e�dejejB �ZG dd� dej�ZdS )z+Fraction, infinite-precision, real numbers.�    ��DecimalN�FractionaC  
    \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 ZdZdZdRdd�� fdd�Zed	d
� �Zedd� �Zd
d� Z	dSdd�Z
edd� �Zedd� �Z
dd� Zdd� Zdd� Zdd� Zeeej�\ZZdd� Zeeej�\ZZd d!� Zeeej�\ZZd"d#� Zeeej�\Z Z!d$d%� Z"ee"ej#�\Z$Z%d&d'� Z&ee&e'�\Z(Z)d(d)� Z*ee*ej+�\Z,Z-d*d+� Z.d,d-� Z/d.d/� Z0d0d1� Z1d2d3� Z2d4d5� Z3d6d7� Z4d8d9� Z5dTd:d;�Z6d<d=� Z7d>d?� Z8d@dA� Z9dBdC� Z:dDdE� Z;dFdG� Z<dHdI� Z=dJdK� Z>dLdM� Z?dNdO� Z@dPdQ� ZA�  ZBS )Ur   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                   s  t t| ��| �}|du r�t|�tu r||_d|_|S t|tj	�r*|j
|_|j|_|S t|tt
f�r;|�� \|_|_|S t|t�r�t�|�}|du rOtd| ��t|�d�pVd�}|�d�}|rdt|�}n8d}|�d�}|rdt|� }|| t|� }||9 }|�d	�}	|	r�t|	�}	|	d
kr�|d|	 9 }n|d|	  9 }|�d�dkr�| }n3td
��t|�t  u r�t|�u r�n nnt|tj	�r�t|tj	�r�|j
|j |j
|j }}ntd��|d
kr�td| ��|r�t�||�}
|d
k r�|
 }
||
 }||
 }||_||_|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: %r�num�0�denom�decimal�
   �expr   �sign�-z2argument should be a string or a Rational instancez+both arguments should be Rational instanceszFraction(%s, 0))�superr   �__new__�type�intr   r   �
isinstance�numbers�Rational�	numerator�denominator�floatr   �as_integer_ratio�str�_RATIONAL_FORMAT�match�
ValueError�group�len�	TypeError�ZeroDivisionError�math�gcd)�clsr   r   r	   �self�mr
   r   �scaler   �g��	__class__� � /usr/lib/python3.10/fractions.pyr   >