B ljCT%@sdddddddddd d d d d ddddddddddddddddddd d!d"d#d$g%ZeZd%Zd&Zd'Zd(d)lZd(d)lZd(d)l Z yd(d*l m Z e dd+Z Wnek rd,d-Z YnXdZdZdZdZdZdZdZdZd.Zd.Ze jd/krd0Zd0Zd1Zn d2Zd2Zd3Zeed4ZGd5ddeZGd6ddeZ Gd7ddeZ!Gd8dde!Z"Gd9d d ee#Z$Gd:dde!Z%Gd;dde!e#Z&Gdd d eZ)Gd?d d eZ*Gd@d d e'e)Z+GdAdde'e)e*Z,GdBddee-Z.e e$e'e+e)e,e!e*e.g Z/e"e!e%e!e&e!e(e!iZ0eeeeeeeefZ1d(d)l2Z2e23dCZ4dDdZ5dEdZ6[2ddFdZ7GdGdde8Z9ddIdJZ:ej;GdNdOdOe8Z?ddPdQZ@eAjBZCdRdSZDdTdUZEdVdWZFdXdYZGdd[d\ZHd]d^ZId_d`ZJGdadbdbe8ZKeKjLZMddcddZNdedfZOdgdhZPdidjdkdldmdndodpdqdr fdsdtZQddudvZRddwdxZSe>dyee$e+e!ggdzd{d4d(d|ZTe>d}ee$e+e!e e,ggd~ZUe>d}eggd~ZVd(d)lWZWeWXdeWjYeWjZBj[Z\eWXdj[Z]eWXdj[Z^eWXdeWjYeWj_BZ`[Wy d(d)laZbWnek rYnXdddZcddZdddZedddZfddZgddZhe9dZie9dZje9dZke9d(Zle9d4Zme9dZneiejfZoe jpjqZre jpjsZte jpjuZvewdperderZx[ d)S)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) namedtuplezsign digits exponentcGs|S)N)argsr(r(-/opt/alt/python37/lib/python3.7/_pydecimal.pyr+TllNZolNZoi@Tic@seZdZddZdS)rcGsdS)Nr()selfcontextr)r(r(r*handleszDecimalException.handleN)__name__ __module__ __qualname__r0r(r(r(r*rsc@s eZdZdS)rN)r1r2r3r(r(r(r*rs c@seZdZddZdS)r cGs,|r(t|dj|djdd}||StS)Nr&nT)_dec_from_triple_sign_int_fix_nan_NaN)r.r/r)ansr(r(r*r0s zInvalidOperation.handleN)r1r2r3r0r(r(r(r*r sc@seZdZddZdS)rcGstS)N)r9)r.r/r)r(r(r*r0szConversionSyntax.handleN)r1r2r3r0r(r(r(r*rsc@seZdZddZdS)r cGst|S)N)_SignedInfinity)r.r/signr)r(r(r*r0szDivisionByZero.handleN)r1r2r3r0r(r(r(r*r s c@seZdZddZdS)rcGstS)N)r9)r.r/r)r(r(r*r0"szDivisionImpossible.handleN)r1r2r3r0r(r(r(r*rsc@seZdZddZdS)rcGstS)N)r9)r.r/r)r(r(r*r0-szDivisionUndefined.handleN)r1r2r3r0r(r(r(r*r%sc@s eZdZdS)r N)r1r2r3r(r(r(r*r 0s c@seZdZddZdS)rcGstS)N)r9)r.r/r)r(r(r*r0GszInvalidContext.handleN)r1r2r3r0r(r(r(r*r<s c@s eZdZdS)r N)r1r2r3r(r(r(r*r Js c@s eZdZdS)r N)r1r2r3r(r(r(r*r Vs c@seZdZddZdS)rcGs|jttttfkrt|S|dkrR|jtkr4t|St|d|j|j |jdS|dkr|jt krlt|St|d|j|j |jdSdS)Nr&9r-) roundingrrrrr;rr5precEmaxr)r.r/r<r)r(r(r*r0ws     zOverflow.handleN)r1r2r3r0r(r(r(r*rasc@s eZdZdS)rN)r1r2r3r(r(r(r*rs c@s eZdZdS)rN)r1r2r3r(r(r(r*rs Zdecimal_contextcCs2ytStk r,t}t||SXdS)N)_current_context_varget LookupErrorrset)r/r(r(r*rs  cCs,|tttfkr|}|t|dS)N)rrrcopy clear_flagsrArD)r/r(r(r*rscCs|dkrt}t|S)N)r_ContextManager)Zctxr(r(r*rs$c @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;e         z Decimal._cmpcCs<t||dd\}}|tkr|S|||r.dS||dkS)NT) equality_opFr&)_convert_for_comparisonNotImplementedrr)r.rr/r(r(r*__eq__qs  zDecimal.__eq__cCs<t||\}}|tkr|S|||}|r.dS||dkS)NFr&)rrrr)r.rr/r:r(r(r*__lt__ys zDecimal.__lt__cCs<t||\}}|tkr|S|||}|r.dS||dkS)NFr&)rrrr)r.rr/r:r(r(r*__le__s zDecimal.__le__cCs<t||\}}|tkr|S|||}|r.dS||dkS)NFr&)rrrr)r.rr/r:r(r(r*__gt__s zDecimal.__gt__cCs<t||\}}|tkr|S|||}|r.dS||dkS)NFr&)rrrr)r.rr/r:r(r(r*__ge__s zDecimal.__ge__cCs>t|dd}|js|r0|jr0|||}|r0|St||S)NT)raiseit)_convert_otherrIrrr)r.rr/r:r(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~) rIrrlis_nan _PyHASH_NANr6 _PyHASH_INFrHpow_PyHASH_MODULUS _PyHASH_10INVrNr7)r.Zexp_hashZhash_r:r(r(r*__hash__s  zDecimal.__hash__cCst|jttt|j|jS)N)rr6rerirNr7rH)r.r(r(r*as_tupleszDecimal.as_tuplecCs|jr |rtdntd|s(dSt|j}|jdkrR|d|jd}}nr|j }x(|dkr|ddkr|d}|d8}q\W|j }t|| @d|}|r||L}||8}d||>}|j r| }||fS)Nz#cannot convert NaN to integer ratioz(cannot convert Infinity to integer ratio)r&r-r&rr-rs) rIrrf OverflowErrorrNr7rHminrwr6)r.r4r{Zd5Zd2Zshift2r(r(r*rvs,     zDecimal.as_integer_ratiocCs dt|S)Nz Decimal('%s'))rZ)r.r(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*|dkr8t}ddg|jd||}||||S)NrLrMrSZInfinityr4NaNrr&ir-rJrT.eEz%+d)r6rIrHr7r`rcapitals) r.engr/r< leftdigitsdotplacerprqrOr(r(r*__str__s:     zDecimal.__str__cCs|jd|dS)NT)rr/)r)r.r/r(r(r* to_eng_string;szDecimal.to_eng_stringcCsR|jr|j|d}|r|S|dkr(t}|s@|jtkr@|}n|}||S)N)r/)rIrrr>rcopy_abs copy_negate_fix)r.r/r:r(r(r*__neg__Ds  zDecimal.__neg__cCsR|jr|j|d}|r|S|dkr(t}|s@|jtkr@|}nt|}||S)N)r/)rIrrr>rrrr)r.r/r:r(r(r*__pos__Zs  zDecimal.__pos__TcCsJ|s |S|jr&|j|d}|r&|S|jr:|j|d}n |j|d}|S)N)r/)rrIrr6rr)r.roundr/r:r(r(r*__abs__os  zDecimal.__abs__c Csht|}|tkr|S|dkr"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-rJ)r&r&)rrrrIrrr6r^r rrrHr>rr5rmaxr?_rescalerc _normalizer<rNrO) r.rr/r:rOZ negativezeror<op1op2r|r(r(r*__add__s|              zDecimal.__add__cCsHt|}|tkr|S|js |jr6|j||d}|r6|S|j||dS)N)r/)rrrIrrr)r.rr/r:r(r(r*__sub__s zDecimal.__sub__cCs"t|}|tkr|S|j||dS)N)r/)rrr)r.rr/r(r(r*__rsub__szDecimal.__rsub__cCs@t|}|tkr|S|dkr"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 * (+-)INFrJ1)rrrr6rIrrr^r r;rHr5rr7rcrZrN)r.rr/Z resultsignr:Z resultexprrr(r(r*__mul__sH             zDecimal.__mul__c Cst|}|tkrtS|dkr"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}n<|j|j} x.|| kr|ddkr|d}|d7}qWt |t||}||S) Nz(+-)INF/(+-)INFzDivision by infinityrJz0 / 0zx / 0r&r-rrs)rrrr6rIrrr^r r;rr5Etinyrr rHr`r7r?rcdivmodrNrZr) r.rr/r<r:rOrzshiftrr 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)NrrJr&rz%quotient too large in //, % or divmod)r6rrHrrr5rr>r?rcrOrNrrZr^r) r.rr/r<rexpdiffrrqrr:r(r(r*_dividegs*    zDecimal._dividecCs"t|}|tkr|S|j||dS)N)r/)rrr)r.rr/r(r(r* __rtruediv__szDecimal.__rtruediv__cCst|}|tkr|S|dkr"t}|||}|r:||fS|j|jA}|r~|rj|td}||fSt||tdfS|s|s|t d}||fS|t d||tdfS| ||\}}| |}||fS)Nzdivmod(INF, INF)zINF % xz divmod(0, 0)zx // 0zx % 0) rrrrr6rr^r r;rr rr)r.rr/r:r<Zquotientrr(r(r* __divmod__s0      zDecimal.__divmod__cCs"t|}|tkr|S|j||dS)N)r/)rrr)r.rr/r(r(r* __rdivmod__szDecimal.__rdivmod__cCst|}|tkr|S|dkr"t}|||}|r6|S|rJ|tdS|sj|r^|tdS|tdS|||d}| |}|S)NzINF % xzx % 0z0 % 0r-) rrrrrr^r rrr)r.rr/r:rr(r(r*__mod__s"     zDecimal.__mod__cCs"t|}|tkr|S|j||dS)N)r/)rrr)r.rr/r(r(r*__rmod__szDecimal.__rmod__c Cs|dkrt}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) NT)rzremainder_near(infinity, x)zremainder_near(x, 0)zremainder_near(0, 0)rJr-rrrUr&)rrrrr^r rrrrrHr5r6rr?rrr>rcrOrNrrZ) r.rr/r:ideal_exponentrrrrrr<r(r(r*remainder_nearsZ         zDecimal.remainder_nearcCst|}|tkr|S|dkr"t}|||}|r6|S|rb|rR|tdSt|j|jAS|s|r|t d|j|jAS|t dS| ||dS)Nz INF // INFzx // 0z0 // 0r&) rrrrrr^r r;r6r rr)r.rr/r:r(r(r* __floordiv__'s$   zDecimal.__floordiv__cCs"t|}|tkr|S|j||dS)N)r/)rrr)r.rr/r(r(r* __rfloordiv__CszDecimal.__rfloordiv__cCs8|r(|rtd|jr"dnd}nt|}t|S)Nz%Cannot convert signaling NaN to floatz-nannan)r}rrfr6rZrj)r.sr(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 integerr~r&rrJ) rIr}rfrrr6rHrNr7)r.rr(r(r*__int__Ts   zDecimal.__int__cCs|S)Nr()r.r(r(r*realcsz Decimal.realcCstdS)Nr&)r)r.r(r(r*imaggsz Decimal.imagcCs|S)Nr()r.r(r(r* conjugatekszDecimal.conjugatecCs tt|S)N)complexrj)r.r(r(r* __complex__nszDecimal.__complex__cCsR|j}|j|j}t||krJ|t||dd}t|j||jdSt|S)NrJT) r7r?clampr`rar5r6rHr)r.r/ZpayloadZmax_payload_lenr(r(r*r8qs   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)NrJz above Emaxr&rr-r~)rIr}r8rrEtopr@rrrrHr^rr5r6r`r7r?rr r _pick_rounding_functionr>rZrNrr )r.r/rrexp_maxZnew_expZexp_minr:Zself_is_subnormalrrZrounding_methodchangedrzrr(r(r*r}sn                     z Decimal._fixcCst|j|rdSdSdS)Nr&r~) _all_zerosr7)r.r?r(r(r* _round_downs zDecimal._round_downcCs || S)N)r)r.r?r(r(r* _round_upszDecimal._round_upcCs*|j|dkrdSt|j|r"dSdSdS)NZ56789r-r&r~)r7r)r.r?r(r(r*_round_half_ups  zDecimal._round_half_upcCst|j|rdS||SdS)Nr~) _exact_halfr7r)r.r?r(r(r*_round_half_downs zDecimal._round_half_downcCs8t|j|r*|dks&|j|ddkr*dS||SdS)Nr&r-02468r~)rr7r)r.r?r(r(r*_round_half_evens zDecimal._round_half_evencCs |jr||S|| SdS)N)r6r)r.r?r(r(r*_round_ceilings zDecimal._round_ceilingcCs |js||S|| SdS)N)r6r)r.r?r(r(r* _round_floor s zDecimal._round_floorcCs0|r |j|ddkr ||S|| SdS)Nr-Z05)r7r)r.r?r(r(r* _round_05ups zDecimal._round_05up)rrrrrrrrcCsb|dk r2t|tstdtdd| }||S|jrR|rJtdntdt| dt S)Nz+Second argument to round should be integralr&rzcannot round a NaNzcannot round an infinity) rYrNrlr5quantizerIrrfrrr)r.r4rOr(r(r* __round__&s/   zDecimal.__round__cCs0|jr |rtdntdt|dtS)Nzcannot round a NaNzcannot round an infinityr&)rIrrfrrNrr)r.r(r(r* __floor__ds  zDecimal.__floor__cCs0|jr |rtdntdt|dtS)Nzcannot round a NaNzcannot round an infinityr&)rIrrfrrNrr)r.r(r(r*__ceil__ss  zDecimal.__ceil__cCst|dd}t|dd}|js$|jr|dkr2t}|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) NT)rrRrr4rSzINF * 0 in fmaz0 * INF in fma) rrIrrHr^r r;r6r5rZrNr7r)r.rZthirdr/productr(r(r*fmas6          z Decimal.fmac Cst|}|tkr|St|}|tkr(|S|dkr6t}|}|}|}|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||}x t| jD]} t|d |}qWt|| j |}t|t|dS) NrUrz@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)rrrr}r^r r8 _isintegerrr?_isevenr6rbrNrcto_integral_valuerrOranger5rZ) r.rmodulor/rrZ modulo_is_nanr<baseexponentir(r(r* _power_modulosl         zDecimal._power_modulocCst|}|j|j}}x |ddkr6|d}|d7}qWt|}|j|j}}x |ddkrn|d}|d7}qPW|dkr ||9}x |ddkr|d}|d7}qW|dkrdS|d|} |jdkr| } |r|jdkr|jt|} t| | |d} nd} tddd| | | S|jdkr|d} | dkr|| @|krRdSt |d} |dd}|t t |krdSt | ||} t |||}| dks|dkrdS| |krdSd | }n| d krt |d d} t d | |\}}|rdSx$|d dkr&|d }| d8} qW|dd }|t t |krJdSt | ||} t |||}| dksz|dkr~dS| |krdSd | }ndS|d|krdS| |}tdt ||S|dkr|d|d}}n|dkrt t t||| krdSt |}|dkr@t t t||| kr@dS|d| }}x:|d |d krrdkrnn|d }|d }qRWx:|d |d krdkrnn|d }|d }qW|dkrv|dkr||krdSt ||\}}|dkrdSdt | | >}x>t |||d\}}||kr@Pn||d||}qW||krn|dksrdS|}|dkr||d t|krdS||}||9}|d|krdSt |}|r|jdkr|jt|} t|| |t |} nd} td|d| || S)Nrr&r-rrJ)rU]ArsrTrUd)rcrNrOr<rr6rHrr5_nbitsr`rZ_decimal_lshift_exactrrb _log10_lb)r.rpxxcxeyycyerrZzerosZ last_digitrZemaxrror4Zxc_bitsremarrZstr_xcr(r(r* _power_exacts:                  &&&&    zDecimal._power_exactcCs>|dk r||||St|}|tkr*|S|dkr8t}|||}|rL|S|sd|s`|tdStSd}|jdkr| r| sd}n|r|tdS| }|s|jdkrt |ddSt |S|r|jdkrt |St |ddS|tkr| rZ|jdkrd}n||jkr"|j}nt|}|j|}|d|jkrxd|j}|tn|t|td|j}t |dd| |S|}|r|jdk|dkkrt |ddSt |Sd}d} ||} |dk|jdkkr| tt|jkrHt |d|jd}n,|} | tt| krHt |d| d}|dkr|||jd}|dk r|dkrt d|j|j}d} |dkr:|j} t|} | j| j}}t|}|j|j}}|jdkr| }d }xJt||||| |\}}|d d tt|| drP|d 7}qWt |t||}| r0| s0t|j|jkr|jdt|j}t |j|jd||j|}| }|!xt"D]}d|j#|<qW|$|}|t|j%t&r|t'|j%t(r|t(d |jx:t't&ttt)fD]}|j%|r||qWn |$|}|S) Nz0 ** 0r&r-z+x ** y with x negative and y not an integerrJrFTrTrsrz above Emax)*rrrrrr^r _Oner6rrrr5r;rr?rNrHr r r_log10_exp_boundr`rZr@rrr7rcrOr<_dpowerrErF_signalstrapsrflagsr rrr)r.rrr/r:Z result_signZ multiplierrOZself_adjexactZboundrrrrrr r r extrarzrZ newcontextZ exceptionr(r(r*__pow__s                        "         zDecimal.__pow__cCs"t|}|tkr|S|j||dS)N)r/)rrr)r.rr/r(r(r*__rpow__ szDecimal.__rpow__cCs|dkrt}|jr(|j|d}|r(|S||}|r>|S|sPt|jddS|j|g|j }t |j }|j }x.|j |ddkr||kr|d7}|d8}qvWt|j|j d||S)N)r/rJr&r-) rrIrrrr5r6r@rrr`r7rH)r.r/r:duprendrOr(r(r* normalize s$    zDecimal.normalizecCst|dd}|dkrt}|dkr(|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) NT)rzquantize with one INFz)target exponent out of bounds in quantizerJz9exponent of quantize result too large for current contextr-z7quantize result has too many digits for current context)rrr>rIrrrr^r rrHr@r5r6rrr?rr`r7Eminr r r )r.rOr>r/r:rr(r(r*r sT          zDecimal.quantizecCsDt|dd}|js|jr8|r(|p6|o6|S|j|jkS)NT)r)rrIr is_infiniterH)r.rr/r(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)NrJr&rr-) rIrr5r6rHr7r`rrZrN)r.rOr>rrZ this_functionrrzr(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-)rfrIrrr)r.placesr>r:r(r(r*_roundV s  zDecimal._roundcCs|jr"|j|d}|r|St|S|jdkr4t|S|sFt|jddS|dkrTt}|dkrb|j}|d|}||kr| t | t |S)N)r/r&rJ) rIrrrHr5r6rr>rr^r r )r.r>r/r:r(r(r*to_integral_exactm s$      zDecimal.to_integral_exactcCs`|dkrt}|dkr|j}|jr>|j|d}|r6|St|S|jdkrPt|S|d|SdS)N)r/r&)rr>rIrrrHr)r.r>r/r:r(r(r*r s  zDecimal.to_integral_valuecCs|dkrt}|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|} x(|| } | | kr:Pn | | d?} q$W| o\| | |k} | r|dkr|| d|} n| d| 9} ||7}n| d dkr| d7} tdt| |}|}|t} ||}| |_|S) N)r/r&rJrUr-zsqrt(-x), x > 0rrTrs)rrIrrr6rr5rHrr^r r?rcrOrNr`r7rrZ _shallow_copy _set_roundingrr>)r.r/r:r?oprclrrrr4rr>r(r(r*sqrt s`              z Decimal.sqrtcCst|dd}|dkrt}|js&|jr~|}|}|s>|r~|dkrX|dkrX||S|dkrr|dkrr||S|||S||}|dkr||}|dkr|}n|}||S)NT)rr-r&r~)rrrIr}rrr compare_total)r.rr/snonr%r:r(r(r*r s&       z Decimal.maxcCst|dd}|dkrt}|js&|jr~|}|}|s>|r~|dkrX|dkrX||S|dkrr|dkrr||S|||S||}|dkr||}|dkr|}n|}||S)NT)rr-r&r~)rrrIr}rrrr()r.rr/r)r*r%r:r(r(r*r* s&       z Decimal.mincCs8|jr dS|jdkrdS|j|jd}|dt|kS)NFr&TrJ)rIrHr7r`)r.restr(r(r*rL s  zDecimal._isintegercCs&|r|jdkrdS|jd|jdkS)Nr&Tr~r)rHr7)r.r(r(r*rU szDecimal._isevencCs.y|jt|jdStk r(dSXdS)Nr-r&)rHr`r7rl)r.r(r(r*r[ szDecimal.adjustedcCs|S)Nr()r.r(r(r* canonicalc szDecimal.canonicalcCs.t|dd}|||}|r |S|j||dS)NT)r)r/)rrr)r.rr/r:r(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@|r) r.r/r:radjr$r%rrrzrOr>r(r(r*rO sJ   $(  "  z Decimal.expcCsdS)NTr()r.r(r(r* is_canonical' szDecimal.is_canonicalcCs|j S)N)rI)r.r(r(r* is_finite/ szDecimal.is_finitecCs |jdkS)NrS)rH)r.r(r(r*r7 szDecimal.is_infinitecCs |jdkS)N)r4rR)rH)r.r(r(r*r; szDecimal.is_nancCs*|js |sdS|dkrt}|j|kS)NF)rIrrr)r.r/r(r(r* is_normal? s  zDecimal.is_normalcCs |jdkS)Nr4)rH)r.r(r(r*rG szDecimal.is_qnancCs |jdkS)Nr-)r6)r.r(r(r* is_signedK szDecimal.is_signedcCs |jdkS)NrR)rH)r.r(r(r*rO szDecimal.is_snancCs*|js |sdS|dkrt}||jkS)NF)rIrrr)r.r/r(r(r* is_subnormalS s  zDecimal.is_subnormalcCs|j o|jdkS)NrJ)rIr7)r.r(r(r*is_zero[ szDecimal.is_zerocCs|jt|jd}|dkr4tt|dddS|dkrXttd|dddSt|}|j|j}}|dkrt|d| }t|}t|t|||kS|ttd| |dS)Nr-rrr~r&)rHr`r7rZrcrNrO)r.r4r$r%rnumdenr(r(r* _ln_exp_bound_ szDecimal._ln_exp_boundc Cs |dkrt}|j|d}|r"|S|s*tS|dkr:tS|tkrFtS|jdkr\|t dSt |}|j |j }}|j }||d}x>t|||}|ddttt||drP|d7}qWtt |dktt|| }|}|t} ||}| |_|S) N)r/r-zln of a negative valuerUrsrrTr&)rr_NegativeInfinityr _Infinityrr/r6r^r rcrNrOr?r>_dlogr`rZrbr5r"r#rrr>) r.r/r:r$r%rrrrzr>r(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-rr~r&rrUZ231)rHr`r7rZrcrNrO)r.r4r$r%rr<r=r(r(r*r s  zDecimal._log10_exp_boundc CsH|dkrt}|j|d}|r"|S|s*tS|dkr:tS|jdkrP|tdS|jddkr|jdddt |jdkrt |j t |jd}nt |}|j |j}}|j}||d}x>t|||}|dd t tt||drP|d 7}qWtt |dktt|| }|}|t} ||}| |_|S) N)r/r-zlog10 of a negative valuer&rrJrUrsrrT)rrr?rr@r6r^r r7r`rrHrcrNrOr?r_dlog10rZrbr5r"r#rrr>) r.r/r:r$r%rrrrzr>r(r(r*log10 s:   . $   z Decimal.log10cCsV|j|d}|r|S|dkr"t}|r.tS|s@|tddSt|}||S)N)r/zlogb(0)r-) rrrr@r^r rrr)r.r/r:r(r(r*logb s  z Decimal.logbcCs8|jdks|jdkrdSx|jD]}|dkr dSq WdS)Nr&FZ01T)r6rHr7)r.digr(r(r* _islogical s  zDecimal._islogicalcCs|jt|}|dkr$d||}n|dkr<||j d}|jt|}|dkr`d||}n|dkrx||j d}||fS)Nr&rJ)r?r`)r.r/opaopbZdifr(r(r* _fill_logical' szDecimal._fill_logicalcCsz|dkrt}t|dd}|r*|s4|tS|||j|j\}}dddt||D}t d| dptddS)NT)rrLcSs$g|]\}}tt|t|@qSr()rZrN).0r br(r(r* B sz'Decimal.logical_and..r&rJ) rrrHr^r rKr7rhzipr5ra)r.rr/rIrJr|r(r(r* logical_and4 s  zDecimal.logical_andcCs(|dkrt}|tdd|jd|S)Nr&r)r logical_xorr5r?)r.r/r(r(r*logical_invertE szDecimal.logical_invertcCsz|dkrt}t|dd}|r*|s4|tS|||j|j\}}dddt||D}t d| dptddS)NT)rrLcSs$g|]\}}tt|t|BqSr()rZrN)rLr rMr(r(r*rNZ sz&Decimal.logical_or..r&rJ) rrrHr^r rKr7rhrOr5ra)r.rr/rIrJr|r(r(r* logical_orL s  zDecimal.logical_orcCsz|dkrt}t|dd}|r*|s4|tS|||j|j\}}dddt||D}t d| dptddS)NT)rrLcSs$g|]\}}tt|t|AqSr()rZrN)rLr rMr(r(r*rNk sz'Decimal.logical_xor..r&rJ) rrrHr^r rKr7rhrOr5ra)r.rr/rIrJr|r(r(r*rQ] s  zDecimal.logical_xorcCst|dd}|dkrt}|js&|jr~|}|}|s>|r~|dkrX|dkrX||S|dkrr|dkrr||S|||S||}|dkr||}|dkr|}n|}||S)NT)rr-r&r~) rrrIr}rrrrr()r.rr/r)r*r%r:r(r(r*max_magn s&      zDecimal.max_magcCst|dd}|dkrt}|js&|jr~|}|}|s>|r~|dkrX|dkrX||S|dkrr|dkrr||S|||S||}|dkr||}|dkr|}n|}||S)NT)rr-r&r~) rrrIr}rrrrr()r.rr/r)r*r%r:r(r(r*min_mag s&      zDecimal.min_magcCs|dkrt}|j|d}|r"|S|dkr2tS|dkrTtdd|j|S|}|t | | |}||kr|S| tdd| d|S)N)r/r~r-r&r=r)rrrr?r5r?rrEr#r_ignore_all_flagsrrr)r.r/r:new_selfr(r(r* next_minus s"     zDecimal.next_minuscCs|dkrt}|j|d}|r"|S|dkr2tS|dkrTtdd|j|S|}|t | | |}||kr|S| tdd| d|S)N)r/r-r~r=r&r)rrrr@r5r?rrEr#rrVrrr)r.r/r:rWr(r(r* next_plus s"     zDecimal.next_pluscCst|dd}|dkrt}|||}|r.|S||}|dkrJ||S|dkr^||}n ||}|r|t d|j |t |t nD| |jkr|t|t|t |t |s|t|S)NT)rr&r~z Infinite result from next_toward)rrrrr2rYrXrr^rr6r r rrrr r)r.rr/r:Z comparisonr(r(r* next_toward s4             zDecimal.next_towardcCs|r dS|rdS|}|dkr,dS|dkr8dS|rN|jrJdSdS|dkr\t}|j|d rv|jrrd Sd S|jrd Sd SdS)Nrrr-z +Infinityr~z -Infinityz-Zeroz+Zero)r/z -Subnormalz +Subnormalz-Normalz+Normal)rrrr:r6rr9)r.r/infr(r(r* number_classs, zDecimal.number_classcCstdS)Nr)r)r.r(r(r*radix0sz Decimal.radixcCs|dkrt}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|jS)NT)rr&rJ)rrrrHr^r r?rNrrr7r`r5r6ra)r.rr/r:torotrotdigtopadZrotatedr(r(r*rotate4s,      zDecimal.rotatecCs|dkrt}t|dd}|||}|r.|S|jdkrB|tSd|j|j}d|j|j}|t|krz|ksn|tS| rt |St |j |j |jt|}||}|S)NT)rr&rrU)rrrrHr^r r@r?rNrrr5r6r7r)r.rr/r:ZliminfZlimsupr{r(r(r*scalebUs"      zDecimal.scalebcCs|dkrt}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|jS)NT)rr&rJ)rrrrHr^r r?rNrrr7r`r5r6ra)r.rr/r:r^r_r`Zshiftedr(r(r*rns2       z Decimal.shiftcCs|jt|ffS)N) __class__rZ)r.r(r(r* __reduce__szDecimal.__reduce__cCst|tkr|S|t|S)N)typerrcrZ)r.r(r(r*__copy__s zDecimal.__copy__cCst|tkr|S|t|S)N)rerrcrZ)r.Zmemor(r(r* __deepcopy__s zDecimal.__deepcopy__cCsJ|dkrt}t||d}|jrXt|j|}t|}|ddkrL|d7}t|||S|ddkrvddg|j|d<|ddkrt |j|j |j d}|j }|d}|dk r|ddkr| |d |}nF|dd kr|| |}n*|dd krt|j |kr| ||}|s@|j d kr@|dd kr@|d |}|j t|j } |ddkr~|sx|dk rxd |} nd } nB|dd kr| } n.|dd kr|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) _localeconvre%gGrU precisioneEr-zfF%ZgGr&irJrL)r_parse_format_specifierrI _format_signr6rZr _format_alignrr5r7rHr>r rr`_format_number)r.Z specifierr/rhspecr<bodyr>rlrrrprqrOr(r(r* __format__sZ               zDecimal.__format__)rJN)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)r1r2r3 __slots__rX classmethodrkr}rrrrrrrrrrrrrrvrrrrrrr__radd__rrr__rmul__rrrrrrrrrrrr __trunc__propertyrrrrr8rrrrrrrrrdictrrrrrrrrrrrrrr r!r to_integralr'rrrrrr,r-r(r1rrr2rOr5r6rrr7rr8rr9r:r>rBrrErFrHrKrPrRrSrQrTrUrXrYrZr\r]rarbrrdrfrgrtr(r(r(r*rs   - !@  2 4    V   7 ;!  $    K       f  > , Un Y   = "   c * "  I   K   2 3          . * !  'FcCs&tt}||_||_||_||_|S)N)rWrXrr6r7rHrI)r<Z coefficientrZspecialr.r(r(r*r5s  r5c@s$eZdZddZddZddZdS)rGcCs||_dS)N)rE new_context)r.r}r(r(r*__init__sz_ContextManager.__init__cCst|_t|j|jS)N)r saved_contextrr})r.r(r(r* __enter__s z_ContextManager.__enter__cCst|jdS)N)rr)r.tvtbr(r(r*__exit__sz_ContextManager.__exit__N)r1r2r3r~rrr(r(r(r*rGsrGc @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>yt} Wntk rYnX|dk r*|n| j|_|dk r>|n| j|_|dk rR|n| j|_|dk rf|n| j|_|dk rz|n| j|_|dk r|n| j|_| dkrg|_n| |_dkr| j |_ n.t t st fddt D|_ n|_ dkr t t d|_n0t t s4t fddt D|_n|_dS)Nc3s|]}|t|kfVqdS)N)rN)rLr)rr(r* Isz#Context.__init__..r&c3s|]}|t|kfVqdS)N)rN)rLr)rr(r*rPs)r NameErrorr?r>rr@rr_ignored_flagsrrErYr{rfromkeysr) r.r?r>rr@rrrrrZdcr()rrr*r~0s.   zContext.__init__cCst|tstd||dkr<||krtd||||fnJ|dkrb||krtd||||fn$||ksr||krtd||||ft|||S)Nz%s must be an integerz-infz%s must be in [%s, %d]. got: %sr[z%s must be in [%d, %s]. got: %sz%s must be in [%d, %d]. got %s)rYrNrlrfrW __setattr__)r.namernZvminZvmaxr(r(r*_set_integer_checkTs  zContext._set_integer_checkcCsht|tstd|x |D]}|tkrtd|qWx tD]}||kr>td|q>Wt|||S)Nz%s must be a signal dictz%s is not a valid signal dict)rYr{rlrKeyErrorrWr)r.rr{keyr(r(r*_set_signal_dictbs    zContext._set_signal_dictcCs|dkr|||ddS|dkr0|||ddS|dkrH|||ddS|dkr`|||ddS|d krx|||ddS|d kr|tkrtd |t|||S|d ks|d kr|||S|dkrt|||Std|dS)Nr?r-r[rz-infr&r@rrr>z%s: invalid rounding moderrrz.'decimal.Context' object has no attribute '%s')r_rounding_modesrlrWrrAttributeError)r.rrnr(r(r*rms(  zContext.__setattr__cCstd|dS)Nz%s cannot be deleted)r)r.rr(r(r* __delattr__szContext.__delattr__c CsNdd|jD}dd|jD}|j|j|j|j|j|j|j ||ffS)NcSsg|]\}}|r|qSr(r()rLsigrr(r(r*rNsz&Context.__reduce__..cSsg|]\}}|r|qSr(r()rLrrr(r(r*rNs) ritemsrrcr?r>rr@rr)r.rrr(r(r*rds 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()r1)rLrxrr(r(r*rNsz$Context.__repr__..zflags=[z, ]cSsg|]\}}|r|jqSr()r1)rLrrr(r(r*rNsztraps=[))rgvarsrrrhr)r.rnamesr(r(r*rs zContext.__repr__cCsx|jD]}d|j|<qWdS)Nr&)r)r.flagr(r(r*rFs zContext.clear_flagscCsx|jD]}d|j|<qWdS)Nr&)r)r.rr(r(r* clear_trapss zContext.clear_trapsc Cs.t|j|j|j|j|j|j|j|j|j }|S)N) rr?r>rr@rrrrr)r.ncr(r(r*r"szContext._shallow_copyc Cs6t|j|j|j|j|j|j|j|j |j }|S)N) rr?r>rr@rrrrErr)r.rr(r(r*rEs z Context.copycGsZt||}||jkr(|j|f|Sd|j|<|j|sN|j|f|S||dS)Nr-)_condition_maprBrr0rr)r.Z conditionZ explanationr)errorr(r(r*r^s    zContext._raise_errorcCs |jtS)N) _ignore_flagsr)r.r(r(r*rVszContext._ignore_all_flagscGs|jt||_t|S)N)rrd)r.rr(r(r*rszContext._ignore_flagscGs<|rt|dttfr|d}x|D]}|j|q$WdS)Nr&)rYrerdrremove)r.rrr(r(r* _regard_flagss zContext._regard_flagscCst|j|jdS)Nr-)rNrr?)r.r(r(r*rsz Context.EtinycCst|j|jdS)Nr-)rNr@r?)r.r(r(r*rsz Context.EtopcCs|j}||_|S)N)r>)r.rer>r(r(r*r#szContext._set_roundingrJcCsjt|tr*||ksd|kr*|tdSt||d}|r`t|j|j |j kr`|tdS| |S)NrKzAtrailing or leading whitespace and underscores are not permitted.)r/zdiagnostic info too long in NaN) rYrZr\r^rrr}r`r7r?rr)r.r<r{r(r(r*create_decimals zContext.create_decimalcCst|}||S)N)rrkr)r.rxr{r(r(r*create_decimal_from_floats z!Context.create_decimal_from_floatcCst|dd}|j|dS)NT)r)r/)rr)r.r r(r(r*rb!s z Context.abscCs8t|dd}|j||d}|tkr0td|n|SdS)NT)r)r/zUnable to convert %s to Decimal)rrrrl)r.r rMrr(r(r*add6s  z Context.addcCst||S)N)rZr)r.r r(r(r*_applyKszContext._applycCst|tstd|S)Nz,canonical requires a Decimal as an argument.)rYrrlr,)r.r r(r(r*r,Ns zContext.canonicalcCst|dd}|j||dS)NT)r)r/)rr)r.r rMr(r(r*r[s! zContext.comparecCst|dd}|j||dS)NT)r)r/)rr-)r.r rMr(r(r*r-s zContext.compare_signalcCst|dd}||S)NT)r)rr()r.r rMr(r(r*r(s zContext.compare_totalcCst|dd}||S)NT)r)rr1)r.r rMr(r(r*r1s zContext.compare_total_magcCst|dd}|S)NT)r)rr)r.r r(r(r*rs zContext.copy_abscCst|dd}t|S)NT)r)rr)r.r r(r(r* copy_decimals zContext.copy_decimalcCst|dd}|S)NT)r)rr)r.r r(r(r*rs zContext.copy_negatecCst|dd}||S)NT)r)rr2)r.r rMr(r(r*r2s zContext.copy_signcCs8t|dd}|j||d}|tkr0td|n|SdS)NT)r)r/zUnable to convert %s to Decimal)rrrrl)r.r rMrr(r(r*divides  zContext.dividecCs8t|dd}|j||d}|tkr0td|n|SdS)NT)r)r/zUnable to convert %s to Decimal)rrrrl)r.r rMrr(r(r* divide_int+s  zContext.divide_intcCs8t|dd}|j||d}|tkr0td|n|SdS)NT)r)r/zUnable to convert %s to Decimal)rrrrl)r.r rMrr(r(r*rBs  zContext.divmodcCst|dd}|j|dS)NT)r)r/)rrO)r.r r(r(r*rOWs z Context.expcCst|dd}|j|||dS)NT)r)r/)rr)r.r rMr%r(r(r*ros z Context.fmacCst|tstd|S)Nz/is_canonical requires a Decimal as an argument.)rYrrlr5)r.r r(r(r*r5s zContext.is_canonicalcCst|dd}|S)NT)r)rr6)r.r r(r(r*r6s zContext.is_finitecCst|dd}|S)NT)r)rr)r.r r(r(r*rs zContext.is_infinitecCst|dd}|S)NT)r)rr)r.r r(r(r*rs zContext.is_nancCst|dd}|j|dS)NT)r)r/)rr7)r.r r(r(r*r7s zContext.is_normalcCst|dd}|S)NT)r)rr)r.r r(r(r*rs zContext.is_qnancCst|dd}|S)NT)r)rr8)r.r r(r(r*r8s zContext.is_signedcCst|dd}|S)NT)r)rr)r.r r(r(r*rs zContext.is_snancCst|dd}|j|dS)NT)r)r/)rr9)r.r r(r(r*r9s zContext.is_subnormalcCst|dd}|S)NT)r)rr:)r.r r(r(r*r:%s zContext.is_zerocCst|dd}|j|dS)NT)r)r/)rrB)r.r r(r(r*rB6s z Context.lncCst|dd}|j|dS)NT)r)r/)rrE)r.r r(r(r*rELs z Context.log10cCst|dd}|j|dS)NT)r)r/)rrF)r.r r(r(r*rFhs z Context.logbcCst|dd}|j||dS)NT)r)r/)rrP)r.r rMr(r(r*rPs zContext.logical_andcCst|dd}|j|dS)NT)r)r/)rrR)r.r r(r(r*rRs zContext.logical_invertcCst|dd}|j||dS)NT)r)r/)rrS)r.r rMr(r(r*rSs zContext.logical_orcCst|dd}|j||dS)NT)r)r/)rrQ)r.r rMr(r(r*rQs zContext.logical_xorcCst|dd}|j||dS)NT)r)r/)rr)r.r rMr(r(r*rs z Context.maxcCst|dd}|j||dS)NT)r)r/)rrT)r.r rMr(r(r*rTs zContext.max_magcCst|dd}|j||dS)NT)r)r/)rr)r.r rMr(r(r*rs z Context.mincCst|dd}|j||dS)NT)r)r/)rrU)r.r rMr(r(r*rU-s zContext.min_magcCst|dd}|j|dS)NT)r)r/)rr)r.r r(r(r*minus>s z Context.minuscCs8t|dd}|j||d}|tkr0td|n|SdS)NT)r)r/zUnable to convert %s to Decimal)rrrrl)r.r rMrr(r(r*multiplyOs  zContext.multiplycCst|dd}|j|dS)NT)r)r/)rrX)r.r r(r(r*rXos zContext.next_minuscCst|dd}|j|dS)NT)r)r/)rrY)r.r r(r(r*rYs zContext.next_pluscCst|dd}|j||dS)NT)r)r/)rrZ)r.r rMr(r(r*rZs zContext.next_towardcCst|dd}|j|dS)NT)r)r/)rr)r.r r(r(r*rs zContext.normalizecCst|dd}|j|dS)NT)r)r/)rr\)r.r r(r(r*r\s/ zContext.number_classcCst|dd}|j|dS)NT)r)r/)rr)r.r r(r(r*pluss z Context.pluscCs:t|dd}|j|||d}|tkr2td|n|SdS)NT)r)r/zUnable to convert %s to Decimal)rrrrl)r.r rMrrr(r(r*powers I z Context.powercCst|dd}|j||dS)NT)r)r/)rr)r.r rMr(r(r*res7 zContext.quantizecCstdS)Nr)r)r.r(r(r*r]sz Context.radixcCs8t|dd}|j||d}|tkr0td|n|SdS)NT)r)r/zUnable to convert %s to Decimal)rrrrl)r.r rMrr(r(r*rs  zContext.remaindercCst|dd}|j||dS)NT)r)r/)rr)r.r rMr(r(r*rs zContext.remainder_nearcCst|dd}|j||dS)NT)r)r/)rra)r.r rMr(r(r*ras zContext.rotatecCst|dd}||S)NT)r)rr)r.r rMr(r(r*r s zContext.same_quantumcCst|dd}|j||dS)NT)r)r/)rrb)r.r rMr(r(r*rb$s zContext.scalebcCst|dd}|j||dS)NT)r)r/)rr)r.r rMr(r(r*r7s z Context.shiftcCst|dd}|j|dS)NT)r)r/)rr')r.r r(r(r*r'Us z Context.sqrtcCs8t|dd}|j||d}|tkr0td|n|SdS)NT)r)r/zUnable to convert %s to Decimal)rrrrl)r.r rMrr(r(r*subtractus  zContext.subtractcCst|dd}|j|dS)NT)r)r/)rr)r.r r(r(r*rs zContext.to_eng_stringcCst|dd}|j|dS)NT)r)r/)rr)r.r r(r(r* to_sci_strings zContext.to_sci_stringcCst|dd}|j|dS)NT)r)r/)rr!)r.r r(r(r*r!s zContext.to_integral_exactcCst|dd}|j|dS)NT)r)r/)rr)r.r r(r(r*rs zContext.to_integral_value) NNNNNNNNN)N)rJ)N)Wr1r2r3r~rrrrrdrrFrr"rErfr^rVrrrrrr#rrrbrrr,rr-r(r1rrrr2rrrrOrr5r6rrr7rr8rr9r:rBrErFrPrRrSrQrrTrrUrrrXrYrZrr\rrrr]rrrarrbrr'rrrr!rr|r(r(r(r*rs "     $#   %  #2 P:&" c@s&eZdZdZdddZddZeZdS)rc)r<rNrONcCsf|dkrd|_d|_d|_nFt|trD|j|_t|j|_|j|_n|d|_|d|_|d|_dS)Nr&r-rU)r<rNrOrYrr6r7rH)r.rnr(r(r*r~s     z_WorkRep.__init__cCsd|j|j|jfS)Nz (%r, %r, %r))r<rNrO)r.r(r(r*rsz_WorkRep.__repr__)N)r1r2r3rur~rrr(r(r(r*rcs rccCs|j|jkr|}|}n|}|}tt|j}tt|j}|jtd||d}||jd|krpd|_||_|jd|j|j9_|j|_||fS)Nr~rUr-r)rOr`rZrNr)rrr?ZtmprZtmp_lenZ other_lenrOr(r(r*r s rcCsb|dkr dS|dkr |d|Stt|}t|t|d}|| krPdS|d| SdS)Nr&rrJ)rZrbr`rstrip)r4rZstr_nZval_nr(r(r*r*s   rcCsF|dks|dkrtdd}x$||kr@||| |d?}}qW|S)Nr&z3Both arguments to _sqrt_nearest should be positive.r-)rf)r4r rMr(r(r* _sqrt_nearest?s  rcCs2d|>||?}}|d||d@|d@|kS)Nr-rUr()rrrMrr(r(r*_rshift_nearestNsrcCs&t||\}}|d||d@|kS)NrUr-)r)r rMrrr(r(r* _div_nearestVsrrc Cs||}d}xn||kr*t|||>|ksF||krzt|||?|krzt||d>|t||t|||}|d7}qWtdtt|d| }t||}t||}x0t|dddD]}t||t|||}qWt|||S)Nr&r-irTr~)rbrrrrNr`rZr) rMLr RTZyshiftwryr(r(r*_ilog^s    rc Cs|d7}tt|}||||dk}|dkrd|}|||}|dkrZ|d|9}nt|d| }t||}t|}t|||}||} nd}t|d| } t| |dS)NrUr-r&rr)r`rZrr _log10_digits) r%rrr&rxrrylog_dZlog_10Z log_tenpowerr(r(r*rDs     rDc Cs|d7}tt|}||||dk}|dkrr|||}|dkrR|d|9}nt|d| }t|d|}nd}|rttt|d}||dkrt|t||d|}qd}nd}t||dS)NrUr-r&rr)r`rZrrrbr) r%rrr&rxryrrZ f_log_tenr(r(r*rAs"   rAc@seZdZddZddZdS) _Log10MemoizecCs d|_dS)NZ/23025850929940456840179914546843642076011014886)rr)r.r(r(r*r~sz_Log10Memoize.__init__cCs|dkrtd|t|jkrd}xLd||d}tttd||d}|| dd|krdP|d7}q$W|ddd|_t|jd|d S) Nr&zp should be nonnegativerTrrUrrJr~r-)rfr`rrrZrrrrN)r.rrrrrr(r(r* getdigitss  z_Log10Memoize.getdigitsN)r1r2r3r~rr(r(r(r*rsrc Cst||>|}tdtt|d| }t||}||>}x.t|dddD]}t|||||}qRWx6t|dddD]"}||d>}t||||}qW||S)NirTr-r&r~rU)rrNr`rZrr) rrrrrr ZMshiftrryr(r(r*_iexps  rc Cs|d7}td|tt|d}||}||}|dkrH|d|}n|d| }t|t|\}}t|d|}tt|d|d||dfS)NrUr&r-rirT)rr`rZrrrr) r%rrrrrZcshiftZquotr r(r(r*r3&sr3c Csttt||}t||||d}||}|dkrJ||d|}nt||d| }|dkrtt||dk|dkkrd|ddd|} } qd|d| } } n,t||d |d\} } t| d} | d7} | | fS)Nr-r&r)r`rZrbrArr3) rrr r rrMZlxcrZpcrzrOr(r(r*rJs rrF5(r;rrs) r2345678r=cCs0|dkrtdt|}dt|||dS)Nr&z0The argument to _log10_lb should be nonnegative.r)rfrZr`)r%Z correctionZstr_cr(r(r*rtsrcCsLt|tr|St|tr t|S|r8t|tr8t|S|rHtd|tS)NzUnable to convert %s to Decimal)rYrrNrjrkrlr)rrZ allow_floatr(r(r*rs    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-z;strict semantics for mixing floats and Decimals are enabled)rYr_numbersZRationalrIr5r6rZrNr7 denominatorrH numeratorZComplexrrrjrrrr^rkr)r.rrr/r(r(r*rs$    rri?Bi)r?r>rrr@rrrrV)r?r>rra # 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|}|dkrtd||}|d}|d}|ddk |d<|drv|dk rbtd||dk rvtd||p|d|d<|pd|d<|d dkrd |d <t|d pd |d <|d dk rt|d |d <|d dkr|ddks|ddkrd|d <|ddkrfd|d<|dkr&t}|ddk r@td||d|d<|d|d<|d|d<n*|ddkr|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:  >r<rM minimumwidthrJrlr&reZgGnr-r4rj thousands_sepzJExplicit thousands separator conflicts with 'n' type in format specifier: grouping decimal_pointrLrTr)_parse_format_specifier_regexmatchrf groupdictrN_locale localeconv) format_specrhroZ format_dictrrr(r(r*rnsN           rnc Cs|d}|d}||t|t|}|d}|dkrF|||}nj|dkr\|||}nT|dkrr|||}n>|dkrt|d}|d|||||d}ntd |S) Nrrrusf           &     .  ^  0",# %$+   *      P % )