
    =Ogp                         	 d dl mZ d dlZd dlZd dlZd dlZd dlZdgZej        j	        Z
ej        j        Z ej        dej        ej        z            Z G d dej                  ZdS )    DecimalNFractiona  
    \A\s*                                  # optional whitespace at the start,
    (?P<sign>[-+]?)                        # an optional sign, then
    (?=\d|\.\d)                            # lookahead for digit or .digit
    (?P<num>\d*|\d+(_\d+)*)                # numerator (possibly empty)
    (?:                                    # followed by
       (?:/(?P<denom>\d+(_\d+)*))?         # an optional denominator
    |                                      # or
       (?:\.(?P<decimal>\d*|\d+(_\d+)*))?  # an optional fractional part
       (?:E(?P<exp>[-+]?\d+(_\d+)*))?      # and optional exponent
    )
    \s*\Z                                  # and optional whitespace to finish
c                   j    e Zd Z	 dZd-dd fdZed             Zed             Zd	 Zd.dZ	e
d             Ze
d             Zd Zd Zd Zd Z eeej                  \  ZZd Z eeej                  \  ZZd Z eeej                  \  ZZd Z eeej                  \  ZZ d Z! ee!ej"                  \  Z#Z$d Z% ee%e&          \  Z'Z(d Z) ee)ej*                  \  Z+Z,d Z-d Z.d Z/d Z0d Z1ej2        fdZ3d Z4d Z5d  Z6d/d!Z7d" Z8d# Z9d$ Z:d% Z;d& Z<d' Z=d( Z>d) Z?d* Z@d+ ZAd, ZB xZCS )0r   
_numerator_denominatorr   NT
_normalizec                   	 t          t          |                               |           }|t          |          t          u r||_        d|_        |S t          |t          j	                  r|j
        |_        |j        |_        |S t          |t          t          f          r#|                                \  |_        |_        |S t          |t                    r/t                               |          }|t%          d|z            t	          |                    d          pd          }|                    d          }|rt	          |          }nd}|                    d          }|rB|                    dd          }d	t+          |          z  }||z  t	          |          z   }||z  }|                    d
          }	|	r't	          |	          }	|	dk    r	|d	|	z  z  }n	|d	|	 z  z  }|                    d          dk    r| }nt-          d          t          |          t          cxu rt          |          u rn nnbt          |t          j	                  r9t          |t          j	                  r|j
        |j        z  |j
        |j        z  }}nt-          d          |dk    rt/          d|z            |r(t1          j        ||          }
|dk     r|
 }
||
z  }||
z  }||_        ||_        |S )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 instanceszFraction(%s, 0))superr   __new__typeintr   r	   
isinstancenumbersRational	numeratordenominatorfloatr   as_integer_ratiostr_RATIONAL_FORMATmatch
ValueErrorgroupreplacelen	TypeErrorZeroDivisionErrormathgcd)clsr   r    r   selfmr   r   scaler   g	__class__s              "/usr/lib64/python3.11/fractions.pyr   zFraction.__new__>   s2   	< Xs##++C00I#%%"+$%!Iw'788 (:"+"5$-$9!Iw'788 #:5>5O5O5Q5Q2!2Is++ :$**9559$%G%.&/ 0 0 0 5#66	(( 4"%e**KK"#Kggi00G -")//#r":": "CLL 0$-$5G$D	#u,''%..C 4!#hh!88%S0II'2t83K776??c))!*
I   !9 : : : )__8888tK'8'888888G$455 	2{G$455	2 #k&==%	(== #II
  1 2 2 2 !#$5	$ABBB 	K00AQB!OIAK#'    c           	         	 t          |t          j                  r | |          S t          |t                    s/t	          | j        d|dt          |          j        d           | |                                 S )Nz%.from_float() only takes floats, not  ())r   r   Integralr!   r*   __name__r   r"   )r.   fs     r4   
from_floatzFraction.from_float   s    	
 a)** 	A3q66MAu%% 	A \\\111d1gg.>.>.>@ A A AsA&&(())r5   c           	      "   	 ddl m} t          |t          j                  r |t          |                    }n?t          ||          s/t          | j        d|dt          |          j        d           | |	                                 S )Nr   r   z).from_decimal() only takes Decimals, not r7   r8   )
