o =?hD} @sn gdZeZdZdZdZddlZddlZddl Z z ddl m Z e ddZ Wn ey3d d Z Ynwd Zd Zd ZdZdZdZdZdZdZdZe jdkrTdZdZdZndZdZdZeedZGdddeZGdddeZ 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`[WzddlaZbWn eyYnwdd{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 exponentcG|SN)argsr+r+1/opt/alt/python310/lib64/python3.10/_pydecimal.pysr.rrrrrrrrTllNZolNZoi@Tic@eZdZ ddZdS)rcGsdSr*r+selfcontextr,r+r+r-handlezDecimalException.handleN__name__ __module__ __qualname__r4r+r+r+r-rs rc@ eZdZdS)rNr7r8r9r+r+r+r-rrc@r0)r cGs,|rt|dj|djdd}||StS)Nr'nT)_dec_from_triple_sign_int_fix_nan_NaN)r2r3r,ansr+r+r-r4s zInvalidOperation.handleNr6r+r+r+r-r s r c@r0)rcGtSr*rBr1r+r+r-r4r5zConversionSyntax.handleNr6r+r+r+r-rs rc@r0)r cGst|Sr*)_SignedInfinityr2r3signr,r+r+r-r4szDivisionByZero.handleNr6r+r+r+r-r s r c@r0)rcGrDr*rEr1r+r+r-r4"r5zDivisionImpossible.handleNr6r+r+r+r-r rc@r0)rcGrDr*rEr1r+r+r-r4-r5zDivisionUndefined.handleNr6r+r+r+r-r%rIrc@r:)r Nr;r+r+r+r-r 0r<r c@r0)rcGrDr*rEr1r+r+r-r4Gr5zInvalidContext.handleNr6r+r+r+r-r<s rc@r:)r Nr;r+r+r+r-r Jr<r c@r:)r Nr;r+r+r+r-r Vr<r c@r0)rcGs|jttttfvr t|S|dkr)|jtkrt|St|d|j|j |jdS|dkrE|jt kr6t|St|d|j|j |jdSdS)Nr'9r/) roundingrrrrrFrr>precEmaxrrGr+r+r-r4ws"    zOverflow.handleNr6r+r+r+r-ras rc@r:)rNr;r+r+r+r-rr<rc@r:)rNr;r+r+r+r-rr<rZdecimal_contextcCs4 ztWStyt}t||YSwr*)_current_context_varget LookupErrorrsetr3r+r+r-rs   rcCs. |tttfvr|}|t|dSr*)rrrcopy clear_flagsrNrQrRr+r+r-rs rcCs |durt}t|Sr*)r_ContextManager)ctxr+r+r-rs#rc @sleZdZ dZdddZeddZdd 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)ddLdMZ*ddNdOZ+dPdQZ,dRdSZ-e-Z.e/dTdUZ0e/dVdWZ1dXdYZ2dZd[Z3d\d]Z4d^d_Z5d`daZ6dbdcZ7dddeZ8dfdgZ9dhdiZ:djdkZ;dldmZe6e7e8e9e:e;er)rfrHkcoeffr=dresultr+r+r-r}s&    zDecimal.from_floatcCs* |jr|j}|dkr dS|dkrdSdS)Nr=r/rarer')rXrW)r2r^r+r+r-_isnanszDecimal._isnancCs |jdkr |jr dSdSdS)Nrbr/r')rWr?r2r+r+r- _isinfinitys  zDecimal._isinfinitycCs~ |}|dur d}n|}|s|r=|durt}|dkr&|td|S|dkr1|td|S|r8||S||SdS)NFresNaNr')rrrpr rA)r2otherr3 self_is_nan other_is_nanr+r+r- _check_nanss(   zDecimal._check_nanscCsx |durt}|js|jr:|r|td|S|r$|td|S|r/|td|S|r:|td|SdS)Nzcomparison involving sNaNzcomparison involving NaNr')rrXis_snanrpr is_qnanr2rr3r+r+r-_compare_check_nans s2  zDecimal._compare_check_nanscCs |jp|jdkSNrYrXr@rr+r+r-__bool__*szDecimal.__bool__cCs  |js|jr|}|}||krdS||krdSdS|s)|s#dSd|j S|s0d|jS|j|jkr8dS|j|jkr@dS|}|}||krw|jd|j|j}|jd|j|j}||krhdS||krrd|j Sd|jS||krd|jSd|j S)Nr'rr/rY)rXrr?adjustedr@rW)r2rZself_infZ other_inf self_adjustedZother_adjusted self_paddedZ other_paddedr+r+r-_cmp1s@         z Decimal._cmpcCs<t||dd\}}|tur|S|||rdS||dkS)NT) equality_opFr')_convert_for_comparisonNotImplementedrrrr+r+r-__eq__qs  zDecimal.__eq__cCs<t||\}}|tur |S|||}|rdS||dkSNFr'rrrrr2rr3rCr+r+r-__lt__y zDecimal.__lt__cCs<t||\}}|tur |S|||}|rdS||dkSrrrr+r+r-__le__rzDecimal.__le__cCs<t||\}}|tur |S|||}|rdS||dkSrrrr+r+r-__gt__rzDecimal.__gt__cCs<t||\}}|tur |S|||}|rdS||dkSrrrr+r+r-__ge__rzDecimal.__ge__cCs@ t|dd}|js|r|jr|||}|r|St||SNTraiseit)_convert_otherrXrrrrr+r+r-compares  zDecimal.comparecCs |jr|r td|rt|S|jrt StS|jdkr*t d|jt }nt t |j t }t |j |t }|dkrA|n| }|dkrJdS|S)Nz"Cannot hash a signaling NaN value.r' r)rXrr~is_nanri__hash__r? _PyHASH_INFrWpow_PyHASH_MODULUS _PyHASH_10INVr]r@)r2Zexp_hashZhash_rCr+r+r-rs  zDecimal.__hash__cCs t|jttt|j|jSr*)rr?rwr{r]r@rWrr+r+r-as_tupleszDecimal.as_tuplecCs |jr|r tdtd|sdSt|j}|jdkr)|d|jd}}n@|j }|dkrI|ddkrI|d}|d8}|dkrI|ddks7|j }t|| @d|}|rc||L}||8}d||>}|j ro| }||fS)Nz#cannot convert NaN to integer ratioz(cannot convert Infinity to integer ratiordr'rr/r) rXrrx OverflowErrorr]r@rWminrr?)r2r=rZd5Zd2Zshift2r+r+r-rs0    zDecimal.as_integer_ratiocCs dt|S)Nz Decimal('%s'))rlrr+r+r-__repr__s zDecimal.__repr__Fc Cs` ddg|j}|jr'|jdkr|dS|jdkr |d|jS|d|jS|jt|j}|jdkr;|d kr;|}n|s@d }n|jd krN|d d d }n|d d d }|dkrgd }d d | |j}n&|t|jkr}|jd |t|j}d}n|jd|}d |j|d}||krd}n|durt}ddg|jd||}||||S)Nr[r\rbZInfinityr=NaNrr'r/rYrc.eEz%+d)r?rXrWr@rrrcapitals) r2engr3rH leftdigitsdotplacerrr^r+r+r-__str__s<   zDecimal.__str__cCs |jd|dS)NT)rr3)rr2r3r+r+r- to_eng_string;szDecimal.to_eng_stringcCsT |jr|j|d}|r|S|durt}|s!|jtkr!|}n|}||SNrR)rXrrrKrcopy_abs copy_negate_fixr2r3rCr+r+r-__neg__Ds   zDecimal.__neg__cCsT |jr|j|d}|r|S|durt}|s!|jtkr!|}nt|}||Sr)rXrrrKrrrrrr+r+r-__pos__Zs   zDecimal.__pos__TcCsN |s|S|jr|j|d}|r|S|jr|j|d}|S|j|d}|Sr)rrXrr?rr)r2roundr3rCr+r+r-__abs__os   zDecimal.__abs__c Cs^ t|}|tur |S|durt}|js|jrB|||}|r"|S|r:|j|jkr6|r6|tdSt |S|rBt |St |j |j }d}|j t krX|j|jkrXd}|st|stt |j|j}|rgd}t|d|}||}|S|st||j |jd}|||j }||}|S|st||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/rY)r'r')rrrrXrrr?rpr rrrWrKrr>rmaxrL_rescaleru _normalizerHr]r^) r2rr3rCr^Z negativezerorHop1op2rr+r+r-__add__s~                 zDecimal.__add__cCsJ t|}|tur |S|js|jr|j||d}|r|S|j||dSr)rrrXrrrrr+r+r-__sub__s zDecimal.__sub__cC$ t|}|tur |S|j||dSr)rrrrr+r+r-__rsub__s zDecimal.__rsub__cCs@ t|}|tur |S|durt}|j|jA}|js|jrH|||}|r(|S|r8|s4|tdSt |S|rH|sD|tdSt |S|j |j }|rR|s_t |d|}| |}|S|j dkrrt ||j |}| |}|S|j dkrt ||j |}| |}|St|}t|}t |t|j|j|}| |}|S)Nz (+-)INF * 0z 0 * (+-)INFrY1)rrrr?rXrrrpr rFrWr>rr@rurlr])r2rr3Z resultsignrCZ resultexprrr+r+r-__mul__sJ             zDecimal.__mul__c Cs t|}|tur tS|durt}|j|jA}|js|jrP|||}|r(|S|r6|r6|tdS|r>t |S|rP|t dt |d| S|sa|sZ|t dS|td|S|sl|j|j}d}nnt|jt|j|jd}|j|j|}t|}t|} |dkrt|jd|| j\}} nt|j| jd| \}} | r|d dkr|d7}n"|j|j} || kr|ddkr|d}|d7}|| kr|ddkst |t||}||S) Nz(+-)INF/(+-)INFzDivision by infinityrYz0 / 0zx / 0r'r/rr)rrrr?rXrrrpr rFrr>Etinyrr rWrrr@rLrudivmodr]rlr) r2rr3rHrCr^rshiftrr remainder ideal_expr+r+r- __truediv__,sV          zDecimal.__truediv__c Cs |j|jA}|r|j}nt|j|j}||}|r(|s(|dkr5t|dd|||jfS||jkrt |}t |}|j |j krV|j d|j |j 9_ n |j d|j |j 9_ t |j |j \}} |d|jkrt|t |dt|jt | |fS|td} | | fS)NrrYr'rz%quotient too large in //, % or divmod)r?rrWrrr>rrKrLrur^r]rrlrpr) r2rr3rHrexpdiffrrqrrCr+r+r-_dividegs2     zDecimal._dividecCrr)rrrrr+r+r- __rtruediv__ zDecimal.__rtruediv__cCs t|}|tur |S|durt}|||}|r||fS|j|jA}|r@|r6|td}||fSt||tdfS|s[|sN|t d}||fS|t d||tdfS| ||\}}| |}||fS)Nzdivmod(INF, INF)INF % xz divmod(0, 0)x // 0x % 0) rrrrr?rrpr rFrr rr)r2rr3rCrHZquotientrr+r+r- __divmod__s6        zDecimal.__divmod__cCrr)rrrrr+r+r- __rdivmod__rzDecimal.__rdivmod__cCs t|}|tur |S|durt}|||}|r|S|r&|tdS|s6|r0|tdS|tdS|||d}| |}|S)Nrrz0 % 0r/) rrrrrrpr rrr)r2rr3rCrr+r+r-__mod__s$     zDecimal.__mod__cCrr)rrrrr+r+r-__rmod__rzDecimal.__rmod__c Cs |durt}t|dd}|||}|r|S|r"|tdS|s2|r,|tdS|tdS|r?t|}||St |j |j }|sTt |j d|}||S| | }||jdkrh|tS|dkrx|||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)rYr/rrrer')rrrrrpr rrrrrWr>r?rrLrrrKrur^r]rrl) r2rr3rCideal_exponentrrrrrrHr+r+r-remainder_nearsb          zDecimal.remainder_nearcCs t|}|tur |S|durt}|||}|r|S|r2|r*|tdSt|j|jAS|sG|rA|t d|j|jAS|t dS| ||dS)Nz INF // INFrz0 // 0r') rrrrrrpr rFr?r rrrr+r+r- __floordiv__'s(    zDecimal.__floordiv__cCrr)rrrrr+r+r- __rfloordiv__CrzDecimal.__rfloordiv__cCs@ |r|r td|jrdnd}t|St|}t|S)Nz%Cannot convert signaling NaN to floatz-nannan)rrrxr?rlr|r2sr+r+r- __float__JszDecimal.__float__cCsp |jr|r td|rtdd|j}|jdkr*|t|jd|jS|t|jd|jp5dS)NzCannot convert NaN to integerz"Cannot convert infinity to integerrr'rrY) rXrrxrrr?rWr]r@rr+r+r-__int__Ts  zDecimal.__int__cCr)r*r+rr+r+r-realcsz Decimal.realcCstdSNr'rrr+r+r-imaggsz Decimal.imagcCr)r*r+rr+r+r- conjugatekr5zDecimal.conjugatecCs tt|Sr*)complexr|rr+r+r- __complex__n zDecimal.__complex__cCsT |j}|j|j}t||kr&|t||dd}t|j||jdSt|S)NrYT) r@rLclamprrrsr>r?rWr)r2r3ZpayloadZmax_payload_lenr+r+r-rAqs  zDecimal._fix_nancCsB |jr|r ||St|S|}|}|sA|j|g|j}tt |j ||}||j kr=| t t |jd|St|St|j|j |j}||krd| td|j}| t| t|S||k}|rl|}|j |krt|j|j |} | dkrt |jd|d}d} |j|j} | || } |jd| pd} | dkrtt| d} t| |jkr| dd} |d7}||kr| td|j}nt |j| |}| r|r| t|r| t| r| t| t|s| t |S|r| t|jdkr|j |kr| t |jd|j |} t |j| |St|S)NrY above Emaxr'rr/r)rXrrArrEtoprMrrrrWrprr>r?rrr@rLrr r _pick_rounding_functionrKrlr]rr )r2r3rrexp_maxZnew_expZexp_minrCZself_is_subnormalrZrounding_methodchangedrrr+r+r-r}sp                 z Decimal._fixcCs t|j|r dSdS)Nr'r) _all_zerosr@r2rLr+r+r- _round_downs zDecimal._round_downcCs || Sr*)r r r+r+r- _round_ups zDecimal._round_upcCs( |j|dvr dSt|j|rdSdS)NZ56789r/r'r)r@r r r+r+r-_round_half_ups  zDecimal._round_half_upcCs t|j|r dS||S)Nr _exact_halfr@rr r+r+r-_round_half_downs  zDecimal._round_half_downcCs6 t|j|r|dks|j|ddvrdS||S)Nr'r/02468rrr r+r+r-_round_half_evens   zDecimal._round_half_evencCs |jr ||S|| Sr*r?r r r+r+r-_round_ceiling  zDecimal._round_ceilingcCs |js ||S|| Sr*rr r+r+r- _round_floor rzDecimal._round_floorcCs. |r|j|ddvr||S|| S)Nr/Z05)r@r r r+r+r- _round_05ups  zDecimal._round_05up)rrrrrrrrcCsb |durt|tstdtdd| }||S|jr)|r%tdtdt| dt S)Nz+Second argument to round should be integralr'rcannot round a NaNcannot round an infinity) rkr]r~r>quantizerXrrxrrr)r2r=r^r+r+r- __round__&s.  zDecimal.__round__cC0 |jr|r tdtdt|dtSNrrr')rXrrxrr]rrrr+r+r- __floor__d zDecimal.__floor__cCrr)rXrrxrr]rrrr+r+r-__ceil__sr!zDecimal.__ceil__cCs t|dd}t|dd}|js|jrn|durt}|jdkr&|td|S|jdkr2|td|S|jdkr:|}nL|jdkrB|}nD|jdkrX|sO|tdSt|j|jA}n.|jdkrm|se|tdSt|j|jA}nt|j|jAt t |j t |j |j|j}| ||S) NTrrarr=rbzINF * 0 in fmaz0 * INF in fma) rrXrrWrpr rFr?r>rlr]r@r)r2rZthirdr3productr+r+r-fmas@           z Decimal.fmac Cs t|}|tur |St|}|tur|S|durt}|}|}|}|s.|s.|rb|dkr9|td|S|dkrD|td|S|dkrO|td|S|rV||S|r]||S||S|rn|rn|st|tdS|dkr~|tdS|s|tdS||j kr|tdS|s|s|tdS| rd}n|j }t t |}t|}t|} |j |td |j||}t| jD]} t|d |}qt|| j |}t|t|dS) Nrerz@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)rrrrrpr rA _isintegerrrL_isevenr?rtr]ruto_integral_valuerr^ranger>rl) r2rmodulor3rrZ modulo_is_nanrHbaseexponentir+r+r- _power_modulos       zDecimal._power_modulocCsT t|}|j|j}}|ddkr |d}|d7}|ddkst|}|j|j}}|ddkr?|d}|d7}|ddks1|dkr||9}|ddkr[|d}|d7}|ddksM|dkradS|d|} |jdkro| } |r|jdkr|jt|} t| | |d} nd} tddd| | | S|jdkrg|d} | dvr|| @|krdSt |d} |dd}|t t |krdSt | ||} t |||}| dus|durdS| |krdSd | }nj| d krOt |d d} t d | |\}}|rdS|d dkr|d }| d8} |d dks |dd }|t t |kr)dSt | ||} t |||}| dusA|durCdS| |krJdSd | }ndS|d|krZdS| |}tdt ||S|dkrv|d|d}}n|dkrt t t||| krdSt |}|dkrt t t||| krdS|d| }}|d |d krdkrnn|d }|d }|d |d krdksn|d |d krdkrnn|d }|d }|d |d krdksn|dkrW|dkr||krdSt ||\}}|dkr!dSdt | | >} t |||d\}}||kr=n ||d||}q,||krS|dksUdS|}|dkri||dt|kridS||}||9}|d|krzdSt |}|r|jdkr|jt|} t|| |t |} nd} td|d| || S)Nrr'r/rrY)re]ArrcreTd)rur]r^rHr%r?rWrr>_nbitsrrrl_decimal_lshift_exactrrt _log10_lb)r2rpxxcxeyycyer+rZzerosZ last_digitrZemaxrrr=Zxc_bitsremarrZstr_xcr+r+r- _power_exacts9                  &&$"$"    zDecimal._power_exactcCs* |dur ||||St|}|tur|S|durt}|||}|r'|S|s3|s1|tdStSd}|jdkrQ| rE| sDd}n|rM|tdS| }|sb|jdkr^t |ddSt |S|ru|jdkrot |St |ddS|tkr| r|jdkrd}n ||jkr|j}nt|}|j|}|d|jkrd|j}|tn|t|td|j}t |dd| |S|}|r|jdk|dkkrt |ddSt |Sd}d} ||} |dk|jdkkr| tt|jkrt |d|jd}n|} | tt| krt |d| d}|dur@|||jd}|dur@|dkr>t d|j|j}d} |dur|j} t|} | j| j}}t|}|j|j}}|jdkrg| }d } t||||| |\}}|d d tt|| drn|d 7}qjt |t||}| r| st|j|jkr|jdt|j}t |j|jd||j|}| }|!t"D]}d|j#|<q|$|}|t|j%t&r|t'|j%t(r|t(d |jt't&ttt)fD]}|j%|r ||q|S|$|}|S) Nz0 ** 0r'r/z+x ** y with x negative and y not an integerrYrFTrcrrr)*r-rrrrrpr _Oner?r%r&rr>rFrrLr]rWr r r_log10_exp_boundrrrlrMrrAr@rur^rH_dpowerrSrT_signalstrapsrflagsr rrr)r2rr)r3rCZ result_signZ multiplierr^Zself_adjexactZboundrr8r9r:r;r<r=r>extrarrZ newcontextZ exceptionr+r+r-__pow__s                     "        zDecimal.__pow__cCrr)rrrJrr+r+r-__rpow__ rzDecimal.__rpow__cCs |durt}|jr|j|d}|r|S||}|r |S|s)t|jddS|j|g|j }t |j }|j }|j |ddkr]||kr]|d7}|d8}|j |ddkr]||ksHt|j|j d||S)NrRrYr'r/) rrXrrrr>r?rMrrrrr@rW)r2r3rCdupr endr^r+r+r- normalize s(   zDecimal.normalizecCs t|dd}|durt}|dur|j}|js|jr?|||}|r%|S|s-|r?|r9|r9t|S|tdS| |j krM|j ksTn|tdS|sct |j d|j }||S|}||j krr|tdS||j d|jkr|tdS||j |}||j kr|tdSt|j|jkr|tdS|r||jkr|t|j |j kr||kr|t|t||}|S) NTrzquantize with one INFz)target exponent out of bounds in quantizerYz9exponent of quantize result too large for current contextr/z7quantize result has too many digits for current context)rrrKrXrrrrpr rrWrMr>r?rrrLrrrr@Eminr r r )r2r^rKr3rCrr+r+r-r sb          zDecimal.quantizecCsF t|dd}|js |jr|r|p|o|S|j|jkSr)rrXr is_infiniterWrr+r+r- same_quantum% s   zDecimal.same_quantumcCs |jrt|S|st|jd|S|j|kr%t|j|jd|j||St|j|j|}|dkr>t|jd|d}d}|j|}|||}|jd|pPd}|dkr]tt |d}t|j||S)NrYr'rr/) rXrr>r?rWr@rrrrlr])r2r^rKrZ this_functionr rr+r+r-r4 s&    zDecimal._rescalecCsh |dkr td|js|st|S||d||}||kr2||d||}|S)Nr'z'argument should be at least 1 in _roundr/)rxrXrrr)r2placesrKrCr+r+r-_roundV s  zDecimal._roundcCs |jr|j|d}|r|St|S|jdkrt|S|s$t|jddS|dur+t}|dur2|j}|d|}||krA| t | t |S)NrRr'rY) rXrrrWr>r?rrKrrpr r r2rKr3rCr+r+r-to_integral_exactm s&     zDecimal.to_integral_exactcCs^ |durt}|dur|j}|jr |j|d}|r|St|S|jdkr)t|S|d|S)NrRr')rrKrXrrrWrrTr+r+r-r' s   zDecimal.to_integral_valuecCs |durt}|jr"|j|d}|r|S|r"|jdkr"t|S|s3t|jd|jd}||S|jdkr>| t dS|j d}t |}|j d?}|j d@r`|jd}t|jd?d}n |j}t|jdd?}||}|dkr}|d|9}d } n t|d| \}} | } ||8}d|} || } | | krn| | d?} q| o| | |k} | r|dkr| d|} n| d| 9} ||7}n | d dkr| d7} tdt| |}|}|t} ||}| |_|S) NrRr'rYrer/zsqrt(-x), x > 0rr4Tr)rrXrrr?rr>rWrrpr rLrur^r]rrr@rrl _shallow_copy _set_roundingrrK)r2r3rCrLoprclrrHrr=rrKr+r+r-sqrt sd              z Decimal.sqrtcCs t|dd}|durt}|js|jr@|}|}|s |r@|dkr-|dkr-||S|dkr:|dkr:||S|||S||}|dkrN||}|dkrU|}n|}||SNTrr/r'rrrrXrrrr compare_totalr2rr3ZsnZonrYrCr+r+r-r s(        z Decimal.maxcCs t|dd}|durt}|js|jr@|}|}|s |r@|dkr-|dkr-||S|dkr:|dkr:||S|||S||}|dkrN||}|dkrU|}n|}||Sr\r]r_r+r+r-r* s(        z Decimal.mincCs: |jrdS|jdkr dS|j|jd}|dt|kS)NFr'TrY)rXrWr@rr)r2restr+r+r-r%L s zDecimal._isintegercCs( |r|jdkr dS|jd|jdvS)Nr'Trr)rWr@rr+r+r-r&U szDecimal._isevencCs. z |jt|jdWStyYdSw)Nr/r')rWrrr@r~rr+r+r-r[ s  zDecimal.adjustedcCs |Sr*r+rr+r+r- canonicalc zDecimal.canonicalcCs0 t|dd}|||}|r|S|j||dSNTrrR)rrrrr+r+r-compare_signalk s   zDecimal.compare_signalcCsR t|dd}|jr|jstS|js|jrtS|j}|}|}|s&|r||krPt|j|jf}t|j|jf}||krD|rBtStS||krN|rLtStStS|rk|dkrXtS|dkr^tS|dkrdtS|dkrjtSn|dkrqtS|dkrwtS|dkr}tS|dkrtS||krtS||krtS|j|jkr|rtStS|j|jkr|rtStStS)NTrr/re) rr? _NegativeOnerBrrrr@_ZerorW)r2rr3rHZself_nanZ other_nanZself_keyZ other_keyr+r+r-r^w sj     zDecimal.compare_totalcCs( t|dd}|}|}||Sr)rrr^)r2rr3ror+r+r-compare_total_mag s   zDecimal.compare_total_magcCs td|j|j|jSr)r>r@rWrXrr+r+r-r zDecimal.copy_abscCs0 |jrtd|j|j|jStd|j|j|jS)Nr'r/)r?r>r@rWrXrr+r+r-r szDecimal.copy_negatecCs$ t|dd}t|j|j|j|jSr)rr>r?r@rWrXrr+r+r- copy_sign s   zDecimal.copy_signc Cs |durt}|j|d}|r|S|dkrtS|stS|dkr(t|S|j}|}|jdkrK|t t |j ddkrKt dd|j d}n|jdkrj|t t | ddkrjt dd| d}nr|jdkr|| krt ddd|dd| }nX|jdkr|| dkrt dd|d| d}n>t|}|j|j}}|jdkr| }d} t||||\} } | d d t t | |drn|d7}qt dt | | }|}|t} ||}| |_|S) NrRrr/r'rcrrYrJTrr)rrrrfrBrrLrr?rrrlrMr>rrur]r^rH_dexprVrWrrrK) r2r3rCr8adjrXrYrrIrr^rKr+r+r-r^ sN   $(     z Decimal.expcCs dS)NTr+rr+r+r- is_canonical' rbzDecimal.is_canonicalcCs |j Sr*)rXrr+r+r- is_finite/ zDecimal.is_finitecC |jdkS)NrbrWrr+r+r-rP7  zDecimal.is_infinitecCs |jdvS)Nrgrqrr+r+r-r; rrzDecimal.is_nancCs, |js|sdS|durt}|j|kSNF)rXrrOrrr+r+r- is_normal?  zDecimal.is_normalcCrp)Nr=rqrr+r+r-rG rrzDecimal.is_qnancCrpNr/)r?rr+r+r- is_signedK rrzDecimal.is_signedcCrp)Nrarqrr+r+r-rO rrzDecimal.is_snancCs, |js|sdS|durt}||jkSrs)rXrrrOrr+r+r- is_subnormalS ruzDecimal.is_subnormalcCs |j o |jdkSrrrr+r+r-is_zero[ szDecimal.is_zerocCs |jt|jd}|dkrtt|dddS|dkr-ttd|dddSt|}|j|j}}|dkrUt|d| }t|}t|t|||kS|ttd| |dS)Nr/rrrr'rWrrr@rlrur]r^r2rlrXrYrnumZdenr+r+r- _ln_exp_bound_ szDecimal._ln_exp_boundc Cs  |durt}|j|d}|r|S|stS|dkrtS|tkr$tS|jdkr/|t dSt |}|j |j }}|j }||d} t|||}|ddttt||dr_n|d7}qFtt |d ktt|| }|}|t} ||}| |_|S) NrRr/zln of a negative valuereTrrrcr')rr_NegativeInfinityr _InfinityrBrfr?rpr rur]r^rLr~_dlogrrrlrtr>rVrWrrrK r2r3rCrXrYrr8rRrrKr+r+r-lnx s@    $  z Decimal.lncCs |jt|jd}|dkrtt|dS|dkr%ttd|dSt|}|j|j}}|dkrQt|d| }td|}t|t|||kdStd| |}t|||dkdS) Nr/rrr'rreZ231r{r|r+r+r-rC s  zDecimal._log10_exp_boundc CsH |durt}|j|d}|r|S|stS|dkrtS|jdkr)|tdS|jddkrM|jdddt |jdkrMt |j t |jd}nDt |}|j |j}}|j}||d} t|||}|d d t tt||dr}n|d 7}qdtt |dktt|| }|}|t} ||}| |_|S) NrRr/zlog10 of a negative valuer'rrYreTrrrc)rrrrrr?rpr r@rrrrWrur]r^rLrC_dlog10rlrtr>rVrWrrrKrr+r+r-log10 s@   . $  z Decimal.log10cCsX |j|d}|r |S|durt}|rtS|s!|tddSt|}||S)NrRzlogb(0)r/) rrrrrpr rrrrr+r+r-logb s   z Decimal.logbcCs8 |jdks |jdkr dS|jD] }|dvrdSqdS)Nr'FZ01T)r?rWr@)r2digr+r+r- _islogical s zDecimal._islogicalcCs|jt|}|dkrd||}n |dkr||j d}|jt|}|dkr3d||}||fS|dkr?||j d}||fS)Nr'rY)rLrr)r2r3opaopbZdifr+r+r- _fill_logical' s zDecimal._fill_logicalcC| |durt}t|dd}|r|s|tS|||j|j\}}dddt||D}t d| dp;ddS)NTrr[cSs$g|]\}}tt|t|@qSr+rlr].0r@br+r+r- B $z'Decimal.logical_and..r'rY rrrrpr rr@rzzipr>rsr2rr3rrrr+r+r- logical_and4   zDecimal.logical_andcCs* |durt}|tdd|jd|S)Nr'r)r logical_xorr>rLrr+r+r-logical_invertE s zDecimal.logical_invertcCr)NTrr[cSs$g|]\}}tt|t|BqSr+rrr+r+r-rZ rz&Decimal.logical_or..r'rYrrr+r+r- logical_orL rzDecimal.logical_orcCr)NTrr[cSs$g|]\}}tt|t|AqSr+rrr+r+r-rk rz'Decimal.logical_xor..r'rYrrr+r+r-r] rzDecimal.logical_xorcCs t|dd}|durt}|js|jr@|}|}|s |r@|dkr-|dkr-||S|dkr:|dkr:||S|||S||}|dkrR||}|dkrY|}n|}||Sr\ rrrXrrrrrr^r_r+r+r-max_magn (       zDecimal.max_magcCs t|dd}|durt}|js|jr@|}|}|s |r@|dkr-|dkr-||S|dkr:|dkr:||S|||S||}|dkrR||}|dkrY|}n|}||Sr\rr_r+r+r-min_mag rzDecimal.min_magcCs |durt}|j|d}|r|S|dkrtS|dkr+tdd|j|S|}|t | | |}||krC|S| tdd| d|S)NrRrr/r'rJr)rrrrr>rLrrSrWr_ignore_all_flagsrrrr2r3rCZnew_selfr+r+r- next_minus &     zDecimal.next_minuscCs |durt}|j|d}|r|S|dkrtS|dkr+tdd|j|S|}|t | | |}||krC|S| tdd| d|S)NrRr/rrJr'r)rrrrr>rLrrSrWrrrrrrr+r+r- next_plus rzDecimal.next_pluscCs t|dd}|durt}|||}|r|S||}|dkr&||S|dkr0||}n||}|rM|t d|j |t |t |S| |jkro|t|t|t |t |so|t|S)NTrr'rz Infinite result from next_toward)rrrrrjrrrrprr?r r rrOrr r)r2rr3rCZ comparisonr+r+r- next_toward s:              zDecimal.next_towardcCs |rdS|r dS|}|dkrdS|dkrdS|r(|jr&dSdS|dur/t}|j|d r<|jr:d Sd S|jrAd Sd S)Nrrr/z +Infinityrz -Infinityz-Zeroz+ZerorRz -Subnormalz +Subnormalz-Normalz+Normal)rrrryr?rrx)r2r3infr+r+r- number_classs. zDecimal.number_classcC tdSNrrrr+r+r-radix0sz Decimal.radixcCs |durt}t|dd}|||}|r|S|jdkr"|tS|j t|kr1|jks7n|tS|r?t |St|}|j }|jt |}|dkrXd||}n |dkrc|| d}||d|d|}t |j |dpxd|jSNTrr'rYrrrrWrpr rLr]rrr@rrr>r?rs)r2rr3rCtorotrotdigtopadZrotatedr+r+r-rotate4s0      zDecimal.rotatecCs |durt}t|dd}|||}|r|S|jdkr"|tSd|j|j}d|j|j}|t|kr>|ksDn|tS| rLt |St |j |j |jt|}||}|S)NTrr'rre)rrrrWrpr rMrLr]rrr>r?r@r)r2rr3rCZliminfZlimsuprr+r+r-scalebUs$      zDecimal.scalebcCs |durt}t|dd}|||}|r|S|jdkr"|tS|j t|kr1|jks7n|tS|r?t |St|}|j }|jt |}|dkrXd||}n |dkrc|| d}|dkrn|d|}n|d|}||j d}t |j |dpd|jSrr)r2rr3rCrrrZshiftedr+r+r-rns6       z Decimal.shiftcCs|jt|ffSr*) __class__rlrr+r+r- __reduce__szDecimal.__reduce__cCt|tur|S|t|Sr*typerrrlrr+r+r-__copy__ zDecimal.__copy__cCrr*r)r2Zmemor+r+r- __deepcopy__rzDecimal.__deepcopy__cCs. |durt}t||d}|jr-t|j|}t|}|ddkr'|d7}t|||S|ddurr@rWrKrSrrr_format_number)r2Z specifierr3rspecrHbodyrKrrrrrr^r+r+r- __format__s\                zDecimal.__format__)rYN)NNr*)FN)TN)r7r8r9 __slots__rj classmethodr}rrrrrrrrrrrrrrrrrrrrrr__radd__rrr__rmul__rrrrrrrrrrrr __trunc__propertyrrrrrArr rrrrrrrdictrrr r"r$r-rArJrKrNrrQrrSrUr' to_integralr[rrr%r&rrardr^rhrrrjr^rmrnrPrrtrrwrrxryr~rrCrrrrrrrrrrrrrrrrrrrrrrr+r+r+r-rs  ,  ! @  2  4   V   7 ; !  $    K      f  >  ,U n Y   ="    c *"   I   K   2  3         .*  ! 'rFcCs( tt}||_||_||_||_|Sr*)rirjrr?r@rWrX)rHZ coefficientr+Zspecialr2r+r+r-r>s r>c@s&eZdZ ddZddZddZdS)rUcCs||_dSr*)rS new_context)r2rr+r+r-__init__z_ContextManager.__init__cCst|_t|j|jSr*)r saved_contextrrrr+r+r- __enter__s z_ContextManager.__enter__cCst|jdSr*)rr)r2tvtbr+r+r-__exit__rz_ContextManager.__exit__N)r7r8r9rrrr+r+r+r-rUs  rUc@seZdZ   dddZddZddZdd 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} Wn ty Ynw|dur|n| j|_|dur|n| j|_|dur(|n| j|_|dur2|n| j|_|dur<|n| j|_|durF|n| j|_| durRg|_n| |_dur`| j |_ nt t stt fddt D|_ n|_ durt t d|_dSt t st fddt D|_dS|_dS)Nc3 |] }|t|vfVqdSr*r]rrrFr+r- Iz#Context.__init__..r'c3rr*rrrGr+r-rPr)r NameErrorrLrKrOrMrr_ignored_flagsrFrSrkrrEfromkeysrG) r2rLrKrOrMrrrGrFrZdcr+)rGrFr-r0s0     zContext.__init__cCst|ts td||dkr||krtd||||fn%|dkr1||kr0td||||fn||ks9||krCtd||||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)rkr]r~rxri __setattr__)r2namerZvminZvmaxr+r+r-_set_integer_checkTs  zContext._set_integer_checkcCs`t|ts td||D] }|tvrtd|q tD] }||vr(td|qt|||S)Nz%s must be a signal dictz%s is not a valid signal dict)rkrr~rEKeyErrorrir)r2rrkeyr+r+r-_set_signal_dictbs    zContext._set_signal_dictcCs|dkr |||ddS|dkr|||ddS|dkr$|||ddS|dkr0|||ddS|d kr<|||ddS|d krQ|tvrJtd |t|||S|d ksY|d kr_|||S|dkrjt|||Std|)NrLr/rrOrr'rMrrrKz%s: invalid rounding moderGrFrz.'decimal.Context' object has no attribute '%s')r_rounding_modesr~rirrAttributeError)r2rrr+r+r-rms*  zContext.__setattr__cCs td|)Nz%s cannot be deleted)r)r2rr+r+r- __delattr__rzContext.__delattr__c CsNdd|jD}dd|jD}|j|j|j|j|j|j|j ||ffS)NcSg|]\}}|r|qSr+r+rZsigrr+r+r-rz&Context.__reduce__..cSrr+r+rr+r+r-rr) rGitemsrFrrLrKrOrMrr)r2rGrFr+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)dcSg|] \}}|r|jqSr+r7)rrrr+r+r-rz$Context.__repr__..zflags=[z, ]cSrr+r)rrrr+r+r-rrztraps=[))ryvarsrGrrzrF)r2rnamesr+r+r-rszContext.__repr__cC |jD]}d|j|<qdSrrr2flagr+r+r-rT  zContext.clear_flagscCrrrrr+r+r- clear_trapsrzContext.clear_trapsc Cs0 t|j|j|j|j|j|j|j|j|j }|Sr*) rrLrKrOrMrrrGrFrr2Zncr+r+r-rVs zContext._shallow_copyc Cs8 t|j|j|j|j|j|j|j|j |j }|Sr*) rrLrKrOrMrrrGrSrFrrr+r+r-rSsz Context.copycGs\ t||}||jvr|j|g|RSd|j|<|j|s*|j|g|RS||rv)_condition_maprOrr4rGrF)r2Z conditionZ explanationr,errorr+r+r-rps    zContext._raise_errorcCs |jtSr*) _ignore_flagsrErr+r+r-rrrzContext._ignore_all_flagscGs |jt||_t|Sr*)rrv)r2rGr+r+r-rszContext._ignore_flagscGs: |rt|dttfr|d}|D]}|j|qdSr)rkrwrvrremove)r2rGrr+r+r- _regard_flagss zContext._regard_flagscC t|j|jdSrv)r]rOrLrr+r+r-rriz Context.EtinycCrrv)r]rMrLrr+r+r-rriz Context.EtopcCs |j}||_|Sr*)rK)r2rrKr+r+r-rWszContext._set_roundingrYcCsl t|tr||ksd|vr|tdSt||d}|r1t|j|j |j kr1|tdS| |S)NrZzAtrailing or leading whitespace and underscores are not permitted.rRzdiagnostic info too long in NaN) rkrlrnrprrrrrr@rLrr)r2r}rr+r+r-create_decimals  zContext.create_decimalcCs t|}||Sr*)rr}r)r2rrr+r+r-create_decimal_from_floats z!Context.create_decimal_from_floatcC t|dd}|j|dSrc)rrr2r@r+r+r-rt!s  z Context.abscC4 t|dd}|j||d}|turtd||SNTrrRUnable to convert %s to Decimal)rrrr~r2r@rrr+r+r-add6   z Context.addcCst||Sr*)rlrrr+r+r-_applyKrzContext._applycC t|ts td|S)Nz,canonical requires a Decimal as an argument.)rkrr~rarr+r+r-raN zContext.canonicalcC t|dd}|j||dSrc)rrr2r@rr+r+r-r[s zContext.comparecCrrc)rrdrr+r+r-rd zContext.compare_signalcC t|dd}||Sr)rr^rr+r+r-r^s  zContext.compare_totalcCrr)rrhrr+r+r-rhs  zContext.compare_total_magcC t|dd}|Sr)rrrr+r+r-r zContext.copy_abscCs t|dd}t|Sr)rrrr+r+r- copy_decimalrzContext.copy_decimalcCrr)rrrr+r+r-rrzContext.copy_negatecCrr)rrjrr+r+r-rj  zContext.copy_signcCrr)rrrr~r r+r+r-divides   zContext.dividecCrr)rrrr~r r+r+r- divide_int+   zContext.divide_intcCrr)rrrr~r r+r+r-rBr zContext.divmodcCrrc)rr^rr+r+r-r^W  z Context.expcCs t|dd}|j|||dSrc)rr$)r2r@rrYr+r+r-r$os z Context.fmacCr)Nz/is_canonical requires a Decimal as an argument.)rkrr~rmrr+r+r-rmrzContext.is_canonicalcCrr)rrnrr+r+r-rns zContext.is_finitecCrr)rrPrr+r+r-rP zContext.is_infinitecCrr)rrrr+r+r-r zContext.is_nancCrrc)rrtrr+r+r-rts  zContext.is_normalcCrr)rrrr+r+r-rrzContext.is_qnancCrr)rrwrr+r+r-rw zContext.is_signedcCrr)rrrr+r+r-rrzContext.is_snancCrrc)rrxrr+r+r-rx  zContext.is_subnormalcCrr)rryrr+r+r-ry%rzContext.is_zerocCrrc)rrrr+r+r-r6rz Context.lncCrrc)rrrr+r+r-rL  z Context.log10cCrrc)rrrr+r+r-rhs  z Context.logbcCrrc)rrrr+r+r-r zContext.logical_andcCrrc)rrrr+r+r-rs  zContext.logical_invertcCrrc)rrrr+r+r-rr!zContext.logical_orcCrrc)rrrr+r+r-rr!zContext.logical_xorcCrrc)rrrr+r+r-rr!z Context.maxcCrrc)rrrr+r+r-r zContext.max_magcCrrc)rrrr+r+r-rr!z Context.mincCrrc)rrrr+r+r-r-r"zContext.min_magcCrrc)rrrr+r+r-minus> z Context.minuscCrr)rrrr~r r+r+r-multiplyOs   zContext.multiplycCrrc)rrrr+r+r-ro  zContext.next_minuscCrrc)rrrr+r+r-rr&zContext.next_pluscCrrc)rrrr+r+r-rrzContext.next_towardcCrrc)rrNrr+r+r-rNrzContext.normalizecCrrc)rrrr+r+r-rs . zContext.number_classcCrrc)rrrr+r+r-plusr$z Context.pluscCs6 t|dd}|j|||d}|turtd||Sr)rrJrr~)r2r@rr)rr+r+r-powers  H z Context.powercCrrc)rrrr+r+r-res 6zContext.quantizecCrrrrr+r+r-rroz Context.radixcCrr)rrrr~r r+r+r-rs   zContext.remaindercCrrc)rrrr+r+r-rs zContext.remainder_nearcCrrc)rrrr+r+r-rs zContext.rotatecCrr)rrQrr+r+r-rQ rzContext.same_quantumcCrrc)rrrr+r+r-r$s zContext.scalebcCrrc)rrrr+r+r-r7s z Context.shiftcCrrc)rr[rr+r+r-r[Us  z Context.sqrtcCrr)rrrr~r r+r+r-subtracturzContext.subtractcCrrc)rrrr+r+r-rr zContext.to_eng_stringcCrrc)rrrr+r+r- to_sci_strings  zContext.to_sci_stringcCrrc)rrUrr+r+r-rUs  zContext.to_integral_exactcCrrc)rr'rr+r+r-r's  zContext.to_integral_value) NNNNNNNNNr*)rY)Wr7r8r9rrrrrrrrTrrVrSrrprrrrrrrWrrrtr r rarrdr^rhrrrrjrrrr^r$rmrnrPrrtrrwrrxryrrrrrrrrrrrr#r%rrrrNrr'r(rrrrrrQrrr[r)rr*rUr'rr+r+r+r-rs $     $#   %  #2 P:&" rc@s"eZdZdZdddZddZdS)rurHr]r^NcCsj|durd|_d|_d|_dSt|tr$|j|_t|j|_|j|_dS|d|_|d|_|d|_dS)Nr'r/re)rHr]r^rkrr?r@rW)r2rr+r+r-rs      z_WorkRep.__init__cCsd|j|j|jfS)Nz (%r, %r, %r)r+rr+r+r-rsz_WorkRep.__repr__r*)r7r8r9rrrr+r+r+r-rus  rucCs |j|jkr |}|}n|}|}tt|j}tt|j}|jtd||d}||jd|kr9d|_||_|jd|j|j9_|j|_||fS)Nrrer/r)r^rrrlr]r)rrrLtmprZtmp_lenZ other_lenr^r+r+r-rs rcCs` |dkrdS|dkr|d|Stt|}t|t|d}|| kr)dS|d| S)Nr'rrY)rlrtrrrstrip)r=rZstr_nZval_nr+r+r-r6(s   r6cCsJ |dks |dkr tdd}||kr#||| |d?}}||ks|S)Nr'z3Both arguments to _sqrt_nearest should be positive.r/)rx)r=r@rr+r+r- _sqrt_nearest=sr.cCs4 d|>||?}}|d||d@|d@|kS)Nr/rer+)r9rrrr+r+r-_rshift_nearestLs r/cCs( t||\}}|d||d@|kS)Nrer/)r)r@rrrr+r+r- _div_nearestTsr0r0c Cs ||}d}||krt|||>|ks#||krXt|||?|krXt||d>|t||t|||}|d7}||krJt|||>|ks#||krXt|||?|ks#tdtt|d| }t||}t||}t|dddD]}t||t|||}qyt|||S)Nr'r/rcr)rtr0r.r/r]rrrlr() r9MLr<RTZyshiftwrr+r+r-_ilog\s"   r7c Cs |d7}tt|}||||dk}|dkrKd|}|||}|dkr.|d|9}nt|d| }t||}t|}t|||}||} n d}t|d| } t| |dSNrer/r'rr4)rrrlr0r7 _log10_digits) rYrr8rZrr2rlog_dZlog_10Z log_tenpowerr+r+r-rs"    rc Cs |d7}tt|}||||dk}|dkr:|||}|dkr*|d|9}nt|d| }t|d|}nd}|r_ttt|d}||dkr\t|t||d|}nd}nd}t||dSr8)rrrlr0r7rtr9) rYrr8rZrrr:rIZ f_log_tenr+r+r-rs$   rc@seZdZ ddZddZdS) _Log10MemoizecCs d|_dS)NZ/23025850929940456840179914546843642076011014886)rrr+r+r-rs z_Log10Memoize.__init__cCs |dkr td|t|jkrBd} d||d}tttd||d}|| dd|kr3n|d7}q|ddd |_t|jd|d S) Nr'zp should be nonnegativercTrrer4rYrr/)rxrrrrlr0r7r-r])r2r8rIr2rr+r+r- getdigitss z_Log10Memoize.getdigitsN)r7r8r9rr<r+r+r+r-r;s r;c Cs t||>|}tdtt|d| }t||}||>}t|dddD] }t|||||}q)t|dddD]}||d>}t||||}q?||S)Nr1rcr/r'rre)r5r]rrrlr0r() r9r2r3r4r5r<ZMshiftr,rr+r+r-_iexps  r=c Cs |d7}td|tt|d}||}||}|dkr%|d|}n|d| }t|t|\}}t|d|}tt|d|d||dfS)Nrer'r/rirc)rrrrlrr9r0r=) rYrr8rIrrZcshiftZquotr?r+r+r-rk$s rkc Cs ttt||}t||||d}||}|dkr&||d|}n t||d| }|dkratt||dk|dkkrSd|ddd|} } | | fSd|d| } } | | fSt||d |d\} } t| d} | d7} | | fS)Nr/r'r)rrrlrtrr0rk) r:r;r=r>r8rZlxcrZpcrr^r+r+r-rDHs" rDr4F5(rzrr) r2345678rJcCs2 |dkr tdt|}dt|||dS)Nr'z0The argument to _log10_lb should be nonnegative.r4)rxrlrr)rYZ correctionZstr_cr+r+r-r7rs r7cCsN t|tr|St|trt|S|rt|trt|S|r%td|tS)Nr )rkrr]r|r}r~r)rrZ allow_floatr+r+r-r}s    rcCs t|tr ||fSt|tjr*|js#t|jtt|j |j |j }|t|j fS|r:t|tj r:|jdkr:|j}t|trWt}|rJd|jt<n|td|t|fSttfS)Nr'r/rh)rkr_numbersZRationalrXr>r?rlr]r@ denominatorrW numeratorZComplexrrr|rrGrrpr}r)r2rrr3r+r+r-rs*    rr3i?Bi)rLrKrFrGrMrOrrrf)rLrKrFrGa # 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 cCs t|}|durtd||}|d}|d}|ddu|d<|dr<|dur2td||durrHr\ minimumwidthrYrr'rZgGnr/r=r thousands_sepzJExplicit thousands separator conflicts with 'n' type in format specifier: grouping decimal_pointr[rcr)_parse_format_specifier_regexmatchrx groupdictr]_locale localeconv) format_specrrZ format_dictrMrNr+r+r-rsX              rc Cs |d}|d}||t|t|}|d}|dkr%|||}|S|dkr1|||}|S|dkr=|||}|S|dkrYt|d}|d|||||d}|Std ) NrRrMrNNumberregisterrUrrurr]rr5r6r.r/r0r7rrr;r<r9r=rkrDr7rrrrrrecompileVERBOSE IGNORECASErWrmr rDOTALLrVlocalerYrrrcrhrrrrrBrfrBrerF hash_infomodulusrrrrZ _PyHASH_NANrrr+r+r+r-slc#            &   .  ^  0",# %$ + *       P % )