a DOg:} @slgdZeZdZdZdZddlZddlZddl Z zddl m Z e ddZ Wneydd d Z Yn0d Zd Zd ZdZdZdZdZdZdZdZe jdkrdZdZdZn dZdZdZeedZGdddeZGdddeZ GdddeZ!Gd d!d!e!Z"Gd"d#d#ee#Z$Gd$d%d%e!Z%Gd&d'd'e!e#Z&Gd(d)d)eZ'Gd*d+d+e!Z(Gd,d-d-eZ)Gd.d/d/eZ*Gd0d1d1e'e)Z+Gd2d3d3e'e)e*Z,Gd4d5d5ee-Z.e e$e'e+e)e,e!e*e.g Z/e"e!e%e!e&e!e(e!iZ0eeeeeeeefZ1ddl2Z2e23d6Z4d7d8Z5d9d:Z6[2dd;d<Z7Gd=d>d>e8Z9dd@dAZ:ej;GdFdGdGe8Z?ddHdIZ@eAjBZCdJdKZDdLdMZEdNdOZFdPdQZGddSdTZHdUdVZIdWdXZJGdYdZdZe8ZKeKjLZMdd[d\ZNd]d^ZOd_d`ZPdadbdcdddedfdgdhdidj fdkdlZQddmdnZRddodpZSe>dqee$e+e!ggdrdsdddtZTe>duee$e+e!e e,ggdvZUe>dueggdvZVddlWZWeWXdweWjYeWjZBj[Z\eWXdxj[Z]eWXdyj[Z^eWXdzeWjYeWj_BZ`[Wz ddlaZbWneyYn0dd{d|Zcd}d~ZdddZedddZfddZgddZhe9dZie9dZje9dZke9dZle9dZme9dZneiejfZoe jpjqZre jpjsZte jpjuZvewdherderZx[ dS))%DecimalContext DecimalTupleDefaultContext BasicContextExtendedContextDecimalExceptionClampedInvalidOperationDivisionByZeroInexactRounded SubnormalOverflow UnderflowFloatOperationDivisionImpossibleInvalidContextConversionSyntaxDivisionUndefined ROUND_DOWN ROUND_HALF_UPROUND_HALF_EVEN ROUND_CEILING ROUND_FLOORROUND_UPROUND_HALF_DOWN ROUND_05UP setcontext getcontext localcontextMAX_PRECMAX_EMAXMIN_EMIN MIN_ETINY HAVE_THREADSHAVE_CONTEXTVARdecimalz1.70z2.4.2N) namedtuplerzsign digits exponentcGs|SN)argsr*r*//opt/alt/python39/lib64/python3.9/_pydecimal.pyr-rrrrrrrrTllNZolNZoi@Tic@seZdZddZdS)rcGsdSr)r*selfcontextr+r*r*r,handleszDecimalException.handleN__name__ __module__ __qualname__r3r*r*r*r,rsrc@s eZdZdS)rNr5r6r7r*r*r*r,rsrc@seZdZddZdS)r cGs,|r(t|dj|djdd}||StS)Nr'nT)_dec_from_triple_sign_int_fix_nan_NaN)r1r2r+ansr*r*r,r3s zInvalidOperation.handleNr4r*r*r*r,r sr c@seZdZddZdS)rcGstSr)r>r0r*r*r,r3szConversionSyntax.handleNr4r*r*r*r,rsrc@seZdZddZdS)r cGst|Sr))_SignedInfinityr1r2signr+r*r*r,r3szDivisionByZero.handleNr4r*r*r*r,r s r c@seZdZddZdS)rcGstSr)r@r0r*r*r,r3"szDivisionImpossible.handleNr4r*r*r*r,rsrc@seZdZddZdS)rcGstSr)r@r0r*r*r,r3-szDivisionUndefined.handleNr4r*r*r*r,r%src@s eZdZdS)r Nr8r*r*r*r,r 0sr c@seZdZddZdS)rcGstSr)r@r0r*r*r,r3GszInvalidContext.handleNr4r*r*r*r,r<s rc@s eZdZdS)r Nr8r*r*r*r,r Jsr c@s eZdZdS)r Nr8r*r*r*r,r Vsr c@seZdZddZdS)rcGs|jttttfvrt|S|dkrR|jtkr4t|St|d|j|j |jdS|dkr|jt krlt|St|d|j|j |jdSdS)Nr'9r/) roundingrrrrrArr:precEmaxrrBr*r*r,r3ws     zOverflow.handleNr4r*r*r*r,rasrc@s eZdZdS)rNr8r*r*r*r,rsrc@s eZdZdS)rNr8r*r*r*r,rsrZdecimal_contextcCs6z tWSty0t}t||YS0dSr))_current_context_varget LookupErrorrsetr2r*r*r,rs    rcCs,|tttfvr|}|t|dSr))rrrcopy clear_flagsrHrKrLr*r*r,rsrcCs|durt}t|Sr))r_ContextManager)ctxr*r*r,rs$rc @seZdZdZdddZeddZdd Zd d Zdd d Z ddZ ddZ ddZ dddZ dddZdddZdddZdddZdddZd d!Zd"d#Zd$d%Zd&d'Zdd)d*Zdd+d,Zdd-d.Zdd/d0Zdd2d3Zdd4d5ZeZdd6d7Zdd8d9Zdd:d;Z e Z!ddd?Z#dd@dAZ$ddBdCZ%ddDdEZ&ddFdGZ'ddHdIZ(ddJdKZ)d dLdMZ*d dNdOZ+dPdQZ,dRdSZ-e-Z.e/dTdUZ0e/dVdWZ1dXdYZ2dZd[Z3d\d]Z4d^d_Z5d`daZ6dbdcZ7dddeZ8dfdgZ9dhdiZ:djdkZ;dldmZe6e7e8e9e:e;et}|tdt|}|j|_|j |_ |j |_ |j|_|St d|dS)N_zInvalid literal for Decimal: %rrC-r/r'intZfracexprSFdiagsignalNr9FTztInvalid tuple size in creation of Decimal from list or tuple. The list or tuple should have exactly three elements.r'r/z|Invalid sign. The first value in the tuple should be an integer; either 0 for a positive number or 1 for a negative number. zTThe second value in the tuple must be composed of integers in the range 0 through 9.r9r[zUThe third value in the tuple must be an integer, or one of the strings 'F', 'n', 'N'.;strict semantics for mixing floats and Decimals are enabledzCannot convert %r to Decimal)!object__new__ isinstancestr_parserstripreplacer _raise_errorrgroupr;rWr<lenrQrRlstripabsr_WorkReprCrXlisttuple ValueErrorappendjoinmapfloatr from_float TypeError) clsvaluer2r1mintpartfracpartrXrYdigitsdigitr*r*r,rd s               (       zDecimal.__new__cCst|tr,|dkrdnd}d}tt|}nzt|trt|sJt|rV|t|St d|dkrld}nd}t| \}}| d}t|d|}nt dt ||| }|tur|S||SdS)Nr'r/g?zargument must be int or float.)rerWrfrnrv_mathZisinfZisnanreprZcopysignas_integer_ratio bit_lengthrxr:r)ryfrCkcoeffr9dresultr*r*r,rws$    zDecimal.from_floatcCs(|jr$|j}|dkrdS|dkr$dSdS)Nr9r/r[r_r')rRrQ)r1rXr*r*r,_isnanszDecimal._isnancCs|jdkr|jrdSdSdS)Nr\r/r')rQr;r1r*r*r, _isinfinitys  zDecimal._isinfinitycCs||}|durd}n|}|s&|rx|dur4t}|dkrJ|td|S|dkr`|td|S|rn||S||SdS)NFr_sNaNr')rrrjr r=)r1otherr2 self_is_nan other_is_nanr*r*r, _check_nanss&   zDecimal._check_nanscCsv|durt}|js|jrr|r0|td|S|rF|td|S|r\|td|S|rr|td|SdS)Nzcomparison involving sNaNzcomparison involving NaNr')rrRis_snanrjr is_qnanr1rr2r*r*r,_compare_check_nans s0  zDecimal._compare_check_nanscCs|jp|jdkSNrSrRr<rr*r*r,__bool__*szDecimal.__bool__cCs|js |jr8|}|}||kr(dS||kr4dSdS|sP|sDdSd|j S|s^d|jS|j|jkrndS|j|jkr~dS|}|}||kr|jd|j|j}|jd|j|j}||krdS||krd|j Sd|jSn ||krd|jSd|j SdS)Nr'rr/rS)rRrr;adjustedr<rQ)r1rZself_infZ other_inf self_adjustedZother_adjusted self_paddedZ other_paddedr*r*r,_cmp1s>         z Decimal._cmpcCs<t||dd\}}|tur|S|||r.dS||dkS)NT) equality_opFr')_convert_for_comparisonNotImplementedrrrr*r*r,__eq__qs  zDecimal.__eq__cCs<t||\}}|tur|S|||}|r.dS||dkSNFr'rrrrr1rr2r?r*r*r,__lt__ys zDecimal.__lt__cCs<t||\}}|tur|S|||}|r.dS||dkSrrrr*r*r,__le__s zDecimal.__le__cCs<t||\}}|tur|S|||}|r.dS||dkSrrrr*r*r,__gt__s zDecimal.__gt__cCs<t||\}}|tur|S|||}|r.dS||dkSrrrr*r*r,__ge__s zDecimal.__ge__cCs>t|dd}|js|r0|jr0|||}|r0|St||SNTraiseit)_convert_otherrRrrrrr*r*r,compares   zDecimal.comparecCs|jr4|rtdn|r$tS|jr0t StS|jdkrNtd|jt }ntt |j t }t |j |t }|dkr||n| }|dkrdS|S)Nz"Cannot hash a signaling NaN value.r' r) rRrrxis_nan _PyHASH_NANr; _PyHASH_INFrQpow_PyHASH_MODULUS _PyHASH_10INVrWr<)r1Zexp_hashZhash_r?r*r*r,__hash__s  zDecimal.__hash__cCst|jttt|j|jSr))rr;rqrurWr<rQrr*r*r,as_tupleszDecimal.as_tuplecCs|jr |rtdntd|s(dSt|j}|jdkrR|d|jd}}nn|j }|dkr|ddkr|d}|d8}qZ|j }t|| @d|}|r||L}||8}d||>}|j r| }||fS)Nz#cannot convert NaN to integer ratioz(cannot convert Infinity to integer ratior^r'rr/r) rRrrr OverflowErrorrWr<rQminrr;)r1r9rZd5Zd2Zshift2r*r*r,rs,     zDecimal.as_integer_ratiocCs dt|S)Nz Decimal('%s'))rfrr*r*r,__repr__szDecimal.__repr__Fc Csbddg|j}|jrL|jdkr&|dS|jdkr>|d|jS|d|jS|jt|j}|jdkrt|d krt|}n6|s~d }n,|jd kr|d d d }n|d d d }|dkrd }d d | |j}nL|t|jkr|jd |t|j}d}n |jd|}d |j|d}||kr(d}n*|dur8t}ddg|jd||}||||S)NrUrVr\ZInfinityr9NaNrr'r/rSr].eEz%+d)r;rRrQr<rlrcapitals) r1engr2rC leftdigitsdotplacer|r}rXr*r*r,__str__s:     zDecimal.__str__cCs|jd|dS)NT)rr2)rr1r2r*r*r, to_eng_string;szDecimal.to_eng_stringcCsR|jr|j|d}|r|S|dur(t}|s@|jtkr@|}n|}||SNrL)rRrrrErcopy_abs copy_negate_fixr1r2r?r*r*r,__neg__Ds  zDecimal.__neg__cCsR|jr|j|d}|r|S|dur(t}|s@|jtkr@|}nt|}||Sr)rRrrrErrrrrr*r*r,__pos__Zs  zDecimal.__pos__TcCsJ|s |S|jr&|j|d}|r&|S|jr:|j|d}n |j|d}|Sr)rrRrr;rr)r1roundr2r?r*r*r,__abs__os  zDecimal.__abs__c Csht|}|tur|S|dur"t}|js.|jr|||}|rB|S|rr|j|jkrj|rj|tdSt |S|rt |St |j |j }d}|j t kr|j|jkrd}|s|st |j|j}|rd}t|d|}||}|S|st||j |jd}|||j }||}|S|sVt||j |jd}|||j }||}|St|}t|}t|||j\}}t} |j|jkr|j|jkrt|d|}||}|S|j|jkr||}}|jdkrd| _|j|j|_|_nd| _n&|jdkrd| _d\|_|_nd| _|jdkr<|j|j| _n|j|j| _|j| _t | }||}|S)Nz -INF + INFr'r/rS)r'r')rrrrRrrr;rjr rrrQrErr:rmaxrF_rescalero _normalizerCrWrX) r1rr2r?rXZ negativezerorCop1op2rr*r*r,__add__s|              zDecimal.__add__cCsHt|}|tur|S|js |jr6|j||d}|r6|S|j||dSr)rrrRrrrrr*r*r,__sub__s zDecimal.__sub__cCs"t|}|tur|S|j||dSr)rrrrr*r*r,__rsub__szDecimal.__rsub__cCs@t|}|tur|S|dur"t}|j|jA}|js:|jr|||}|rN|S|rn|sf|tdSt |S|r|s|tdSt |S|j |j }|r|st |d|}| |}|S|j dkrt ||j |}| |}|S|j dkr t ||j |}| |}|St|}t|}t |t|j|j|}| |}|S)Nz (+-)INF * 0z 0 * (+-)INFrS1)rrrr;rRrrrjr rArQr:rr<rorfrW)r1rr2Z resultsignr?Z resultexprrr*r*r,__mul__sH             zDecimal.__mul__c Cst|}|turtS|dur"t}|j|jA}|js:|jr|||}|rN|S|rj|rj|tdS|rzt |S|r|t dt |d| S|s|s|t dS|td|S|s|j|j}d}nt|jt|j|jd}|j|j|}t|}t|} |dkr:t|jd|| j\}} nt|j| jd| \}} | rt|d dkr|d7}n8|j|j} || kr|ddkr|d}|d7}qt |t||}||S) Nz(+-)INF/(+-)INFzDivision by infinityrSz0 / 0zx / 0r'r/rr)rrrr;rRrrrjr rArr:Etinyrr rQrlr<rFrodivmodrWrfr) r1rr2rCr?rXrshiftrr remainder ideal_expr*r*r, __truediv__,sP           zDecimal.__truediv__c Cs|j|jA}|r|j}nt|j|j}||}|rN|sN|dkrht|dd|||jfS||jkr t |}t |}|j |j kr|j d|j |j 9_ n|j d|j |j 9_ t |j |j \}} |d|jkr t|t |dt|jt | |fS|td} | | fS)NrrSr'rz%quotient too large in //, % or divmod)r;rrQrrr:rrErFrorXrWrrfrjr) r1rr2rCrexpdiffrrqrr?r*r*r,_dividegs0     zDecimal._dividecCs"t|}|tur|S|j||dSr)rrrrr*r*r, __rtruediv__szDecimal.__rtruediv__cCst|}|tur|S|dur"t}|||}|r:||fS|j|jA}|r~|rj|td}||fSt||tdfS|s|s|t d}||fS|t d||tdfS| ||\}}| |}||fS)Nzdivmod(INF, INF)INF % xz divmod(0, 0)x // 0x % 0) rrrrr;rrjr rArr rr)r1rr2r?rCZquotientrr*r*r, __divmod__s4        zDecimal.__divmod__cCs"t|}|tur|S|j||dSr)rrrrr*r*r, __rdivmod__szDecimal.__rdivmod__cCst|}|tur|S|dur"t}|||}|r6|S|rJ|tdS|sj|r^|tdS|tdS|||d}| |}|S)Nrrz0 % 0r/) rrrrrrjr rrr)r1rr2r?rr*r*r,__mod__s"     zDecimal.__mod__cCs"t|}|tur|S|j||dSr)rrrrr*r*r,__rmod__szDecimal.__rmod__c Cs|durt}t|dd}|||}|r.|S|rB|tdS|sb|rV|tdS|tdS|r|t|}||St |j |j }|st |j d|}||S| | }||jdkr|tS|dkr|||j}||St|}t|}|j|jkr(|jd |j|j9_n|jd |j|j9_t|j|j\}} d | |d@|jkr~| |j8} |d7}|d |jkr|tS|j } | d krd| } | } t | t| |}||S) NTrzremainder_near(infinity, x)zremainder_near(x, 0)zremainder_near(0, 0)rSr/rrr_r')rrrrrjr rrrrrQr:r;rrFrrrErorXrWrrf) r1rr2r?ideal_exponentrrrrrrCr*r*r,remainder_nears`         zDecimal.remainder_nearcCst|}|tur|S|dur"t}|||}|r6|S|rb|rR|tdSt|j|jAS|s|r|t d|j|jAS|t dS| ||dS)Nz INF // INFrz0 // 0r') rrrrrrjr rAr;r rrrr*r*r, __floordiv__'s&    zDecimal.__floordiv__cCs"t|}|tur|S|j||dSr)rrrrr*r*r, __rfloordiv__CszDecimal.__rfloordiv__cCs8|r(|rtd|jr"dnd}nt|}t|S)Nz%Cannot convert signaling NaN to floatz-nannan)rrrrr;rfrvr1sr*r*r, __float__Js zDecimal.__float__cCst|jr(|rtdn|r(tdd|j}|jdkrT|t|jd|jS|t|jd|jpjdSdS)NzCannot convert NaN to integerz"Cannot convert infinity to integerrr'rrS) rRrrrrrr;rQrWr<rr*r*r,__int__Ts   zDecimal.__int__cCs|Sr)r*rr*r*r,realcsz Decimal.realcCstdSNr'rrr*r*r,imaggsz Decimal.imagcCs|Sr)r*rr*r*r, conjugatekszDecimal.conjugatecCs tt|Sr))complexrvrr*r*r, __complex__nszDecimal.__complex__cCsR|j}|j|j}t||krJ|t||dd}t|j||jdSt|S)NrST) r<rFclamprlrmr:r;rQr)r1r2ZpayloadZmax_payload_lenr*r*r,r=qs   zDecimal._fix_nancCsX|jr |r||St|S|}|}|s|j|g|j}tt |j ||}||j krx| t t |jd|St|St|j|j |j}||kr| td|j}| t| t|S||k}|r|}|j |krt|j|j |} | dkrt |jd|d}d} |j|j} | || } |jd| p>d} | dkr~tt| d} t| |jkr~| dd} |d7}||kr| td|j}nt |j| |}| r|r| t|r| t| r| t| t|s| t |S|r | t|jdkrP|j |krP| t |jd|j |} t |j| |St|S)NrS above Emaxr'rr/r)rRrr=rrEtoprGrrrrQrjrr:r;rlr<rFrr r _pick_rounding_functionrErfrWrr )r1r2rrexp_maxZnew_expZexp_minr?Zself_is_subnormalr~Zrounding_methodchangedrrr*r*r,r}sn                     z Decimal._fixcCst|j|rdSdSdS)Nr'r) _all_zerosr<r1rFr*r*r, _round_downs zDecimal._round_downcCs || Sr))rrr*r*r, _round_upszDecimal._round_upcCs*|j|dvrdSt|j|r"dSdSdS)NZ56789r/r'r)r<rrr*r*r,_round_half_ups  zDecimal._round_half_upcCst|j|rdS||SdS)Nr _exact_halfr<rrr*r*r,_round_half_downs zDecimal._round_half_downcCs8t|j|r*|dks&|j|ddvr*dS||SdS)Nr'r/02468rrrr*r*r,_round_half_evens zDecimal._round_half_evencCs |jr||S|| SdSr)r;rrr*r*r,_round_ceilings zDecimal._round_ceilingcCs |js||S|| SdSr)r rr*r*r, _round_floor s zDecimal._round_floorcCs0|r |j|ddvr ||S|| SdS)Nr/Z05)r<rrr*r*r, _round_05ups zDecimal._round_05up)rrrrrrrrcCsb|dur2t|tstdtdd| }||S|jrR|rJtdntdt| dt S)Nz+Second argument to round should be integralr'rcannot round a NaNcannot round an infinity) rerWrxr:quantizerRrrrrrr)r1r9rXr*r*r, __round__&s/   zDecimal.__round__cCs0|jr |rtdntdt|dtSNrrr')rRrrrrrWrrrr*r*r, __floor__ds  zDecimal.__floor__cCs0|jr |rtdntdt|dtSr)rRrrrrrWrrrr*r*r,__ceil__ss  zDecimal.__ceil__cCst|dd}t|dd}|js$|jr|dur2t}|jdkrJ|td|S|jdkrb|td|S|jdkrr|}nf|jdkr|}nV|jdkr|s|tdSt|j|jA}n*|jdkr|s|tdSt|j|jA}n0t|j|jAt t |j t |j |j|j}| ||S) NTrr[rr9r\zINF * 0 in fmaz0 * INF in fma) rrRrrQrjr rAr;r:rfrWr<r)r1rZthirdr2productr*r*r,fmas<           z Decimal.fmac Cst|}|tur|St|}|tur(|S|dur6t}|}|}|}|sZ|sZ|r|dkrp|td|S|dkr|td|S|dkr|td|S|r||S|r||S||S|r|r|s|tdS|dkr|tdS|s |tdS||j kr(|tdS|s@|s@|tdS| rPd}n|j }t t |}t|}t|} |j |td |j||}t| jD]} t|d |}qt|| j |}t|t|dS) Nr_rz@pow() 3rd argument not allowed unless all arguments are integersr'zApow() 2nd argument cannot be negative when 3rd argument specifiedzpow() 3rd argument cannot be 0zSinsufficient precision: pow() 3rd argument must not have more than precision digitszXat least one of pow() 1st argument and 2nd argument must be nonzero; 0**0 is not definedr)rrrrrjr r= _isintegerrrF_isevenr;rnrWroto_integral_valuerrXranger:rf) r1rmodulor2rrZ modulo_is_nanrCbaseexponentir*r*r, _power_modulos         zDecimal._power_modulocCst|}|j|j}}|ddkr4|d}|d7}qt|}|j|j}}|ddkrh|d}|d7}qJ|dkr||9}|ddkr|d}|d7}qz|dkrdS|d|} |jdkr| } |r|jdkr|jt|} t| | |d} nd} tddd| | | S|jdkr|d} | dvr|| @|krBdSt |d} |dd}|t t |krpdSt | ||} t |||}| dus|durdS| |krdSd | }n| d krt |d d} t d | |\}}|rdS|d dkr|d }| d8} q|dd }|t t |kr6dSt | ||} t |||}| dusf|durjdS| |krxdSd | }ndS|d|krdS| |}tdt ||S|dkr|d|d}}n|dkrt t t||| krdSt |}|dkr,t t t||| kr,dS|d| }}|d |d kr\dkrtnn|d }|d }q<|d |d krdkrnn|d }|d }qt|dkrX|dkr||krdSt ||\}}|dkrdSdt | | >}t |||d\}}||kr$q|S|sPt|jddS|j|g|j }t |j }|j }|j |ddkr||kr|d7}|d8}qtt|j|j d||S)NrLrSr'r/) rrRrrrr:r;rGrrrlr<rQ)r1r2r?duprendrXr*r*r, normalize s$    zDecimal.normalizecCst|dd}|durt}|dur(|j}|js4|jr||||}|rH|S|sX|r||rp|rpt|S|tdS| |j kr|j ksn|tdS|st |j d|j }||S|}||j kr|tdS||j d|jkr|tdS||j |}||j kr.|tdSt|j|jkrL|tdS|rl||jkrl|t|j |j kr||kr|t|t||}|S) NTrzquantize with one INFz)target exponent out of bounds in quantizerSz9exponent of quantize result too large for current contextr/z7quantize result has too many digits for current context)rrrErRrrrrjr rrQrGr:r;rrrFrrlr<Eminr r r )r1rXrEr2r?rr*r*r,r s`          zDecimal.quantizecCsDt|dd}|js|jr8|r(|p6|o6|S|j|jkSr)rrRr is_infiniterQrr*r*r, same_quantum% s  zDecimal.same_quantumcCs|jrt|S|s t|jd|S|j|krHt|j|jd|j||St|j|j|}|dkrzt|jd|d}d}|j|}|||}|jd|pd}|dkrtt |d}t|j||S)NrSr'rr/) rRrr:r;rQr<rlrrfrW)r1rXrEr~Z this_functionrrr*r*r,r4 s$    zDecimal._rescalecCsf|dkrtd|js|s"t|S||d||}||krb||d||}|S)Nr'z'argument should be at least 1 in _roundr/)rrrRrrr)r1placesrEr?r*r*r,_roundV s  zDecimal._roundcCs|jr"|j|d}|r|St|S|jdkr4t|S|sFt|jddS|durTt}|durb|j}|d|}||kr| t | t |S)NrLr'rS) rRrrrQr:r;rrErrjr r r1rEr2r?r*r*r,to_integral_exactm s$      zDecimal.to_integral_exactcCs`|durt}|dur|j}|jr>|j|d}|r6|St|S|jdkrPt|S|d|SdS)NrLr')rrErRrrrQrrIr*r*r,r s  zDecimal.to_integral_valuecCs|durt}|jrB|j|d}|r(|S|rB|jdkrBt|S|sdt|jd|jd}||S|jdkrz| t dS|j d}t |}|j d?}|j d@r|jd}t|jd?d}n|j}t|jdd?}||}|dkr|d|9}d } nt|d| \}} | } ||8}d|} || } | | kr:qJn | | d?} q"| oZ| | |k} | r|dkrz| d|} n| d| 9} ||7}n| d dkr| d7} tdt| |}|}|t} ||}| |_|S) NrLr'rSr_r/zsqrt(-x), x > 0rr(Tr)rrRrrr;rr:rQrrjr rFrorXrWrlr<rrf _shallow_copy _set_roundingrrE)r1r2r?rFoprclrr<rr9rrEr*r*r,sqrt s^              z Decimal.sqrtcCst|dd}|durt}|js&|jr~|}|}|s>|r~|dkrX|dkrX||S|dkrr|dkrr||S|||S||}|dkr||}|dkr|}n|}||SNTrr/r'rrrrRrrrr compare_totalr1rr2ZsnZonrNr?r*r*r,r s&       z Decimal.maxcCst|dd}|durt}|js&|jr~|}|}|s>|r~|dkrX|dkrX||S|dkrr|dkrr||S|||S||}|dkr||}|dkr|}n|}||SrQrRrTr*r*r,r* s&       z Decimal.mincCs8|jr dS|jdkrdS|j|jd}|dt|kS)NFr'TrS)rRrQr<rl)r1restr*r*r,rL s  zDecimal._isintegercCs&|r|jdkrdS|jd|jdvS)Nr'Trr )rQr<rr*r*r,rU szDecimal._isevencCs0z|jt|jdWSty*YdS0dS)Nr/r')rQrlr<rxrr*r*r,r[ s zDecimal.adjustedcCs|Sr)r*rr*r*r, canonicalc szDecimal.canonicalcCs.t|dd}|||}|r |S|j||dSNTrrL)rrrrr*r*r,compare_signalk s   zDecimal.compare_signalcCs`t|dd}|jr|jstS|js,|jr,tS|j}|}|}|sL|r||krt|j|jf}t|j|jf}||kr|rtStS||kr|rtStStS|r|dkrtS|dkrtS|dkrtS|dkrtSn2|dkrtS|dkrtS|dkrtS|dkrtS||krtS||kr$tS|j|jkr@|rrrXrEr*r*r,rX sH   $(  "   z Decimal.expcCsdS)NTr*rr*r*r, is_canonical' szDecimal.is_canonicalcCs|j Sr))rRrr*r*r, is_finite/ szDecimal.is_finitecCs |jdkS)Nr\rQrr*r*r,rE7 szDecimal.is_infinitecCs |jdvS)Nrarbrr*r*r,r; szDecimal.is_nancCs*|js |sdS|durt}|j|kSNF)rRrrDrrr*r*r, is_normal? s  zDecimal.is_normalcCs |jdkS)Nr9rbrr*r*r,rG szDecimal.is_qnancCs |jdkSNr/)r;rr*r*r, is_signedK szDecimal.is_signedcCs |jdkS)Nr[rbrr*r*r,rO szDecimal.is_snancCs*|js |sdS|durt}||jkSrc)rRrrrDrr*r*r, is_subnormalS s  zDecimal.is_subnormalcCs|j o|jdkSrrrr*r*r,is_zero[ szDecimal.is_zerocCs|jt|jd}|dkr4tt|dddS|dkrXttd|dddSt|}|j|j}}|dkrt|d| }t|}t|t|||kS|ttd| |dS)Nr/rrrr'rQrlr<rfrorWrXr1r_rMrNrnumZdenr*r*r, _ln_exp_bound_ szDecimal._ln_exp_boundc Cs|durt}|j|d}|r"|S|s*tS|dkr:tS|tkrFtS|jdkr\|t dSt |}|j |j }}|j }||d}t|||}|ddttt||drq|d7}qtt |dktt|| }|}|t} ||}| |_|S) NrLr/zln of a negative valuer_rrr]r')rr_NegativeInfinityr _Infinityr6rZr;rjr rorWrXrFrm_dlogrlrfrnr:rKrLrrrE r1r2r?rMrNrr,rGrrEr*r*r,lnx s:    $   z Decimal.lncCs|jt|jd}|dkr,tt|dS|dkrHttd|dSt|}|j|j}}|dkrt|d| }td|}t|t|||kdStd| |}t|||dkdS) Nr/rrr'rr_Z231rjrkr*r*r,r7 s  zDecimal._log10_exp_boundc CsF|durt}|j|d}|r"|S|s*tS|dkr:tS|jdkrP|tdS|jddkr|jdddt |jdkrt |j t |jd}nt |}|j |j}}|j}||d}t|||}|dd t tt||drq|d 7}qtt |dktt|| }|}|t} ||}| |_|S) NrLr/zlog10 of a negative valuer'rrSr_rrr])rrrnrror;rjr r<rlrrQrorWrXrFr7_dlog10rfrnr:rKrLrrrErqr*r*r,log10 s:   . $   z Decimal.log10cCsV|j|d}|r|S|dur"t}|r.tS|s@|tddSt|}||S)NrLzlogb(0)r/) rrrrorjr rrrrr*r*r,logb s  z Decimal.logbcCs6|jdks|jdkrdS|jD]}|dvrdSqdS)Nr'FZ01T)r;rQr<)r1digr*r*r, _islogical s  zDecimal._islogicalcCs|jt|}|dkr$d||}n|dkr<||j d}|jt|}|dkr`d||}n|dkrx||j d}||fS)Nr'rS)rFrl)r1r2opaopbZdifr*r*r, _fill_logical' szDecimal._fill_logicalcCsz|durt}t|dd}|r*|s4|tS|||j|j\}}dddt||D}t d| dptddS)NTrrUcSs$g|]\}}tt|t|@qSr*rfrW.0r4br*r*r, B r.z'Decimal.logical_and..r'rS rrrxrjr r{r<rtzipr:rmr1rr2ryrzrr*r*r, logical_and4 s  zDecimal.logical_andcCs(|durt}|tdd|jd|S)Nr'r)r logical_xorr:rFrr*r*r,logical_invertE s zDecimal.logical_invertcCsz|durt}t|dd}|r*|s4|tS|||j|j\}}dddt||D}t d| dptddS)NTrrUcSs$g|]\}}tt|t|BqSr*r|r}r*r*r,rZ r.z&Decimal.logical_or..r'rSrrr*r*r, logical_orL s  zDecimal.logical_orcCsz|durt}t|dd}|r*|s4|tS|||j|j\}}dddt||D}t d| dptddS)NTrrUcSs$g|]\}}tt|t|AqSr*r|r}r*r*r,rk r.z'Decimal.logical_xor..r'rSrrr*r*r,r] s  zDecimal.logical_xorcCst|dd}|durt}|js&|jr~|}|}|s>|r~|dkrX|dkrX||S|dkrr|dkrr||S|||S||}|dkr||}|dkr|}n|}||SrQ rrrRrrrrrrSrTr*r*r,max_magn s&      zDecimal.max_magcCst|dd}|durt}|js&|jr~|}|}|s>|r~|dkrX|dkrX||S|dkrr|dkrr||S|||S||}|dkr||}|dkr|}n|}||SrQrrTr*r*r,min_mag s&      zDecimal.min_magcCs|durt}|j|d}|r"|S|dkr2tS|dkrTtdd|j|S|}|t | | |}||kr|S| tdd| d|S)NrLrr/r'rDr)rrrrnr:rFrrMrLr_ignore_all_flagsrrrr1r2r?Znew_selfr*r*r, next_minus s$     zDecimal.next_minuscCs|durt}|j|d}|r"|S|dkr2tS|dkrTtdd|j|S|}|t | | |}||kr|S| tdd| d|S)NrLr/rrDr'r)rrrror:rFrrMrLrrrrrrr*r*r, next_plus s$     zDecimal.next_pluscCst|dd}|durt}|||}|r.|S||}|dkrJ||S|dkr^||}n ||}|r|t d|j |t |t nD| |jkr|t|t|t |t |s|t|S)NTrr'rz Infinite result from next_toward)rrrrr]rrrrjrr;r r rrDrr r)r1rr2r?Z comparisonr*r*r, next_toward s6             zDecimal.next_towardcCs|r dS|rdS|}|dkr,dS|dkr8dS|rN|jrJdSdS|dur\t}|j|d rv|jrrd Sd S|jrd Sd SdS)Nrrr/z +Infinityrz -Infinityz-Zeroz+ZerorLz -Subnormalz +Subnormalz-Normalz+Normal)rrrrhr;rrg)r1r2infr*r*r, number_classs, zDecimal.number_classcCstdSNrrrr*r*r,radix0sz Decimal.radixcCs|durt}t|dd}|||}|r.|S|jdkrB|tS|j t|kr`|jksln|tS|r|t |St|}|j }|jt |}|dkrd||}n|dkr|| d}||d|d|}t |j |dpd|jSNTrr'rSrrrrQrjr rFrWrrr<rlr:r;rm)r1rr2r?torotrotdigtopadZrotatedr*r*r,rotate4s.      zDecimal.rotatecCs|durt}t|dd}|||}|r.|S|jdkrB|tSd|j|j}d|j|j}|t|krz|ksn|tS| rt |St |j |j |jt|}||}|S)NTrr'rr_)rrrrQrjr rGrFrWrrr:r;r<r)r1rr2r?ZliminfZlimsuprr*r*r,scalebUs"      zDecimal.scalebcCs|durt}t|dd}|||}|r.|S|jdkrB|tS|j t|kr`|jksln|tS|r|t |St|}|j }|jt |}|dkrd||}n|dkr|| d}|dkr|d|}n|d|}||j d}t |j |dp d|jSrr)r1rr2r?rrrZshiftedr*r*r,rns4       z Decimal.shiftcCs|jt|ffSr)) __class__rfrr*r*r, __reduce__szDecimal.__reduce__cCst|tur|S|t|Sr)typerrrfrr*r*r,__copy__s zDecimal.__copy__cCst|tur|S|t|Sr)r)r1memor*r*r, __deepcopy__s zDecimal.__deepcopy__cCsJ|durt}t||d}|jrXt|j|}t|}|ddkrL|d7}t|||S|ddurvddg|j|d<|ddkrt |j|j |j d}|j }|d}|dur|ddvr| |d |}nF|dd vr|| |}n*|dd vrt|j |kr| ||}|s@|j d kr@|dd vr@|d |}|j t|j } |ddvr~|sx|durxd |} nd } nB|dd vr| } n.|dd vr|j d kr| d kr| } nd } | d krd} d| |j } nP| t|j kr|j d| t|j } d} n"|j d| p d} |j | d} | | } t|j| | | |S)N) _localeconvr%gGr_ precisioneEr/zfF%ZgGr'rrSrU)r_parse_format_specifierrR _format_signr;rfr _format_alignrr:r<rQrErHrrl_format_number)r1Z specifierr2rspecrCbodyrErrrr|r}rXr*r*r, __format__sZ               zDecimal.__format__)rSN)NN)N)N)N)N)N)N)FN)N)N)N)TN)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)NN)N)N)NN)N)NN)NN)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)NN)r5r6r7 __slots__rd classmethodrwrrrrrrrrrrrrrrrrrrrrrr__radd__rrr__rmul__rrrrrrrrrrrr __trunc__propertyrrrrr=rrrrr r r rrdictrrrrrr!r5r?r@rCrrFrrHrJr to_integralrPrrrrrrVrXrSr\rrr]rXr`rarErrdrrfrrgrhrmrrr7rurvrxr{rrrrrrrrrrrrrrrrrrr*r*r*r,rs  , !@  2 4    V   7 ;!  $    K       f  > , Un Y   = "   c * "  I   K   2 3          . * !  'rFcCs&tt}||_||_||_||_|Sr))rcrdrr;r<rQrR)rCZ coefficientrZspecialr1r*r*r,r:s  r:c@s$eZdZddZddZddZdS)rOcCs||_dSr))rM new_context)r1rr*r*r,__init__sz_ContextManager.__init__cCst|_t|j|jSr))r saved_contextrrrr*r*r, __enter__s z_ContextManager.__enter__cCst|jdSr))rr)r1tvtbr*r*r,__exit__sz_ContextManager.__exit__N)r5r6r7rrrr*r*r*r,rOsrOc @seZdZdddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ e ZdddZddZddZddZdZd d!Zd"d#Zd$d%Zdd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Z d;d<Z!d=d>Z"d?d@Z#dAdBZ$dCdDZ%dEdFZ&dGdHZ'dIdJZ(dKdLZ)dMdNZ*dOdPZ+dQdRZ,dSdTZ-dUdVZ.dWdXZ/dYdZZ0d[d\Z1d]d^Z2d_d`Z3dadbZ4dcddZ5dedfZ6dgdhZ7didjZ8dkdlZ9dmdnZ:dodpZ;dqdrZdwdxZ?dydzZ@d{d|ZAd}d~ZBddZCddZDddZEddZFdddZGddZHddZIddZJddZKddZLddZMddZNddZOddZPddZQddZRddZSddZTddZUeUZVdS)rNc s<zt} WntyYn0|dur(|n| j|_|dur<|n| j|_|durP|n| j|_|durd|n| j|_|durx|n| j|_|dur|n| j|_| durg|_n| |_dur| j |_ n.t t st fddt D|_ n|_ durt t d|_n0t t s2t fddt D|_n|_dS)Nc3s|]}|t|vfVqdSr)rWr~rr:r*r, Ir.z#Context.__init__..r'c3s|]}|t|vfVqdSr)rrr;r*r,rPr.)r NameErrorrFrErDrGrr_ignored_flagsr:rMrerr9fromkeysr;) r1rFrErDrGrrr;r:rZdcr*)r;r:r,r0s.    zContext.__init__cCst|tstd||dkr<||krtd||||fnJ|dkrb||krtd||||fn$||ksr||krtd||||ft|||S)Nz%s must be an integer-infz%s must be in [%s, %d]. got: %srz%s must be in [%d, %s]. got: %sz%s must be in [%d, %d]. got %s)rerWrxrrrc __setattr__)r1namerzZvminZvmaxr*r*r,_set_integer_checkTs  zContext._set_integer_checkcCs`t|tstd||D]}|tvrtd|qtD]}||vr8td|q8t|||S)Nz%s must be a signal dictz%s is not a valid signal dict)rerrxr9KeyErrorrcr)r1rrkeyr*r*r,_set_signal_dictbs  zContext._set_signal_dictcCs|dkr|||ddS|dkr0|||ddS|dkrH|||ddS|dkr`|||ddS|d krx|||ddS|d kr|tvrtd |t|||S|d ks|d kr|||S|dkrt|||Std|dS)NrFr/rrDrr'rGrrrEz%s: invalid rounding moder;r:rz.'decimal.Context' object has no attribute '%s')r_rounding_modesrxrcrrAttributeError)r1rrzr*r*r,rms*  zContext.__setattr__cCstd|dS)Nz%s cannot be deleted)r)r1rr*r*r, __delattr__szContext.__delattr__c CsNdd|jD}dd|jD}|j|j|j|j|j|j|j ||ffS)NcSsg|]\}}|r|qSr*r*r~Zsigrr*r*r,rr.z&Context.__reduce__..cSsg|]\}}|r|qSr*r*rr*r*r,rr.) r;itemsr:rrFrErDrGrr)r1r;r:r*r*r,rs zContext.__reduce__cCs|g}|dt|dd|jD}|dd|ddd|jD}|dd|dd|d S) NzrContext(prec=%(prec)d, rounding=%(rounding)s, Emin=%(Emin)d, Emax=%(Emax)d, capitals=%(capitals)d, clamp=%(clamp)dcSsg|]\}}|r|jqSr*r5)r~rrr*r*r,rr.z$Context.__repr__..zflags=[z, ]cSsg|]\}}|r|jqSr*r)r~rrr*r*r,rr.ztraps=[))rsvarsr;rrtr:)r1rnamesr*r*r,rszContext.__repr__cCs|jD]}d|j|<qdSrrr1flagr*r*r,rNs zContext.clear_flagscCs|jD]}d|j|<qdSrrrr*r*r, clear_trapss zContext.clear_trapsc Cs.t|j|j|j|j|j|j|j|j|j }|Sr)) rrFrErDrGrrr;r:rr1Zncr*r*r,rKs zContext._shallow_copyc Cs6t|j|j|j|j|j|j|j|j |j }|Sr)) rrFrErDrGrrr;rMr:rrr*r*r,rMs z Context.copycGs^t||}||jvr*|j|g|RSd|j|<|j|sR|j|g|RS||dSre)_condition_maprIrr3r;r:)r1Z conditionZ explanationr+errorr*r*r,rjs    zContext._raise_errorcCs |jtSr)) _ignore_flagsr9rr*r*r,rszContext._ignore_all_flagscGs|jt||_t|Sr))rrp)r1r;r*r*r,rszContext._ignore_flagscGs8|rt|dttfr|d}|D]}|j|q"dSr)rerqrprremove)r1r;rr*r*r, _regard_flagsszContext._regard_flagscCst|j|jdSre)rWrDrFrr*r*r,rsz Context.EtinycCst|j|jdSre)rWrGrFrr*r*r,rsz Context.EtopcCs|j}||_|Sr))rE)r1rrEr*r*r,rLszContext._set_roundingrScCsjt|tr*||ksd|vr*|tdSt||d}|r`t|j|j |j kr`|tdS| |S)NrTzAtrailing or leading whitespace and underscores are not permitted.rLzdiagnostic info too long in NaN) rerfrhrjrrrrlr<rFrr)r1rlrr*r*r,create_decimals zContext.create_decimalcCst|}||Sr))rrwr)r1rrr*r*r,create_decimal_from_floats z!Context.create_decimal_from_floatcCst|dd}|j|dSrW)rrr1r4r*r*r,rn!s z Context.abscCs8t|dd}|j||d}|tur0td|n|SdSNTrrLUnable to convert %s to Decimal)rrrrxr1r4rrr*r*r,add6s  z Context.addcCst||Sr))rfrrr*r*r,_applyKszContext._applycCst|tstd|S)Nz,canonical requires a Decimal as an argument.)rerrxrVrr*r*r,rVNs zContext.canonicalcCst|dd}|j||dSrW)rrr1r4rr*r*r,r[s! zContext.comparecCst|dd}|j||dSrW)rrXrr*r*r,rXs zContext.compare_signalcCst|dd}||Sr)rrSrr*r*r,rSs zContext.compare_totalcCst|dd}||Sr)rr\rr*r*r,r\s zContext.compare_total_magcCst|dd}|Sr)rrrr*r*r,rs zContext.copy_abscCst|dd}t|Sr)rrrr*r*r, copy_decimals zContext.copy_decimalcCst|dd}|Sr)rrrr*r*r,rs zContext.copy_negatecCst|dd}||Sr)rr]rr*r*r,r]s zContext.copy_signcCs8t|dd}|j||d}|tur0td|n|SdSr)rrrrxrr*r*r,divides  zContext.dividecCs8t|dd}|j||d}|tur0td|n|SdSr)rrrrxrr*r*r, divide_int+s  zContext.divide_intcCs8t|dd}|j||d}|tur0td|n|SdSr)rrrrxrr*r*r,rBs  zContext.divmodcCst|dd}|j|dSrW)rrXrr*r*r,rXWs z Context.expcCst|dd}|j|||dSrW)rr)r1r4rrNr*r*r,ros z Context.fmacCst|tstd|S)Nz/is_canonical requires a Decimal as an argument.)rerrxr`rr*r*r,r`s zContext.is_canonicalcCst|dd}|Sr)rrarr*r*r,ras zContext.is_finitecCst|dd}|Sr)rrErr*r*r,rEs zContext.is_infinitecCst|dd}|Sr)rrrr*r*r,rs zContext.is_nancCst|dd}|j|dSrW)rrdrr*r*r,rds zContext.is_normalcCst|dd}|Sr)rrrr*r*r,rs zContext.is_qnancCst|dd}|Sr)rrfrr*r*r,rfs zContext.is_signedcCst|dd}|Sr)rrrr*r*r,rs zContext.is_snancCst|dd}|j|dSrW)rrgrr*r*r,rgs zContext.is_subnormalcCst|dd}|Sr)rrhrr*r*r,rh%s zContext.is_zerocCst|dd}|j|dSrW)rrrrr*r*r,rr6s z Context.lncCst|dd}|j|dSrW)rrurr*r*r,ruLs z Context.log10cCst|dd}|j|dSrW)rrvrr*r*r,rvhs z Context.logbcCst|dd}|j||dSrW)rrrr*r*r,rs zContext.logical_andcCst|dd}|j|dSrW)rrrr*r*r,rs zContext.logical_invertcCst|dd}|j||dSrW)rrrr*r*r,rs zContext.logical_orcCst|dd}|j||dSrW)rrrr*r*r,rs zContext.logical_xorcCst|dd}|j||dSrW)rrrr*r*r,rs z Context.maxcCst|dd}|j||dSrW)rrrr*r*r,rs zContext.max_magcCst|dd}|j||dSrW)rrrr*r*r,rs z Context.mincCst|dd}|j||dSrW)rrrr*r*r,r-s zContext.min_magcCst|dd}|j|dSrW)rrrr*r*r,minus>s z Context.minuscCs8t|dd}|j||d}|tur0td|n|SdSr)rrrrxrr*r*r,multiplyOs  zContext.multiplycCst|dd}|j|dSrW)rrrr*r*r,ros zContext.next_minuscCst|dd}|j|dSrW)rrrr*r*r,rs zContext.next_pluscCst|dd}|j||dSrW)rrrr*r*r,rs zContext.next_towardcCst|dd}|j|dSrW)rrCrr*r*r,rCs zContext.normalizecCst|dd}|j|dSrW)rrrr*r*r,rs/ zContext.number_classcCst|dd}|j|dSrW)rrrr*r*r,pluss z Context.pluscCs:t|dd}|j|||d}|tur2td|n|SdSr)rr?rrx)r1r4rrrr*r*r,powers I z Context.powercCst|dd}|j||dSrW)rrrr*r*r,res7 zContext.quantizecCstdSrrrr*r*r,rsz Context.radixcCs8t|dd}|j||d}|tur0td|n|SdSr)rrrrxrr*r*r,rs  zContext.remaindercCst|dd}|j||dSrW)rrrr*r*r,rs zContext.remainder_nearcCst|dd}|j||dSrW)rrrr*r*r,rs zContext.rotatecCst|dd}||Sr)rrFrr*r*r,rF s zContext.same_quantumcCst|dd}|j||dSrW)rrrr*r*r,r$s zContext.scalebcCst|dd}|j||dSrW)rrrr*r*r,r7s z Context.shiftcCst|dd}|j|dSrW)rrPrr*r*r,rPUs z Context.sqrtcCs8t|dd}|j||d}|tur0td|n|SdSr)rrrrxrr*r*r,subtractus  zContext.subtractcCst|dd}|j|dSrW)rrrr*r*r,rs zContext.to_eng_stringcCst|dd}|j|dSrW)rrrr*r*r, to_sci_strings zContext.to_sci_stringcCst|dd}|j|dSrW)rrJrr*r*r,rJs zContext.to_integral_exactcCst|dd}|j|dSrW)rrrr*r*r,rs zContext.to_integral_value) NNNNNNNNN)N)rS)N)Wr5r6r7rrrrrrrrNrrKrMrrjrrrrrrrLrrrnrrrVrrXrSr\rrrr]rrrrXrr`rarErrdrrfrrgrhrrrurvrrrrrrrrrrrrrrCrrrrrrrrrFrrrPrrrrJrrr*r*r*r,rs $     $#   %  #2 P:&" rc@s"eZdZdZdddZddZdS)rorCrWrXNcCsf|durd|_d|_d|_nFt|trD|j|_t|j|_|j|_n|d|_|d|_|d|_dS)Nr'r/r_)rCrWrXrerr;r<rQ)r1rzr*r*r,rs     z_WorkRep.__init__cCsd|j|j|jfS)Nz (%r, %r, %r)rrr*r*r,rsz_WorkRep.__repr__)N)r5r6r7rrrr*r*r*r,ros rocCs|j|jkr|}|}n|}|}tt|j}tt|j}|jtd||d}||jd|krpd|_||_|jd|j|j9_|j|_||fS)Nrr_r/r)rXrlrfrWr)rrrFtmprZtmp_lenZ other_lenrXr*r*r,rs rcCsb|dkr dS|dkr |d|Stt|}t|t|d}|| krPdS|d| SdS)Nr'rrS)rfrnrlrstrip)r9rZstr_nZval_nr*r*r,r*(s   r*cCsB|dks|dkrtdd}||kr>||| |d?}}q|S)Nr'z3Both arguments to _sqrt_nearest should be positive.r/)rr)r9r4rr*r*r, _sqrt_nearest=s rcCs2d|>||?}}|d||d@|d@|kS)Nr/r_r*)r-rrrr*r*r,_rshift_nearestLsrcCs&t||\}}|d||d@|kS)Nr_r/)r)r4rrrr*r*r, _div_nearestTsrr$c Cs||}d}||kr(t|||>|ksD||krxt|||?|krxt||d>|t||t|||}|d7}q tdtt|d| }t||}t||}t|dddD]}t||t|||}qt|||S)Nr'r/r]r)rnrrrrWrlrfr) r-MLr0RTZyshiftwrr*r*r,_ilog\s"    rc Cs|d7}tt|}||||dk}|dkrd|}|||}|dkrZ|d|9}nt|d| }t||}t|}t|||}||} nd}t|d| } t| |dSNr_r/r'rr()rlrfrr _log10_digits) rNrr,rOrrrlog_dZlog_10Z log_tenpowerr*r*r,rts     rtc Cs|d7}tt|}||||dk}|dkrr|||}|dkrR|d|9}nt|d| }t|d|}nd}|rttt|d}||dkrt|t||d|}qd}nd}t||dSr)rlrfrrrnr) rNrr,rOrrrr>Z f_log_tenr*r*r,rps"   rpc@seZdZddZddZdS) _Log10MemoizecCs d|_dS)NZ/23025850929940456840179914546843642076011014886)r~rr*r*r,rsz_Log10Memoize.__init__cCs|dkrtd|t|jkrd}d||d}tttd||d}|| dd|krbql|d7}q"|ddd|_t|jd|d S) Nr'zp should be nonnegativer]rr_r(rSrr/)rrrlr~rfrrrrW)r1r,r>rr~r*r*r, getdigitss  z_Log10Memoize.getdigitsN)r5r6r7rrr*r*r*r,rsrc Cst||>|}tdtt|d| }t||}||>}t|dddD]}t|||||}qPt|dddD]"}||d>}t||||}q|||S)Nrr]r/r'rr_)r)rWrlrfrr) r-rrrrr0ZMshiftr rr*r*r,_iexps  rc Cs|d7}td|tt|d}||}||}|dkrH|d|}n|d| }t|t|\}}t|d|}tt|d|d||dfS)Nr_r'r/rir])rrlrfrrrr) rNrr,r>rrZcshiftZquotr3r*r*r,r^$sr^c Csttt||}t||||d}||}|dkrJ||d|}nt||d| }|dkrtt||dk|dkkrd|ddd|} } qd|d| } } n,t||d |d\} } t| d} | d7} | | fS)Nr/r'r)rlrfrnrprr^) r.r/r1r2r,rZlxcrZpcrrXr*r*r,r8Hs r8r(F5(rirr) r2345678rDcCs0|dkrtdt|}dt|||dS)Nr'z0The argument to _log10_lb should be nonnegative.r()rrrfrl)rNZ correctionZstr_cr*r*r,r+rsr+cCsLt|tr|St|tr t|S|r8t|tr8t|S|rHtd|tS)Nr)rerrWrvrwrxr)rrZ allow_floatr*r*r,r}s    rcCst|tr||fSt|tjrR|jsDt|jtt|j |j |j }|t|j fS|rrt|tj rr|jdkrr|j}t|trt}|rd|jt<n |td|t|fSttfS)Nr'r/rb)rer_numbersZRationalrRr:r;rfrWr< denominatorrQ numeratorZComplexrrrvrr;rrjrwr)r1rrr2r*r*r,rs(    rr'i?Bi)rFrEr:r;rGrDrrr`)rFrEr:r;a # A numeric string consists of: # \s* (?P[-+])? # an optional sign, followed by either... ( (?=\d|\.\d) # ...a number (with at least one digit) (?P\d*) # having a (possibly empty) integer part (\.(?P\d*))? # followed by an optional fractional part (E(?P[-+]?\d+))? # followed by an optional exponent, or... | Inf(inity)? # ...an infinity, or... | (?Ps)? # ...an (optionally signaling) NaN # NaN (?P\d*) # with (possibly empty) diagnostic info. ) # \s* \Z z0*$z50*$z\A (?: (?P.)? (?P[<>=^]) )? (?P[-+ ])? (?P\#)? (?P0)? (?P(?!0)\d+)? (?P,)? (?:\.(?P0|(?!0)\d+))? (?P[eEfFgGn%])? \Z cCst|}|durtd||}|d}|d}|ddu|d<|drv|durbtd||durvtd||p|d|d<|pd|d<|d durd |d <t|d pd |d <|d durt|d |d <|d dkr|ddus|ddvrd|d <|ddkrfd|d<|dur&t}|ddur@td||d|d<|d|d<|d|d<n*|ddur|d|d<ddg|d<d|d<|S)NzInvalid format specifier: fillalignzeropadz7Fill character conflicts with '0' in format specifier: z2Alignment conflicts with '0' in format specifier:  >rCrV minimumwidthrSrr'rZgGnr/r9r thousands_sepzJExplicit thousands separator conflicts with 'n' type in format specifier: grouping decimal_pointrUr]r)_parse_format_specifier_regexmatchrr groupdictrW_locale localeconv) format_specrr{Z format_dictrrr*r*r,rsT           rc Cs|d}|d}||t|t|}|d}|dkrF|||}nj|dkr\|||}nT|dkrr|||}n>|dkrt|d}|d|||||d}ntd |S) NrrrrZr6rYrA hash_infomodulusrrrrrrrr*r*r*r,ss`#           &   .  ^  0",# %$+   *       P % )