r   r   r   r   r9   r   r*   r:   r   r"   )r.   decr   s      r4   from_decimalzFraction.from_decimal   s    O######c7+,, 	9'#c((##CCC)) 	9sssDII$6$6$689 9 9 sC((**++r5   c                      	 | j         | j        fS Nr   r/   s    r4   r"   zFraction.as_integer_ratio   s    	
 !233r5   @B c                    	 |dk     rt          d          | j        |k    rt          |           S d\  }}}}| j        | j        }}	 ||z  }|||z  z   }	|	|k    rn|||||z  z   |	f\  }}}}||||z  z
  }}0||z
  |z  }
t          ||
|z  z   ||
|z  z             }t          ||          }t	          || z
            t	          || z
            k    r|S |S )Nr   z$max_denominator should be at least 1)r   r   r   r   )r&   r	   r   r   abs)r/   max_denominatorp0q0p1q1ndaq2kbound1bound2s                r4   limit_denominatorzFraction.limit_denominator   s!   		> QCDDD//D>>!#BB 11	1AAbDBO##R"Wb0NBBa!eqA	 R"$"QrT'2ad7++"b!!v}VD[!1!111MMr5   c                     | j         S rA   )r   rM   s    r4   r   zFraction.numerator  s
    |r5   c                     | j         S rA   )r	   rT   s    r4   r    zFraction.denominator  s
    ~r5   c                 B    	 | j         j        d| j        d| j        dS )N(z, r8   )r3   r:   r   r	   rB   s    r4   __repr__zFraction.__repr__	  s3    #~666#0A0A0AC 	Cr5   c                 d    	 | j         dk    rt          | j                  S | j        d| j         S )Nr   /)r	   r#   r   rB   s    r4   __str__zFraction.__str__  s:    !!t'''"ooot/@/@AAr5   c                      	  fd}dj         z   dz   |_          j        |_         fd}dj         z   dz   |_          j        |_        ||fS )Nc                    t          |t          t          f          r | |          S t          |t                    r t          |           |          S t          |t                    r t	          |           |          S t
          S rA   )r   r   r   r!   complexNotImplemented)rM   bfallback_operatormonomorphic_operators     r4   forwardz-Fraction._operator_fallbacks.<locals>.forwarde  s    !c8_-- &++Aq111Au%% &((q1555Aw'' &((Q777%%r5   __c                 ^   t          |t          j                  r ||           S t          |t          j                  r& t	          |          t	          |                     S t          |t          j                  r& t          |          t          |                     S t          S rA   )r   r   r   Realr!   Complexr^   r_   )r`   rM   ra   rb   s     r4   reversez-Fraction._operator_fallbacks.<locals>.reverseq  s    !W-.. &++Aq111Aw|,, &((q588<<<Aw// &((WQZZ@@@%%r5   __r)r:   __doc__)rb   ra   rc   rh   s   ``  r4   _operator_fallbackszFraction._operator_fallbacks  s    N	^	& 	& 	& 	& 	& 	&  "3"<<tC.6		& 		& 		& 		& 		& 		& !#4#==D.6r5   c                 j   	 | j         | j        }}|j         |j        }}t          j        ||          }|dk    rt	          ||z  ||z  z   ||z  d          S ||z  }|||z  z  ||z  z   }t          j        ||          }	|	dk    rt	          |||z  d          S t	          ||	z  |||	z  z  d          S Nr   Fr
   r   r    r,   r-   r   
rM   r`   nadanbdbr2   stg2s
             r4   _addzFraction._add      amBamBHR66BGb2g-rBw5IIII!G"'NR!V#Xa^^77Aq2v%8888RbBhEBBBBr5   c                 j   	 | j         | j        }}|j         |j        }}t          j        ||          }|dk    rt	          ||z  ||z  z
  ||z  d          S ||z  }|||z  z  ||z  z
  }t          j        ||          }	|	dk    rt	          |||z  d          S t	          ||	z  |||	z  z  d          S rm   rn   ro   s
             r4   _subzFraction._sub  rx   r5   c                     	 | j         | j        }}|j         |j        }}t          j        ||          }|dk    r
