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_CONTEXTVARZdecimalz1.70z2.4.2N) namedtuplerzsign digits exponentcGs|SN)argsr)r)"/usr/lib64/python3.9/_pydecimal.pyr,rrrrrrrrTllNZolNZoi@Tic@seZdZddZdS)rcGsdSr(r)selfcontextr*r)r)r+handleszDecimalException.handleN__name__ __module__ __qualname__r2r)r)r)r+rsrc@s eZdZdS)rNr4r5r6r)r)r)r+rsrc@seZdZddZdS)r cGs,|r(t|dj|djdd}||StS)Nr&nT)_dec_from_triple_sign_int_fix_nan_NaN)r0r1r*ansr)r)r+r2s zInvalidOperation.handleNr3r)r)r)r+r sr c@seZdZddZdS)rcGstSr(r=r/r)r)r+r2szConversionSyntax.handleNr3r)r)r)r+rsrc@seZdZddZdS)r cGst|Sr()_SignedInfinityr0r1signr*r)r)r+r2szDivisionByZero.handleNr3r)r)r)r+r s r c@seZdZddZdS)rcGstSr(r?r/r)r)r+r2"szDivisionImpossible.handleNr3r)r)r)r+rsrc@seZdZddZdS)rcGstSr(r?r/r)r)r+r2-szDivisionUndefined.handleNr3r)r)r)r+r%src@s eZdZdS)r Nr7r)r)r)r+r 0sr c@seZdZddZdS)rcGstSr(r?r/r)r)r+r2GszInvalidContext.handleNr3r)r)r)r+r<s rc@s eZdZdS)r Nr7r)r)r)r+r Jsr c@s eZdZdS)r Nr7r)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.) roundingrrrrr@rr9precEmaxrrAr)r)r+r2ws     zOverflow.handleNr3r)r)r)r+rasrc@s eZdZdS)rNr7r)r)r)r+rsrc@s eZdZdS)rNr7r)r)r)r+rsrZdecimal_contextcCs6z tWSty0t}t||YS0dSr()_current_context_varget LookupErrorrsetr1r)r)r+rs    rcCs,|tttfvr|}|t|dSr()rrrcopy clear_flagsrGrJrKr)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: %rrB-r.r&intZfracexprRFdiagsignalNr8FTztInvalid 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.r8rZzUThe 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:rVr;lenrPrQlstripabsr_WorkReprBrWlisttuple ValueErrorappendjoinmapfloatr from_float TypeError) clsvaluer1r0mintpartfracpartrWrXdigitsZdigitr)r)r+rc 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.)rdrVrermru_mathisinfisnanreprcopysignas_integer_ratio bit_lengthrwr9r)rxfrBkcoeffr8dresultr)r)r+rvs$    zDecimal.from_floatcCs(|jr$|j}|dkrdS|dkr$dSdS)Nr8r.rZr^r&)rQrP)r0rWr)r)r+_isnanszDecimal._isnancCs|jdkr|jrdSdSdS)Nr[r.r&)rPr:r0r)r)r+ _isinfinitys  zDecimal._isinfinitycCs||}|durd}n|}|s&|rx|dur4t}|dkrJ|td|S|dkr`|td|S|rn||S||SdS)NFr^sNaNr&)rrrir r<)r0otherr1 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&)rrQis_snanrir is_qnanr0rr1r)r)r+_compare_check_nans s0  zDecimal._compare_check_nanscCs|jp|jdkSNrRrQr;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.rR)rQrr:adjustedr;rP)r0rZself_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&rrrrr0rr1r>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_otherrQrrrrr)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) rQrrwis_nan _PyHASH_NANr: _PyHASH_INFrPpow_PyHASH_MODULUS _PyHASH_10INVrVr;)r0Zexp_hashZhash_r>r)r)r+__hash__s  zDecimal.__hash__cCst|jttt|j|jSr()rr:rprtrVr;rPrr)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~) rQrrq OverflowErrorrVr;rPminrr:)r0r8rZd5Zd2Zshift2r)r)r+rs,     zDecimal.as_integer_ratiocCs dt|S)Nz Decimal('%s'))rerr)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)NrTrUr[ZInfinityr8NaNrr&r.rRr\.eEz%+d)r:rQrPr;rkrcapitals) r0engr1rB leftdigitsdotplacer{r|rWr)r)r+__str__s:     zDecimal.__str__cCs|jd|dS)NT)rr1)rr0r1r)r)r+ to_eng_string;szDecimal.to_eng_stringcCsR|jr|j|d}|r|S|dur(t}|s@|jtkr@|}n|}||SNrK)rQrrrDrcopy_abs copy_negate_fixr0r1r>r)r)r+__neg__Ds  zDecimal.__neg__cCsR|jr|j|d}|r|S|dur(t}|s@|jtkr@|}nt|}||Sr)rQrrrDrrrrrr)r)r+__pos__Zs  zDecimal.__pos__TcCsJ|s |S|jr&|j|d}|r&|S|jr:|j|d}n |j|d}|Sr)rrQrr:rr)r0roundr1r>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.rR)r&r&)rrrrQrrr:rir rrrPrDrr9rmaxrE_rescalern _normalizerBrVrW) r0rr1r>rWZ negativezerorBop1op2rr)r)r+__add__s|              zDecimal.__add__cCsHt|}|tur|S|js |jr6|j||d}|r6|S|j||dSr)rrrQrrrrr)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 * (+-)INFrR1)rrrr:rQrrrir r@rPr9rr;rnrerV)r0rr1Z 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 infinityrRz0 / 0zx / 0r&r.rr~)rrrr:rQrrrir r@rr9Etinyrr rPrkr;rErndivmodrVrer) r0rr1rBr>rWrshiftrr 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)NrrRr&rz%quotient too large in //, % or divmod)r:rrPrrr9rrDrErnrWrVrrerir) r0rr1rBrexpdiffrrqrr>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:rrir r@rr rr)r0rr1r>rBZquotientrr)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.) rrrrrrir rrr)r0rr1r>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)rRr.rrr^r&)rrrrrir rrrrrPr9r:rrErrrDrnrWrVrre) r0rr1r>ideal_exponentrrrrrrBr)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&) rrrrrrir r@r: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)rrrqr:rerur0sr)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&rrR) rQrrqrrr:rPrVr;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()complexrurr)r)r+ __complex__nszDecimal.__complex__cCsR|j}|j|j}t||krJ|t||dd}t|j||jdSt|S)NrRT) r;rEclamprkrlr9r:rPr)r0r1payloadZmax_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)NrR above Emaxr&rr.r)rQrr<rrEtoprFrrrrPrirr9r:rkr;rErr r _pick_rounding_functionrDrerVrr )r0r1rrexp_maxZnew_expZexp_minr>Zself_is_subnormalr}Zrounding_methodchangedrrr)r)r+r}sn                     z Decimal._fixcCst|j|rdSdSdS)Nr&r) _all_zerosr;r0rEr)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.02468rr rr)r)r+_round_half_evens zDecimal._round_half_evencCs |jr||S|| SdSr(r:rrr)r)r+_round_ceilings zDecimal._round_ceilingcCs |js||S|| SdSr(rrr)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) rdrVrwr9quantizerQrrqrrr)r0r8rWr)r)r+ __round__&s/   zDecimal.__round__cCs0|jr |rtdntdt|dtSNrrr&)rQrrqrrVrrrr)r)r+ __floor__ds  zDecimal.__floor__cCs0|jr |rtdntdt|dtSr)rQrrqrrVrrrr)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) NTrrZrr8r[zINF * 0 in fmaz0 * INF in fma) rrQrrPrir r@r:r9rerVr;r)r0rthirdr1productr)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)rrrrrir r< _isintegerrrE_isevenr:rmrVrnto_integral_valuerrWranger9re) r0rmodulor1rrZ modulo_is_nanrBbaseexponentir)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$qZ result_signZ multiplierrWZself_adjexactboundrr/r0r1r2r3r4r5extrarrZ newcontext exceptionr)r)r+__pow__s                        "        zDecimal.__pow__cCs"t|}|tur|S|j||dSr)rrrCrr)r)r+__rpow__ szDecimal.__rpow__cCs|durt}|jr(|j|d}|r(|S||}|r>|S|sPt|jddS|j|g|j }t |j }|j }|j |ddkr||kr|d7}|d8}qtt|j|j d||S)NrKrRr&r.) rrQrrrr9r:rFrrrkr;rP)r0r1r>duprendrWr)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 quantizerRz9exponent of quantize result too large for current contextr.z7quantize result has too many digits for current context)rrrDrQrrrrir rrPrFr9r:rrrErrkr;Eminr r r )r0rWrDr1r>rr)r)r+r s`          zDecimal.quantizecCsDt|dd}|js|jr8|r(|p6|o6|S|j|jkSr)rrQr is_infiniterPrr)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)NrRr&rr.) rQrr9r:rPr;rkrrerV)r0rWrDr}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.)rqrQrrr)r0placesrDr>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)NrKr&rR) rQrrrPr9r:rrDrrir r r0rDr1r>r)r)r+to_integral_exactm s$      zDecimal.to_integral_exactcCs`|durt}|dur|j}|jr>|j|d}|r6|St|S|jdkrPt|S|d|SdS)NrKr&)rrDrQrrrPrrMr)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) NrKr&rRr^r.zsqrt(-x), x > 0rr+Tr~)rrQrrr:rr9rPrrir rErnrWrVrkr;rre _shallow_copy _set_roundingrrD)r0r1r>rEoprclrr?rr8rrDr)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&rrrrQrrrr compare_totalr0rr1ZsnZonrRr>r)r)r+r s&       z Decimal.maxcCst|dd}|durt}|js&|jr~|}|}|s>|r~|dkrX|dkrX||S|dkrr|dkrr||S|||S||}|dkr||}|dkr|}n|}||SrUrVrXr)r)r+r* s&       z Decimal.mincCs8|jr dS|jdkrdS|j|jd}|dt|kS)NFr&TrR)rQrPr;rk)r0restr)r)r+rL s  zDecimal._isintegercCs&|r|jdkrdS|jd|jdvS)Nr&Trr )rPr;rr)r)r+rU szDecimal._isevencCs0z|jt|jdWSty*YdS0dS)Nr.r&)rPrkr;rwrr)r)r+r[ s zDecimal.adjustedcCs|Sr(r)rr)r)r+ canonicalc szDecimal.canonicalcCs.t|dd}|||}|r |S|j||dSNTrrK)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@|rr/adjrQrRrrArrWrDr)r)r+rW sH   $(  "   z Decimal.expcCsdS)NTr)rr)r)r+ is_canonical' szDecimal.is_canonicalcCs|j Sr()rQrr)r)r+ is_finite/ szDecimal.is_finitecCs |jdkS)Nr[rPrr)r)r+rI7 szDecimal.is_infinitecCs |jdvS)Nr`rfrr)r)r+r; szDecimal.is_nancCs*|js |sdS|durt}|j|kSNF)rQrrHrrr)r)r+ is_normal? s  zDecimal.is_normalcCs |jdkS)Nr8rfrr)r)r+rG szDecimal.is_qnancCs |jdkSNr.)r:rr)r)r+ is_signedK szDecimal.is_signedcCs |jdkS)NrZrfrr)r)r+rO szDecimal.is_snancCs*|js |sdS|durt}||jkSrg)rQrrrHrr)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&rPrkr;rernrVrWr0rcrQrRrnumZdenr)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) NrKr.zln of a negative valuer^r~rr\r&)rr_NegativeInfinityr _Infinityr9r^r:rir rnrVrWrErq_dlogrkrermr9rOrPrrrD r0r1r>rQrRrr/rKrrDr)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^Z231rnror)r)r+r: 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) NrKr.zlog10 of a negative valuer&rrRr^r~rr\)rrrrrrsr:rir r;rkrrPrnrVrWrEr:_dlog10rermr9rOrPrrrDrur)r)r+log10 s:   . $   z Decimal.log10cCsV|j|d}|r|S|dur"t}|r.tS|s@|tddSt|}||S)NrKzlogb(0)r.) rrrrsrir rrrrr)r)r+logb s  z Decimal.logbcCs6|jdks|jdkrdS|jD]}|dvrdSqdS)Nr&FZ01T)r:rPr;)r0digr)r)r+ _islogical s  zDecimal._islogicalcCs|jt|}|dkr$d||}n|dkr<||j d}|jt|}|dkr`d||}n|dkrx||j d}||fS)Nr&rR)rErk)r0r1opaopbZdifr)r)r+ _fill_logical' szDecimal._fill_logicalcCsz|durt}t|dd}|r*|s4|tS|||j|j\}}dddt||D}t d| dptddS)NTrrTcSs$g|]\}}tt|t|@qSr)rerV.0r7br)r)r+ B r-z'Decimal.logical_and..r&rR rrr|rir rr;rszipr9rlr0rr1r}r~rr)r)r+ logical_and4 s  zDecimal.logical_andcCs(|durt}|tdd|jd|S)Nr&r)r logical_xorr9rErr)r)r+logical_invertE s zDecimal.logical_invertcCsz|durt}t|dd}|r*|s4|tS|||j|j\}}dddt||D}t d| dptddS)NTrrTcSs$g|]\}}tt|t|BqSr)rrr)r)r+rZ r-z&Decimal.logical_or..r&rRrrr)r)r+ logical_orL s  zDecimal.logical_orcCsz|durt}t|dd}|r*|s4|tS|||j|j\}}dddt||D}t d| dptddS)NTrrTcSs$g|]\}}tt|t|AqSr)rrr)r)r+rk r-z'Decimal.logical_xor..r&rRrrr)r)r+r] s  zDecimal.logical_xorcCst|dd}|durt}|js&|jr~|}|}|s>|r~|dkrX|dkrX||S|dkrr|dkrr||S|||S||}|dkr||}|dkr|}n|}||SrU rrrQrrrrrrWrXr)r)r+max_magn s&      zDecimal.max_magcCst|dd}|durt}|js&|jr~|}|}|s>|r~|dkrX|dkrX||S|dkrr|dkrr||S|||S||}|dkr||}|dkr|}n|}||SrUrrXr)r)r+min_mag s&      zDecimal.min_magcCs|durt}|j|d}|r"|S|dkr2tS|dkrTtdd|j|S|}|t | | |}||kr|S| tdd| d|S)NrKrr.r&rCr)rrrrrr9rErrLrPr_ignore_all_flagsrrrr0r1r>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)NrKr.rrCr&r)rrrrsr9rErrLrPrrrrrrr)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)rrrrrarrrrirr:r r rrHrr r)r0rr1r>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+ZerorKz -Subnormalz +Subnormalz-Normalz+Normal)rrrrlr:rrk)r0r1infr)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&rRrrrrPrir rErVrrr;rkr9r:rl)r0rr1r>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^)rrrrPrir rFrErVrrr9r:r;r)r0rr1r>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)r0rr1r>rrrZshiftedr)r)r+rns4       z Decimal.shiftcCs|jt|ffSr() __class__rerr)r)r+ __reduce__szDecimal.__reduce__cCst|tur|S|t|Sr(typerrrerr)r)r+__copy__s zDecimal.__copy__cCst|tur|S|t|Sr(r)r0memor)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&rrRrT)r_parse_format_specifierrQ _format_signr:rer _format_alignrr9r;rPrDrLrrk_format_number)r0Z specifierr1rspecrBbodyrDrrrr{r|rWr)r)r+ __format__sZ               zDecimal.__format__)rRN)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)r4r5r6 __slots__rc classmethodrvrrrrrrrrrrrrrrrrrrrrrr__radd__rrr__rmul__rrrrrrrrrrrr __trunc__propertyrrrrr<rrrrr r rrrdictrrrrrr$r8rCrDrGrrJrrLrNr to_integralrTrrrrrrZr\rWr`rrrarWrdrerIrrhrrjrrkrlrqrvr:ryrzr|rrrrrrrrrrrrrrrrrrrr)r)r)r+rs  , !@  2 4    V   7 ;!  $    K       f  > , Un Y   = "   c * "  I   K   2 3          . * !  'rFcCs&tt}||_||_||_||_|Sr()rbrcrr:r;rPrQ)rBZ coefficientr"Zspecialr0r)r)r+r9s  r9c@s$eZdZddZddZddZdS)rNcCs||_dSr()rL new_context)r0rr)r)r+__init__sz_ContextManager.__init__cCst|_t|j|jSr()r saved_contextrrrr)r)r+ __enter__s z_ContextManager.__enter__cCst|jdSr()rr)r0tvtbr)r)r+__exit__sz_ContextManager.__exit__N)r4r5r6rrrr)r)r)r+rNsrNc @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(rVrrr=r)r+ Ir-z#Context.__init__..r&c3s|]}|t|vfVqdSr(rrr>r)r+rPr-)r NameErrorrErDrHrFrr_ignored_flagsr=rLrdrr<fromkeysr>) r0rErDrHrFrrr>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)rdrVrwrqrb __setattr__)r0nameryZvminZvmaxr)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)rdrrwr<KeyErrorrbr)r0rrkeyr)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)NrEr.rrHrr&rFrrrDz%s: invalid rounding moder>r=rz.'decimal.Context' object has no attribute '%s')r_rounding_modesrwrbrrAttributeError)r0rryr)r)r+rms*  zContext.__setattr__cCstd|dS)Nz%s cannot be deleted)r)r0rr)r)r+ __delattr__szContext.__delattr__c CsNdd|jD}dd|jD}|j|j|j|j|j|j|j ||ffS)NcSsg|]\}}|r|qSr)r)rsigrr)r)r+rr-z&Context.__reduce__..cSsg|]\}}|r|qSr)r)rr)r)r+rr-) r>itemsr=rrErDrHrFrr)r0r>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)r4)rrrr)r)r+rr-z$Context.__repr__..zflags=[z, ]cSsg|]\}}|r|jqSr)r)rrrr)r)r+rr-ztraps=[))rrvarsr>rrsr=)r0rnamesr)r)r+rszContext.__repr__cCs|jD]}d|j|<qdSrrr0flagr)r)r+rMs 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() rrErDrHrFrrr>r=rr0Zncr)r)r+rOs zContext._shallow_copyc Cs6t|j|j|j|j|j|j|j|j |j }|Sr() rrErDrHrFrrr>rLr=rrr)r)r+rLs z Context.copycGs^t||}||jvr*|j|g|RSd|j|<|j|sR|j|g|RS||dSri)_condition_maprHrr2r>r=)r0Z conditionZ explanationr*errorr)r)r+ris    zContext._raise_errorcCs |jtSr() _ignore_flagsr<rr)r)r+rszContext._ignore_all_flagscGs|jt||_t|Sr()rro)r0r>r)r)r+rszContext._ignore_flagscGs8|rt|dttfr|d}|D]}|j|q"dSr)rdrprorremove)r0r>rr)r)r+ _regard_flagsszContext._regard_flagscCst|j|jdSri)rVrHrErr)r)r+rsz Context.EtinycCst|j|jdSri)rVrFrErr)r)r+rsz Context.EtopcCs|j}||_|Sr()rD)r0rrDr)r)r+rPszContext._set_roundingrRcCsjt|tr*||ksd|vr*|tdSt||d}|r`t|j|j |j kr`|tdS| |S)NrSzAtrailing or leading whitespace and underscores are not permitted.rKzdiagnostic info too long in NaN) rdrergrirrrrkr;rErr)r0rprr)r)r+create_decimals zContext.create_decimalcCst|}||Sr()rrvr)r0rrr)r)r+create_decimal_from_floats z!Context.create_decimal_from_floatcCst|dd}|j|dSr[)rrr0r7r)r)r+rm!s z Context.abscCs8t|dd}|j||d}|tur0td|n|SdSNTrrKUnable to convert %s to Decimal)rrrrwr0r7rrr)r)r+add6s  z Context.addcCst||Sr()rerrr)r)r+_applyKszContext._applycCst|tstd|S)Nz,canonical requires a Decimal as an argument.)rdrrwrZrr)r)r+rZNs zContext.canonicalcCst|dd}|j||dSr[)rrr0r7rr)r)r+r[s! zContext.comparecCst|dd}|j||dSr[)rr\rr)r)r+r\s zContext.compare_signalcCst|dd}||Sr)rrWrr)r)r+rWs 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)rrarr)r)r+ras zContext.copy_signcCs8t|dd}|j||d}|tur0td|n|SdSr)rrrrwrr)r)r+divides  zContext.dividecCs8t|dd}|j||d}|tur0td|n|SdSr)rrrrwrr)r)r+ divide_int+s  zContext.divide_intcCs8t|dd}|j||d}|tur0td|n|SdSr)rrrrwrr)r)r+rBs  zContext.divmodcCst|dd}|j|dSr[)rrWrr)r)r+rWWs z Context.expcCst|dd}|j|||dSr[)rr)r0r7rrRr)r)r+ros z Context.fmacCst|tstd|S)Nz/is_canonical requires a Decimal as an argument.)rdrrwrdrr)r)r+rds zContext.is_canonicalcCst|dd}|Sr)rrerr)r)r+res zContext.is_finitecCst|dd}|Sr)rrIrr)r)r+rIs zContext.is_infinitecCst|dd}|Sr)rrrr)r)r+rs zContext.is_nancCst|dd}|j|dSr[)rrhrr)r)r+rhs zContext.is_normalcCst|dd}|Sr)rrrr)r)r+rs zContext.is_qnancCst|dd}|Sr)rrjrr)r)r+rjs zContext.is_signedcCst|dd}|Sr)rrrr)r)r+rs zContext.is_snancCst|dd}|j|dSr[)rrkrr)r)r+rks zContext.is_subnormalcCst|dd}|Sr)rrlrr)r)r+rl%s zContext.is_zerocCst|dd}|j|dSr[)rrvrr)r)r+rv6s z Context.lncCst|dd}|j|dSr[)rryrr)r)r+ryLs z Context.log10cCst|dd}|j|dSr[)rrzrr)r)r+rzhs z Context.logbcCst|dd}|j||dSr[)rrrr)r)r+rs zContext.logical_andcCst|dd}|j|dSr[)rrrr)r)r+rs zContext.logical_invertcCst|dd}|j||dSr[)rrrr)r)r+rs zContext.logical_orcCst|dd}|j||dSr[)rrrr)r)r+rs zContext.logical_xorcCst|dd}|j||dSr[)rrrr)r)r+rs z Context.maxcCst|dd}|j||dSr[)rrrr)r)r+rs zContext.max_magcCst|dd}|j||dSr[)rrrr)r)r+rs z Context.mincCst|dd}|j||dSr[)rrrr)r)r+r-s zContext.min_magcCst|dd}|j|dSr[)rrrr)r)r+minus>s z Context.minuscCs8t|dd}|j||d}|tur0td|n|SdSr)rrrrwrr)r)r+multiplyOs  zContext.multiplycCst|dd}|j|dSr[)rrrr)r)r+ros zContext.next_minuscCst|dd}|j|dSr[)rrrr)r)r+rs zContext.next_pluscCst|dd}|j||dSr[)rrrr)r)r+rs zContext.next_towardcCst|dd}|j|dSr[)rrGrr)r)r+rGs zContext.normalizecCst|dd}|j|dSr[)rrrr)r)r+rs/ zContext.number_classcCst|dd}|j|dSr[)rrrr)r)r+pluss z Context.pluscCs:t|dd}|j|||d}|tur2td|n|SdSr)rrCrrw)r0r7rr rr)r)r+powers I z Context.powercCst|dd}|j||dSr[)rrrr)r)r+res7 zContext.quantizecCstdSrrrr)r)r+rsz Context.radixcCs8t|dd}|j||d}|tur0td|n|SdSr)rrrrwrr)r)r+rs  zContext.remaindercCst|dd}|j||dSr[)rrrr)r)r+rs zContext.remainder_nearcCst|dd}|j||dSr[)rrrr)r)r+rs zContext.rotatecCst|dd}||Sr)rrJrr)r)r+rJ s zContext.same_quantumcCst|dd}|j||dSr[)rrrr)r)r+r$s zContext.scalebcCst|dd}|j||dSr[)rrrr)r)r+r7s z Context.shiftcCst|dd}|j|dSr[)rrTrr)r)r+rTUs z Context.sqrtcCs8t|dd}|j||d}|tur0td|n|SdSr)rrrrwrr)r)r+subtractus  zContext.subtractcCst|dd}|j|dSr[)rrrr)r)r+rs zContext.to_eng_stringcCst|dd}|j|dSr[)rrrr)r)r+ to_sci_strings zContext.to_sci_stringcCst|dd}|j|dSr[)rrNrr)r)r+rNs zContext.to_integral_exactcCst|dd}|j|dSr[)rrrr)r)r+rs zContext.to_integral_value) NNNNNNNNN)N)rR)N)Wr4r5r6rrrrrrrrMrrOrLrrirrrrrrrPrrrmrrrZrr\rWr`rrrrarrrrWrrdrerIrrhrrjrrkrlrvryrzrrrrrrrrrrrrrrGrrrrrrrrrJrrrTrrrrNrrr)r)r)r+rs $     $#   %  #2 P:&" rc@s"eZdZdZdddZddZdS)rnrBrVrWNcCsf|durd|_d|_d|_nFt|trD|j|_t|j|_|j|_n|d|_|d|_|d|_dS)Nr&r.r^)rBrVrWrdrr:r;rP)r0ryr)r)r+rs     z_WorkRep.__init__cCsd|j|j|jfS)Nz (%r, %r, %r)rrr)r)r+rsz_WorkRep.__repr__)N)r4r5r6rrrr)r)r)r+rns rncCs|j|jkr|}|}n|}|}tt|j}tt|j}|jtd||d}||jd|krpd|_||_|jd|j|j9_|j|_||fS)Nrr^r.r)rWrkrerVr)rrrEtmprZtmp_lenZ other_lenrWr)r)r+rs rcCsb|dkr dS|dkr |d|Stt|}t|t|d}|| krPdS|d| SdS)Nr&rrR)rermrkrstrip)r8rZstr_nZval_nr)r)r+r-(s   r-cCsB|dks|dkrtdd}||kr>||| |d?}}q|S)Nr&z3Both arguments to _sqrt_nearest should be positive.r.)rq)r8r7rr)r)r+ _sqrt_nearest=s rcCs2d|>||?}}|d||d@|d@|kS)Nr.r^r))r0rrrr)r)r+_rshift_nearestLsrcCs&t||\}}|d||d@|kS)Nr^r.)r)r7rrrr)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)rmrrrrVrkrer) r0MLr3RTZyshiftwrr)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+)rkrerr _log10_digits) rRrr/rSrrrlog_dZlog_10Z log_tenpowerr)r)r+rxs     rxc Cs|d7}tt|}||||dk}|dkrr|||}|dkrR|d|9}nt|d| }t|d|}nd}|rttt|d}||dkrt|t||d|}qd}nd}t||dSr)rkrerrrmr) rRrr/rSrrrrAZ f_log_tenr)r)r+rts"   rtc@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+rRrr.)rqrkr}rerrrrV)r0r/rArr}r)r)r+ getdigitss  z_Log10Memoize.getdigitsN)r4r5r6rr r)r)r)r+rsrc Cst||>|}tdtt|d| }t||}||>}t|dddD]}t|||||}qPt|dddD]"}||d>}t||||}q|||S)Nrr\r.r&rr^)r,rVrkrerr) r0rrrrr3ZMshiftr#rr)r)r+_iexps  r c Cs|d7}td|tt|d}||}||}|dkrH|d|}n|d| }t|t|\}}t|d|}tt|d|d||dfS)Nr^r&r.rir\)rrkrerrrr ) rRrr/rArrZcshiftZquotr6r)r)r+rb$srbc Csttt||}t||||d}||}|dkrJ||d|}nt||d| }|dkrtt||dk|dkkrd|ddd|} } qd|d| } } n,t||d |d\} } t| d} | d7} | | fS)Nr.r&r)rkrermrtrrb) r1r2r4r5r/rZlxcrZpcrrWr)r)r+r;Hs r;r+F5(rmrr~) r2345678rCcCs0|dkrtdt|}dt|||dS)Nr&z0The argument to _log10_lb should be nonnegative.r+)rqrerk)rRZ correctionZstr_cr)r)r+r.rsr.cCsLt|tr|St|tr t|S|r8t|tr8t|S|rHtd|tS)Nr)rdrrVrurvrwr)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.ra)rdr_numbersZRationalrQr9r:rerVr; denominatorrP numeratorZComplexrrrurr>rrirvr)r0rrr1r)r)r+rs(    rr*i?Bi)rErDr=r>rFrHrrr_)rErDr=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:  >rBrU minimumwidthrRrr&rZgGnr.r8r thousands_sepzJExplicit thousands separator conflicts with 'n' type in format specifier: grouping decimal_pointrTr\r)_parse_format_specifier_regexmatchrq groupdictrV_locale localeconv) format_specrrzZ format_dictrrr)r)r+rsT           rc Cs|d}|d}||t|t|}|d}|dkrF|||}nj|dkr\|||}nT|dkrr|||}n>|dkrt|d}|d|||||d}ntd |S) Nrrrss`#           &   .  ^  0",# %$+   *       P % )