a DOg_@stddlmZddlZddlZddlZddlZddlZdgZejj 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 cseZdZdZdQddfdd 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||}|durdt|tur6||_d|_|St|tj rV|j |_|j |_|St|t t frx|\|_|_|St|trZt|}|durtd|t|dpd}|d}|rt|}nvd}|d}|rdt|}||t|}||9}|d} | rBt| } | d kr4|d| 9}n|d| 9}|d d krb| }ntd nft|turt|urnnn@t|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 TypeErrorZeroDivisionErrormathZgcd) clsrrr selfmr r Zscalerg __class__./opt/alt/python39/lib64/python3.9/fractions.pyr>st            $       zFraction.__new__cCsDt|tjr||St|ts8td|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_floatcCsVddlm}t|tjr&|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_decimals   zFraction.from_decimalcCs |j|jfSNrr&r+r+r,rszFraction.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)rrrrabs) r&Zmax_denominatorZp0Zq0Zp1Zq1ndaZq2kZbound1Zbound2r+r+r,limit_denominators$      zFraction.limit_denominatorcCs|jSr2)rr8r+r+r,rszFraction.numeratorcCs|jSr2)rr;r+r+r,rszFraction.denominatorcCsd|jj|j|jfS)Nz %s(%s, %s))r*r.rrr3r+r+r,__repr__szFraction.__repr__cCs(|jdkrt|jSd|j|jfSdS)Nr z%s/%s)rrrr3r+r+r,__str__ s  zFraction.__str__csTfdd}djd|_j|_fdd}djd|_j|_||fS)NcsPt|ttfr||St|tr0t||St|trHt||StSdSr2)rrrrcomplexNotImplementedr8bfallback_operatormonomorphic_operatorr+r,forwardds   z-Fraction._operator_fallbacks..forward__csZt|tjr||St|tjr4t|t|St|tjrRt|t|StSdSr2)rrrZRealrComplexr>r?rAr8rBr+r,reverseps    z-Fraction._operator_fallbacks..reverseZ__r)r.__doc__)rDrCrErIr+rBr,_operator_fallbackssP  zFraction._operator_fallbackscCs,|j|j}}t|j||j|||Sr2rrrr8rAdadbr+r+r,_addsz Fraction._addcCs,|j|j}}t|j||j|||Sr2rLrMr+r+r,_subsz Fraction._subcCst|j|j|j|jSr2rrrr@r+r+r,_mulsz Fraction._mulcCst|j|j|j|jSr2rRr@r+r+r,_divs  z Fraction._divcCs|j|j|j|jSr2rrr@r+r+r, _floordivszFraction._floordivcCs:|j|j}}t|j|||j\}}|t|||fSr2)rdivmodrr)r8rArNrOZdivZn_modr+r+r,_divmodszFraction._divmodcCs,|j|j}}t|j||j|||Sr2rLrMr+r+r,_modsz Fraction._modcCst|tjr|jdkr|j}|dkr>t|j||j|ddS|jdkrft|j| |j| ddSt|j | |j | ddSqt|t|Sn t||SdS)Nr rFr) rrrrrrrrr)r8rAZpowerr+r+r,__pow__s&       zFraction.__pow__cCs\|jdkr|jdkr||jSt|tjrs