||z  }||z  }t          j        ||          }|dk    r
||z  }||z  }t	          ||z  ||z  d          S rm   rn   )rM   r`   rp   rq   rr   rs   g1rv   s           r4   _mulzFraction._mul  s    amBamBXb"662IB2IBXb"662IB2IBRbU;;;;r5   c                     	 | j         | j        }}|j         |j        }}t          j        ||          }|dk    r
||z  }||z  }t          j        ||          }|dk    r
||z  }||z  }||z  ||z  }	}|	dk     r| |	 }	}t	          ||	d          S Nr   r   Fr
   rn   )
rM   r`   rp   rq   rr   rs   r|   rv   rK   rL   s
             r4   _divzFraction._div  s    amBamBXb"662IB2IBXb"662IB2IBBwR1q552rqA1////r5   c                 B    	 | j         |j        z  | j        |j         z  z  S rA   r   r    rM   r`   s     r4   	_floordivzFraction._floordiv  s"    am+1LMMr5   c                     	 | j         |j         }}t          | j        |z  ||j        z            \  }}|t          |||z            fS rA   )r    divmodr   r   )rM   r`   rq   rs   divn_mods         r4   _divmodzFraction._divmod  sL    BAK",b1;.>??
UHUBG,,,,r5   c                 l    	 | j         |j         }}t          | j        |z  |j        |z  z  ||z            S rA   )r    r   r   )rM   r`   rq   rs   s       r4   _modzFraction._mod  s9    Br)akB.>?bIIIr5   c                    	 t          |t          j                  r|j        dk    r|j        }|dk    r"t          | j        |z  | j        |z  d          S | j        dk    r$t          | j        | z  | j        | z  d          S t          | j         | z  | j         | z  d          S t          |           t          |          z  S t          |           |z  S r   )	r   r   r   r    r   r   r   r	   r!   )rM   r`   powers      r4   __pow__zFraction.__pow__  s   	 a)** 	!}!!A::#ALE$9$%Ne$;/46 6 6 6 \Q&&#ANuf$<$%LUF$:/46 6 6 6 $an_%$?&'l]v$=/46 6 6 6 Qxx588++88q= r5   c                     	 | j         dk    r| j        dk    r
|| j        z  S t          |t          j                  rt          |j        |j                  | z  S | j         dk    r
|| j        z  S |t          |           z  S )Nr   r   )	r	   r   r   r   r   r   r   r    r!   )r`   rM   s     r4   __rpow__zFraction.__rpow__;  s    >Q1<1#4#4$$a)** 	=AK771<<>Q$$E!HH}r5   c                 <    	 t          | j        | j        d          S NFr
   r   r   r	   rT   s    r4   __pos__zFraction.__pos__I  s    9anGGGGr5   c                 >    	 t          | j         | j        d          S r   r   rT   s    r4   __neg__zFraction.__neg__M  s     q~%HHHHr5   c                 V    	 t          t          | j                  | j        d          S r   )r   rE   r   r	   rT   s    r4   __abs__zFraction.__abs__Q  s&    AL))1>eLLLLr5   c                 ~    	 | j         dk     r || j          | j        z             S  || j         | j        z            S Nr   r   )rM   _indexs     r4   __int__zFraction.__int__U  sI    <!6Q\MQ^;<===6!,!.8999r5   c                 Z    	 | j         dk     r| j          | j        z   S | j         | j        z  S r   r   rT   s    r4   	__trunc__zFraction.__trunc__\  s5    <!l]an455<1>11r5   c                 "    	 | j         | j        z  S rA   r   rT   s    r4   	__floor__zFraction.__floor__c  s    {am++r5   c                 &    	 | j          | j        z   S rA   r   rT   s    r4   __ceil__zFraction.__ceil__g  s    +.//r5   c                 \   	 |Pt          | j        | j                  \  }}|dz  | j        k     r|S |dz  | j        k    r|dz   S |dz  dk    r|S |dz   S dt          |          z  }|dk    r t	          t          | |z            |          S t	          t          | |z            |z            S )N   r   r   r   )r   r   r    rE   r   round)r/   ndigitsfloor	remaindershifts        r4   	__round__zFraction.__round__l  s    	 ?%dnd6FGGE91}t///Q!111qy aqy CLL  Q;;E$,//777E$,//%7888r5   c                    	 	 t          | j        dt                    }t          t          t	          | j                            |z            }n# t          $ r
 t          }Y nw xY w| j        dk    r|n| }|dk    rdn|S )Nr   )powr	   _PyHASH_MODULUShashrE   r   r&   _PyHASH_INF)r/   dinvhash_results       r4   __hash__zFraction.__hash__  s    	<t("o>>D( c$/2233d:;;EE'  	  	  	 EEE	 ( /Q..UFr\\rrv-s   A A$#A$c                    	 t          |          t          u r| j        |k    o
| j        dk    S t	          |t
          j                  r | j        |j        k    o| j        |j        k    S t	          |t
          j	                  r|j
        dk    r|j        }t	          |t                    rGt          j        |          st          j        |          rd|k    S | |                     |          k    S t"          S )Nr   r           )r   r   r   r	   r   r   r   r   r    rg   imagrealr!   r,   isnanisinfr<   r_   r   s     r4   __eq__zFraction.__eq__  s    77c>><1$<1)<<a)** 	5LAK/ 4Nam35a)) 	afkkAa 
	"z!}} ,
1 , axALLOO++ "!r5   c                 b   	 t          |t          j                  r& || j        |j        z  | j        |j        z            S t          |t                    rSt          j	        |          st          j
        |          r |d|          S  || |                     |                    S t          S )Nr   )r   r   r   r   r    r	   r   r!   r,   r   r   r<   r_   )r/   otherops      r4   _richcmpzFraction._richcmp  s    	 eW-.. 	;2do(99'%/9; ; ;eU## 	"z%   8DJu$5$5 8r#u~~%r$ 6 6777!!r5   c                 D    	 |                      |t          j                  S rA   )r   operatorltr   s     r4   __lt__zFraction.__lt__      zz!X[)))r5   c                 D    	 |                      |t          j                  S rA   )r   r   gtr   s     r4   __gt__zFraction.__gt__  r   r5   c                 D    	 |                      |t          j                  S rA   )r   r   ler   s     r4   __le__zFraction.__le__      zz!X[)))r5   c                 D    	 |                      |t          j                  S rA   )r   r   ger   s     r4   __ge__zFraction.__ge__  r   r5   c                 ,    	 t          | j                  S rA   )boolr   rT   s    r4   __bool__zFraction.__bool__  s     AL!!!r5   c                 ,    | j         | j        | j        ffS rA   )r3   r   r	   rB   s    r4   
__reduce__zFraction.__reduce__  s    $2C DEEr5   c                 v    t          |           t          k    r| S |                     | j        | j                  S rA   r   r   r3   r   r	   rB   s    r4   __copy__zFraction.__copy__  1    ::!!K~~dot/@AAAr5   c                 v    t          |           t          k    r| S |                     | j        | j                  S rA   r   )r/   memos     r4   __deepcopy__zFraction.__deepcopy__  r   r5   )r   N)rC   rA   )Dr:   
__module____qualname__	__slots__r   classmethodr<   r?   r"   rR   propertyr   r    rX   r[   rk   rw   r   add__add____radd__rz   sub__sub____rsub__r}   mul__mul____rmul__r   truediv__truediv____rtruediv__r   floordiv__floordiv____rfloordiv__r   r   
__divmod____rdivmod__r   mod__mod____rmod__r   r   r   r   r   indexr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r3   s   @r4   r   r   &   s       ( /Ih$ h h h h h h hT * * [* 	, 	, [	,4 4 45 5 5 5n   X   XC C C
B B Bi  i  i ^C C C ,+D(,??GXC C C ,+D(,??GX< < < ,+D(,??GX0 0 0$ !4 3D(:J K KKN N N #6"5iAR"S"SL-- - - 21'6BBJJ J J
 ,+D(,??GX! ! !<  H H HI I IM M M #. : : : :2 2 2, , ,0 0 0
9 9 9 92. . .B" " "*" " ",* * ** * ** * ** * *" " "F F FB B B
B B B B B B Br5   )r   r   r,   r   r   resys__all__	hash_infomodulusr   infr   compileVERBOSE
IGNORECASEr$   r   r    r5   r4   <module>r     s    6          				 



,
 -' m2:  Z"-! ! NB NB NB NB NBw NB NB NB NB NBr5   