o ?OgRn@sv ddlmZddlZddlZddlZddlZddlZdgZejj Z ejj Z e dejejBZGdddejZdS)DecimalNFractionaC \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 cseZdZ dZdQddfdd Zedd Zed d Zd d ZdRddZ e ddZ e ddZ ddZ ddZddZddZeeej\ZZddZeeej\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/d0Z0d1d2Z1d3d4Z2d5d6Z3d7d8Z4dSd9d:Z5d;d<Z6d=d>Z7d?d@Z8dAdBZ9dCdDZ:dEdFZ;dGdHZdMdNZ?dOdPZ@ZAS)Tr _numerator _denominatorrNT _normalizec s tt||}|durt|tur||_d|_|St|tj r+|j |_|j |_|St|t t fr<|\|_|_|St|trt|}|durPtd|t|dpWd}|d}|ret|}n8d}|d}|rdt|}||t|}||9}|d} | rt| } | d kr|d| 9}n|d| 9}|d d kr| }n3td t|turt|urnnnt|tj rt|tj r|j |j |j |j }}ntd |d krtd||rt||} |d kr| } || }|| }||_||_|S)Nz Invalid literal for Fraction: %rZnum0denomdecimal exprZsign-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 ValueErrorgrouplen TypeErrorZeroDivisionErrormathgcd) clsrrr selfmr r Zscalerg __class__0/opt/alt/python310/lib64/python3.10/fractions.pyr>sx                zFraction.__new__cCsF t|tjr ||St|tstd|j|t|jf||S)Nz.%s.from_float() only takes floats, not %r (%s))rrIntegralrr"__name__rr)r&fr,r,r- from_floats   zFraction.from_floatcCsX ddlm}t|tjr|t|}nt||s&td|j|t|jf|| S)Nrrz2%s.from_decimal() only takes Decimals, not %r (%s)) r rrrr.rr"r/rr)r&Zdecrr,r,r- from_decimals    zFraction.from_decimalcCs |j|jfSNrr'r,r,r-rs zFraction.as_integer_ratio@Bc Cs |dkr td|j|krt|Sd\}}}}|j|j}} ||}|||} | |kr/n|||||| f\}}}}||||}}q |||} t|| ||| |} t||} t| |t| |krm| S| S)Nr z$max_denominator should be at least 1)rr r r)rrrrabs) r'Zmax_denominatorZp0Zq0Zp1Zq1ndaZq2kZbound1Zbound2r,r,r-limit_denominators*     zFraction.limit_denominatorcC|jSr3)rr9r,r,r-rzFraction.numeratorcCr<r3)rr=r,r,r-rr>zFraction.denominatorcCs d|jj|j|jfS)Nz %s(%s, %s))r+r/rrr4r,r,r-__repr__szFraction.__repr__cCs& |jdkr t|jSd|j|jfS)Nr z%s/%s)rrrr4r,r,r-__str__ s  zFraction.__str__csV fdd}djd|_j|_fdd}djd|_j|_||fS)NcsLt|ttfr ||St|trt||St|tr$t||StSr3)rrrrcomplexNotImplementedr9bfallback_operatormonomorphic_operatorr,r-forwardds   z-Fraction._operator_fallbacks..forward__csVt|tjr ||St|tjrt|t|St|tjr)t|t|StSr3)rrrZRealrComplexrArBrDr9rEr,r-reverseps    z-Fraction._operator_fallbacks..reverseZ__r)r/__doc__)rGrFrHrLr,rEr-_operator_fallbackssO  zFraction._operator_fallbacksc Cs |j|j}}|j|j}}t||}|dkr(t||||||ddS||}|||||}t||} | dkrIt|||ddSt|| ||| ddSNr Frrrr$r%r r9rDnadanbdbr)stg2r,r,r-_add  z Fraction._addc Cs |j|j}}|j|j}}t||}|dkr(t||||||ddS||}|||||}t||} | dkrIt|||ddSt|| ||| ddSrOrPrQr,r,r-_subrZz Fraction._subcCs| |j|j}}|j|j}}t||}|dkr!||}||}t||}|dkr3||}||}t||||ddSrOrP)r9rDrRrSrTrUg1rXr,r,r-_muls  z Fraction._mulc Cs |j|j}}|j|j}}t||}|dkr!||}||}t||}|dkr3||}||}||||}} | dkrG| | }} t|| ddSNr rFrrP) r9rDrRrSrTrUr\rXr7r8r,r,r-_divs  z Fraction._divcCs |j|j|j|jSr3rrrCr,r,r- _floordivszFraction._floordivcCs< |j|j}}t|j|||j\}}|t|||fSr3)rdivmodrr)r9rDrSrUZdivZn_modr,r,r-_divmod szFraction._divmodcCs. |j|j}}t|j||j|||Sr3)rrr)r9rDrSrUr,r,r-_modsz Fraction._modcCs t|tjrM|jdkrE|j}|dkr t|j||j|ddS|jdkr4t|j| |j| ddSt|j | |j | ddSt|t|St||Sr^) rrrrrrrrr)r9rDZpowerr,r,r-__pow__s(        zFraction.__pow__cCs^ |jdkr|jdkr||jSt|tjrt|j|j|S|jdkr)||jS|t|S)Nr r) rrrrrrrrrrKr,r,r-__rpow__:s     zFraction.__rpow__cCs t|j|jddSNFrrrrr=r,r,r-__pos__HszFraction.__pos__cCs t|j |jddSrgrhr=r,r,r-__neg__LszFraction.__neg__cCs tt|j|jddSrg)rr6rrr=r,r,r-__abs__PszFraction.__abs__cCs( |jdkr|j |j S|j|jS)Nrrr=r,r,r- __trunc__Ts  zFraction.__trunc__cCs |j|jSr3r`r=r,r,r- __floor__[s zFraction.__floor__cCs |j |j Sr3r`r=r,r,r-__ceil___szFraction.__ceil__cCs |dur.t|j|j\}}|d|jkr|S|d|jkr"|dS|ddkr*|S|dSdt|}|dkrAtt|||Stt|||S)Nr rr)rbrrr6rround)r'ZndigitsZfloorZ remaindershiftr,r,r- __round__ds  zFraction.__round__cCsf z t|jdt}Wn tyt}Yn wttt|j|}|jdkr(|n| }|dkr1dS|S)Nr)powr_PyHASH_MODULUSr _PyHASH_INFhashr6r)r'ZdinvZhash_resultr,r,r-__hash__}s zFraction.__hash__cCs t|tur|j|ko|jdkSt|tjr#|j|jko"|j|jkSt|tj r1|j dkr1|j }t|t rKt |s@t |rDd|kS|||kStS)Nr r)rrrrrrrrrrJimagrealrr$isnanisinfr1rBrCr,r,r-__eq__s     zFraction.__eq__cCsd t|tjr||j|j|j|jSt|tr0t |s#t |r(|d|S||| |St S)Nr{) rrrrrrrrr$r~rr1rB)r'otheropr,r,r-_richcmps    zFraction._richcmpcC ||tjSr3)roperatorltrCr,r,r-__lt__zFraction.__lt__cCrr3)rrgtrCr,r,r-__gt__rzFraction.__gt__cCrr3)rrlerCr,r,r-__le__rzFraction.__le__cCrr3)rrgerCr,r,r-__ge__rzFraction.__ge__cCs t|jSr3)boolrr=r,r,r-__bool__s zFraction.__bool__cCs|jt|ffSr3)r+rr4r,r,r- __reduce__szFraction.__reduce__cC t|tkr|S||j|jSr3rrr+rrr4r,r,r-__copy__ zFraction.__copy__cCrr3r)r'Zmemor,r,r- __deepcopy__rzFraction.__deepcopy__)rN)r5r3)Br/ __module__ __qualname__ __slots__r classmethodr1r2rr;propertyrrr?r@rNrYradd__add____radd__r[sub__sub____rsub__r]mul__mul____rmul__r_truediv __truediv__ __rtruediv__rafloordiv __floordiv__ __rfloordiv__rcrb __divmod__ __rdivmod__rdmod__mod____rmod__rerfrirjrkrlrmrnrrrzrrrrrrrrrr __classcell__r,r,r*r-r&shi   7  0 !)r rr$rrresys__all__ hash_infomodulusrvinfrwcompileVERBOSE IGNORECASErrrr,r,r,r-s