a XC?h_�@stddlmZddlZddlZddlZddlZddlZdgZejj Z ejj Z e� dejejB�ZGdd�dej�ZdS)���DecimalN�FractionaC \A\s* # optional whitespace at the start, then (?P[-+]?) # an optional sign, then (?=\d|\.\d) # lookahead for digit or .digit (?P\d*) # numerator (possibly empty) (?: # followed by (?:/(?P\d+))? # an optional denominator | # or (?:\.(?P\d*))? # an optional fractional part (?:E(?P[-+]?\d+))? # and optional exponent ) \s*\Z # and optional whitespace to finish cs�eZdZdZdQdd��fdd� Zedd ��Zed d ��Zd d �ZdRdd�Z e dd��Z e dd��Z dd�Z dd�Zdd�Zdd�Zeeej�\ZZdd�Zeeej�\ZZdd �Zeeej�\ZZd!d"�Zeeej�\ZZ 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.�Z/d/d0�Z0d1d2�Z1d3d4�Z2d5d6�Z3d7d8�Z4dSd9d:�Z5d;d<�Z6d=d>�Z7d?d@�Z8dAdB�Z9dCdD�Z:dEdF�Z;dGdH�ZdMdN�Z?dOdP�Z@�ZAS)Tr�� _numerator� _denominatorrNT�� _normalizec s"tt|��|�}|du�rdt|�tur6||_d|_|St|tj �rV|j |_|j |_|St|t t f�rx|��\|_|_|St|t��rZt�|�}|dur�td|��t|�d�p�d�}|�d�}|r�t|�}nvd}|�d�}|�rdt|�}||t|�}||9}|�d�} | �rBt| �} | d k�r4|d| 9}n|d| 9}|�d �d k�rb| }ntd ��nft|�tu�r�t|�u�r�nnn@t|tj ��r�t|tj ��r�|j |j |j |j }}ntd ��|d k�r�td|��|�rt�||�} |d k�r| } || }|| }||_||_|S)N�z Invalid literal for Fraction: %rZnum�0�denom�decimal� �exprZsign�-z2argument should be a string or a Rational instancez+both arguments should be Rational instanceszFraction(%s, 0))�superr�__new__�type�intrr� isinstance�numbers�Rational� numerator� denominator�floatr�as_integer_ratio�str�_RATIONAL_FORMAT�match� ValueError�group�len� TypeError�ZeroDivisionError�mathZgcd) �clsrrr �self�mr r Zscaler�g�� __class__��./opt/alt/python39/lib64/python3.9/fractions.pyr>st     �       $ �  �    zFraction.__new__cCsDt|tj�r||�St|t�s8td|j|t|�jf��||���S)Nz.%s.from_float() only takes floats, not %r (%s))rr�Integralrr"�__name__rr)r%�fr+r+r,� from_float�s  �zFraction.from_floatcCsVddlm}t|tj�r&|t|��}n$t||�sJtd|j|t|�jf��||� ��S)Nrrz2%s.from_decimal() only takes Decimals, not %r (%s)) r rrrr-rr"r.rr)r%Zdecrr+r+r,� from_decimal�s   ��zFraction.from_decimalcCs |j|jfS�Nr�r&r+r+r,r�szFraction.as_integer_ratio�@Bc Cs�|dkrtd��|j|kr"t|�Sd\}}}}|j|j}}||}|||} | |krZq�|||||| f\}}}}||||}}q<|||} t|| ||| |�} t||�} t| |�t| |�kr�| S| SdS)Nr z$max_denominator should be at least 1)rr r r)rrrr�abs) r&Zmax_denominatorZp0Zq0Zp1Zq1�n�d�aZq2�kZbound1Zbound2r+r+r,�limit_denominator�s$      zFraction.limit_denominatorcCs|jSr2)r�r8r+r+r,rszFraction.numeratorcCs|jSr2)rr;r+r+r,rszFraction.denominatorcCsd|jj|j|jfS)Nz %s(%s, %s))r*r.rrr3r+r+r,�__repr__s�zFraction.__repr__cCs(|jdkrt|j�Sd|j|jfSdS)Nr z%s/%s)rrrr3r+r+r,�__str__ s  zFraction.__str__csT��fdd�}d�jd|_�j|_��fdd�}d�jd|_�j|_||fS)NcsPt|ttf�r�||�St|t�r0�t|�|�St|t�rH�t|�|�StSdSr2)rrrr�complex�NotImplemented�r8�b��fallback_operator�monomorphic_operatorr+r,�forwardds   z-Fraction._operator_fallbacks..forward�__csZt|tj�r�||�St|tj�r4�t|�t|��St|tj�rR�t|�t|��StSdSr2)rrrZRealr�Complexr>r?�rAr8rBr+r,�reverseps    z-Fraction._operator_fallbacks..reverseZ__r)r.�__doc__)rDrCrErIr+rBr,�_operator_fallbackssP  zFraction._operator_fallbackscCs,|j|j}}t|j||j|||�Sr2�rrr�r8rA�da�dbr+r+r,�_adds�z Fraction._addcCs,|j|j}}t|j||j|||�Sr2rLrMr+r+r,�_sub�s�z Fraction._subcCst|j|j|j|j�Sr2�rrrr@r+r+r,�_mul�sz Fraction._mulcCst|j|j|j|j�Sr2rRr@r+r+r,�_div�s  �z Fraction._divcCs|j|j|j|jSr2�rrr@r+r+r,� _floordiv�szFraction._floordivcCs:|j|j}}t|j|||j�\}}|t|||�fSr2)r�divmodrr)r8rArNrOZdivZn_modr+r+r,�_divmod�szFraction._divmodcCs,|j|j}}t|j||j|||�Sr2rLrMr+r+r,�_mod�sz Fraction._modcCs�t|tj�r�|jdkr�|j}|dkr>t|j||j|dd�S|jdkrft|j| |j| dd�St|j | |j | dd�Sq�t|�t|�Sn t|�|SdS)Nr rFr) rrrrrrrrr)r8rAZpowerr+r+r,�__pow__�s&   �   � �zFraction.__pow__cCs\|jdkr|jdkr||jSt|tj�rs  