fp ddlmZddlZddlZddlZddlZddlZdgZejj Z ejj Z ej dejejzZGddejZdS)DecimalNFractiona \A\s* # optional whitespace at the start, (?P[-+]?) # an optional sign, then (?=\d|\.\d) # lookahead for digit or .digit (?P\d*|\d+(_\d+)*) # numerator (possibly empty) (?: # followed by (?:/(?P\d+(_\d+)*))? # an optional denominator | # or (?:\.(?P\d*|\d+(_\d+)*))? # an optional fractional part (?:E(?P[-+]?\d+(_\d+)*))? # and optional exponent ) \s*\Z # and optional whitespace to finish cjeZdZ dZd-ddfd ZedZedZd Zd.d Z e d Z e d Z dZ dZdZdZeeej\ZZdZeeej\ZZdZeeej\ZZdZeeej\ZZ dZ!ee!ej"\Z#Z$dZ%ee%e&\Z'Z(dZ)ee)ej*\Z+Z,dZ-dZ.dZ/dZ0dZ1ej2fdZ3dZ4dZ5d Z6d/d!Z7d"Z8d#Z9d$Z:d%Z;d&Zd)Z?d*Z@d+ZAd,ZBxZCS)0r _numerator _denominatorrNT _normalizec tt||}|t|tur||_d|_|St|tj r|j |_|j |_|St|ttfr#|\|_|_|St|tr/t |}|t%d|zt |dpd}|d}|rt |}nd}|d}|rB|dd}d t+|z}||zt |z}||z}|d } | r't | } | d kr |d | zz}n |d | zz}|d d kr| }nt-dt|tcxurt|urnnnbt|tj r9t|tj r|j |j z|j |j z}}nt-d|d krt/d|z|r(t1j||} |d kr| } || z}|| z}||_||_|S)Nz Invalid literal for Fraction: %rnum0denomdecimal_ exprsign-z2argument should be a string or a Rational instancez+both arguments should be Rational instanceszFraction(%s, 0))superr__new__typeintrr isinstancenumbersRational numerator denominatorfloatras_integer_ratiostr_RATIONAL_FORMATmatch ValueErrorgroupreplacelen TypeErrorZeroDivisionErrormathgcd) clsrr r selfmrrscalerg __class__s 0/opt/alt/python311/lib64/python3.11/fractions.pyrzFraction.__new__>s2 <Xs##++C00  I#%%"+$%! Iw'788( :"+"5$-$9! Iw'788# :5>5O5O5Q5Q2!2 Is++ :$**9559$%G%.&/000 5#66 ((4"%e**KK"#Kggi00G-")//#r":": "CLL 0$-$5G $D #u, ''%..C4!#hh!88%S0II'2t83K776??c))!* I !9:::)__ 8 8 8 8tK'8'8 8 8 8 8 8 G$455 2 {G$4 5 5 2#k&==% (==#II 122 2 !  #$5 $ABB B  K00AQB !OI A K#' c  t|tjr ||St|ts/t |jd|dt |jd||S)Nz%.from_float() only takes floats, not  ())rrIntegralr!r*__name__rr")r.fs r4 from_floatzFraction.from_floats a) * * A3q66MAu%% A \\\111d1gg.>.>.>@AA AsA&&(())r5c " ddlm}t|tjr|t |}n?t||s/t |jd|dt|jd|| S)Nrrz).from_decimal() only takes Decimals, not r7r8) rrrrr9rr*r:rr")r.decrs r4 from_decimalzFraction.from_decimalsO###### c7+ , , 9'#c((##CCC)) 9sssDII$6$6$6899 9sC((**++r5c |j|jfSNrr/s r4r"zFraction.as_integer_ratios !233r5@Bc |dkrtd|j|krt|Sd\}}}}|j|j}} ||z}|||zz} | |krn|||||zz| f\}}}}||||zz }}0||z |z} t|| |zz|| |zz} t||} t | |z t | |z kr| S| S)Nr z$max_denominator should be at least 1)rr r r)r&r rrabs) r/max_denominatorp0q0p1q1ndaq2kbound1bound2s r4limit_denominatorzFraction.limit_denominators! > Q  CDD D   / /D>> !#BB 11 1AAbDBO##R"Wb0NBBa!eqA  R " $"QrT'2ad7++"b!! v}  VD[!1!1 1 1MMr5c|jSrA)rrMs r4rzFraction.numerators |r5c|jSrA)r rTs r4r zFraction.denominators ~r5cB |jjd|jd|jdS)N(z, r8)r3r:rr rBs r4__repr__zFraction.__repr__ s3#~666#0A0A0AC Cr5cd |jdkrt|jS|jd|jS)Nr /)r r#rrBs r4__str__zFraction.__str__s:   ! !t'' '"ooot/@/@A Ar5c fd}djzdz|_j|_fd}djzdz|_j|_||fS)Nct|ttfr ||St|trt||St|trt ||St SrA)rrrr!complexNotImplemented)rMbfallback_operatormonomorphic_operators r4forwardz-Fraction._operator_fallbacks..forwardes!c8_-- &++Aq111Au%% &((q1555Aw'' &((Q777%%r5__c^t|tjr ||St|tjr&t |t |St|tjr&t |t |StSrA)rrrRealr!Complexr^r_)r`rMrarbs r4reversez-Fraction._operator_fallbacks..reverseqs!W-.. &++Aq111Aw|,, &((q588<<<Aw// &((WQZZ@@@%%r5__r)r:__doc__)rbrarcrhs`` r4_operator_fallbackszFraction._operator_fallbackssN ^ & & & & & & "3"<?? UHUBG,,,,r5cl |j|j}}t|j|z|j|zz||zSrA)r rr)rMr`rqrss r4_modz Fraction._mods9 Br)akB.>?bIIIr5c t|tjr|jdkr|j}|dkr"t |j|z|j|zdS|jdkr$t |j| z|j| zdSt |j | z|j | zdSt|t|zSt||zSr) rrrr rrrr r!)rMr`powers r4__pow__zFraction.__pow__s  a) * * !}!! A::#ALE$9$%Ne$;/46666\Q&&#ANuf$<$%LUF$:/46666$an_%$?&'l]v$=/46666 Qxx588++88q= r5c |jdkr|jdkr ||jzSt|tjrt |j|j|zS|jdkr ||jzS|t|zS)Nr r) r rrrrrrr r!)r`rMs r4__rpow__zFraction.__rpow__;s >Q  1<1#4#4 $ $ a) * * =AK771< < >Q   $ $E!HH}r5c< t|j|jdSNFr rrr rTs r4__pos__zFraction.__pos__Is9 anGGGGr5c> t|j |jdSrrrTs r4__neg__zFraction.__neg__Ms  q~%HHHHr5cV tt|j|jdSr)rrErr rTs r4__abs__zFraction.__abs__Qs&AL))1>eLLLLr5c~ |jdkr||j |jz S||j|jzSNrr)rM_indexs r4__int__zFraction.__int__UsI 1 1r5c" |j|jzSrArrTs r4 __floor__zFraction.__floor__cs{am++r5c& |j |jz SrArrTs r4__ceil__zFraction.__ceil__gs+.//r5c\ |Pt|j|j\}}|dz|jkr|S|dz|jkr|dzS|dzdkr|S|dzSdt|z}|dkr t t ||z|St t ||z |zS)Nr rr)rrr rErround)r/ndigitsfloor remaindershifts r4 __round__zFraction.__round__ls  ?%dnd6FGG E91}t/// Q!111qy a qy CLL  Q;;E$,//77 7E$,//%788 8r5c t|jdt}ttt |j|z}n#t $r t}YnwxYw|jdkr|n| }|dkrdn|S)Nr)powr _PyHASH_MODULUShashrErr& _PyHASH_INF)r/dinvhash_results r4__hash__zFraction.__hash__s <t("o>>D(c$/2233d:;;EE'   EEE (/Q..UFr\\rrv-sAA$#A$c t|tur|j|ko |jdkSt |t jr |j|jko|j|jkSt |t j r|j dkr|j }t |trGtj|stj|rd|kS|||kSt"S)Nr r)rrrr rrrrr rgimagrealr!r,isnanisinfr<r_rs r4__eq__zFraction.__eq__s 77c>><1$<1)< < a) * * 5LAK/4Nam3 5 a ) ) afkkA a   "z!}} , 1  ,axALLOO++" !r5cb t|tjr&||j|jz|j|jzSt|trStj |stj |r |d|S||| |StS)Nr) rrrrr r rr!r,rrr<r_)r/otherops r4_richcmpzFraction._richcmps  eW- . . ;2do(99'%/9;; ; eU # # "z%   8DJu$5$5 8r#u~~%r$ 6 6777! !r5cD ||tjSrA)roperatorltrs r4__lt__zFraction.__lt__zz!X[)))r5cD ||tjSrA)rrgtrs r4__gt__zFraction.__gt__rr5cD ||tjSrA)rrlers r4__le__zFraction.__le__zz!X[)))r5cD ||tjSrA)rrgers r4__ge__zFraction.__ge__rr5c, t|jSrA)boolrrTs r4__bool__zFraction.__bool__sAL!!!r5c,|j|j|jffSrA)r3rr rBs r4 __reduce__zFraction.__reduce__s$2C DEEr5cvt|tkr|S||j|jSrArrr3rr rBs r4__copy__zFraction.__copy__1 :: ! !K~~dot/@AAAr5cvt|tkr|S||j|jSrAr)r/memos r4 __deepcopy__zFraction.__deepcopy__rr5)rN)rCrA)Dr: __module__ __qualname__ __slots__r classmethodr<r?r"rRpropertyrr rXr[rkrwradd__add____radd__rzsub__sub____rsub__r}mul__mul____rmul__rtruediv __truediv__ __rtruediv__rfloordiv __floordiv__ __rfloordiv__rr __divmod__ __rdivmod__rmod__mod____rmod__rrrrrindexrrrrrrrrrrrrrrrr __classcell__)r3s@r4rr&s(/Ih$hhhhhhhT * *[ * , ,[ ,4445555nXXCCC BBBi i i ^ C C C,+D(,??GX C C C,+D(,??GX < < <,+D(,??GX000$!4 3D(:J K KKNNN#6"5iAR"S"SL---- 21'6BBJ JJJ ,+D(,??GX!!!<   HHHIIIMMM#.::::222,,,000 99992...B"""*""",************"""FFFBBB BBBBBBBr5)rrr,rrresys__all__ hash_infomodulusrinfrcompileVERBOSE IGNORECASEr$rrr5r4rs6  , -'m 2: Z"- ! !N BN BN BN BN BwN BN BN BN BN Br5