
    ,hhw                       / S Qr \rSrSrSrSSKrSSKrSSK	r	 SSK
Jr  \" SSSS	9rSrSrSrSrSrSrSrSrSrSr\	R2                  S:X  a  SrSrSrOSrSrSr\\S-
  -
  r " S S\5      r " S S\5      r  " S S\5      r! " S  S!\!5      r" " S" S#\\#5      r$ " S$ S%\!5      r% " S& S'\!\#5      r& " S( S)\5      r' " S* S+\!5      r( " S, S-\5      r) " S. S/\5      r* " S0 S1\'\)5      r+ " S2 S3\'\)\*5      r, " S4 S5\\-5      r.\ \$\'\+\)\,\!\*\./	r/\"\!\%\!\&\!\(\!0r0\\\\\\\\4r1SSK2r2\2Rf                  " S65      r4\5" / S7Q5      r6S8 r7S9 r8C2SsS: jr9 " S; S<\:5      r;StS= jr<\Rz                  R}                  \;5         " S> S?\:5      r? " S@ SA\:5      r@ " SB SC\:5      rASuSD jrB\CR                  rESE rFSF rGSG rHSH rISvSI jrJSJ rKSK rL " SL SM\:5      rM\M" 5       R                  rOSvSN jrPSO rQSP rRSQSRSSSTSUSVSWSXSYSZ.	4S[ jrSSwS\ jrTStS] jrU\@" S^\\$\+\!// S_S`SSSa9rV\@" Sb\\$\+\!\ \,// Sc9rW\@" Sb\/ / Sc9rXSSKYrY\YR                  " Sd\YR                  \YR                  -  5      R                  r^\YR                  " Se5      R                  r_\YR                  " Sf5      R                  r`\YR                  " Sg\YR                  \YR                  -  5      rbCY SSKcrdSsSh jreSi rfSj rgSxSk jrhSl riSm rj\;" Sn5      rk\;" So5      rl\;" Sp5      rm\;" S5      rn\;" S5      ro\;" Sq5      rp\k\l4rq\	R                  R                  rt\	R                  R                  rv\	R                  R                  rx\y" SX\tSr-
  \t5      rzC	g! \ a    S
 r GNGf = f! \ a     Nf = f)y)%DecimalContextDecimalTupleDefaultContextBasicContextExtendedContextDecimalExceptionClampedInvalidOperationDivisionByZeroInexactRounded	SubnormalOverflow	UnderflowFloatOperationDivisionImpossibleInvalidContextConversionSyntaxDivisionUndefined
ROUND_DOWNROUND_HALF_UPROUND_HALF_EVENROUND_CEILINGROUND_FLOORROUND_UPROUND_HALF_DOWN
ROUND_05UP
setcontext
getcontextlocalcontextMAX_PRECMAX_EMAXMIN_EMIN	MIN_ETINYHAVE_THREADSHAVE_CONTEXTVARdecimalz1.70z2.4.2    N)
namedtupler   zsign digits exponent)modulec                      U $ N )argss    3/opt/python-3.13.8/usr/lib/python3.13/_pydecimal.py<lambda>r0   C   s        r   r   r   r   r   r   r   r   Tl    l   NZolNZoi@Ti   c                       \ rS rSrS rSrg)r   _   c                     g r,   r-   selfcontextr.   s      r/   handleDecimalException.handler   s    r1   r-   N__name__
__module____qualname____firstlineno__r9   __static_attributes__r-   r1   r/   r   r   _   s    &r1   r   c                       \ rS rSrSrg)r	   v   r-   Nr<   r=   r>   r?   r@   r-   r1   r/   r	   r	   v        r1   r	   c                       \ rS rSrS rSrg)r
      c                     U(       a9  [        US   R                  US   R                  SS5      nUR                  U5      $ [        $ )Nr(   nT)_dec_from_triple_sign_int_fix_nan_NaN)r7   r8   r.   anss       r/   r9   InvalidOperation.handle   s9    "47==$q',,TJC<<((r1   r-   Nr;   r-   r1   r/   r
   r
      s    .r1   r
   c                       \ rS rSrS rSrg)r      c                     [         $ r,   rM   r6   s      r/   r9   ConversionSyntax.handle       r1   r-   Nr;   r-   r1   r/   r   r      s    r1   r   c                       \ rS rSrS rSrg)r      c                     [         U   $ r,   )_SignedInfinityr7   r8   signr.   s       r/   r9   DivisionByZero.handle   s    t$$r1   r-   Nr;   r-   r1   r/   r   r      s    %r1   r   c                       \ rS rSrS rSrg)r      c                     [         $ r,   rS   r6   s      r/   r9   DivisionImpossible.handle   rU   r1   r-   Nr;   r-   r1   r/   r   r          r1   r   c                       \ rS rSrS rSrg)r      c                     [         $ r,   rS   r6   s      r/   r9   DivisionUndefined.handle   rU   r1   r-   Nr;   r-   r1   r/   r   r      ra   r1   r   c                       \ rS rSrSrg)r      r-   NrC   r-   r1   r/   r   r      rD   r1   r   c                       \ rS rSrS rSrg)r      c                     [         $ r,   rS   r6   s      r/   r9   InvalidContext.handle   rU   r1   r-   Nr;   r-   r1   r/   r   r      s    r1   r   c                       \ rS rSrSrg)r      r-   NrC   r-   r1   r/   r   r      rD   r1   r   c                       \ rS rSrSrg)r      r-   NrC   r-   r1   r/   r   r      rD   r1   r   c                       \ rS rSrS rSrg)r      c                    UR                   [        [        [        [        4;   a	  [
        U   $ US:X  aQ  UR                   [        :X  a	  [
        U   $ [        USUR                  -  UR                  UR                  -
  S-   5      $ US:X  aQ  UR                   [        :X  a	  [
        U   $ [        USUR                  -  UR                  UR                  -
  S-   5      $ g )Nr(   9r2   )roundingr   r   r   r   rY   r   rI   precEmaxr   rZ   s       r/   r9   Overflow.handle  s     / ; ;"4((19=0&t,,#D#gll*:#LL5a79 919;.&t,,#D#gll*:$\\',,6q8: : r1   r-   Nr;   r-   r1   r/   r   r      s    ,:r1   r   c                       \ rS rSrSrg)r   i&  r-   NrC   r-   r1   r/   r   r   &  rD   r1   r   c                       \ rS rSrSrg)r   i5  r-   NrC   r-   r1   r/   r   r   5  rD   r1   r   decimal_context)ru   Eminrv   capitalsclamprt   flagstrapsc                       [         R                  5       $ ! [         a$    [        5       n [         R	                  U 5        U s $ f = fr,   )_current_context_vargetLookupErrorr   setr8   s    r/   r   r   _  s?    #'')) )  )s    +AAc                     U [         [        [        4;   a   U R                  5       n U R	                  5         [
        R                  U 5        g r,   )r   r   r   copyclear_flagsr   r   r   s    r/   r   r   m  s6    ><AA,,.W%r1   c                     U c
  [        5       n [        U 5      nUR                  5        H4  u  p4U[        ;  a  [	        SU S35      e[        UR                  X45        M6     U$ )N'z2' is an invalid keyword argument for this function)r   _ContextManageritems_context_attributes	TypeErrorsetattrnew_context)ctxkwargsctx_managerkeyvalues        r/   r    r    v  sc    H {l!#&Klln
))au$VWXX''4 % r1   c                      \ rS rSrSrS{S jr\S 5       rS rS r	S|S jr
S	 rS
 rS rS}S jrS}S jrS}S jrS}S jrS}S jrS}S jrS rS rS rS rS~S jrS}S jrS}S jrS}S jrSS jrS}S jr\rS}S jrS}S jr S}S jr!\!r"S}S jr#S  r$S}S! jr%S}S" jr&S}S# jr'S}S$ jr(S}S% jr)S}S& jr*S}S' jr+S}S( jr,S) r-S* r.\.r/\0S+ 5       r1\0S, 5       r2S- r3S. r4S/ r5S0 r6S1 r7S2 r8S3 r9S4 r:S5 r;S6 r<S7 r=S8 r>\?" \7\8\9\:\;\<\=\>S99r@S}S: jrAS; rBS< rCS}S= jrDS}S> jrES? rFS|S@ jrGS}SA jrHS}SB jrIS|SC jrJS}SD jrKSE rLSF rMS|SG jrNS|SH jrO\OrPS}SI jrQS}SJ jrRS}SK jrSSL rTSM rUSN rVSO rWS}SP jrXS}SQ jrYS}SR jrZSS r[ST r\S}SU jr]S}SV jr^SW r_SX r`SY raSZ rbS}S[ jrcS\ rdS] reS^ rfS}S_ jrgS` rhSa riS}Sb jrjSc rkS}Sd jrlS}Se jrmSf rnSg roS}Sh jrpS}Si jrqS}Sj jrrS}Sk jrsS}Sl jrtS}Sm jruS}Sn jrvS}So jrwS}Sp jrxS}Sq jrySr rzS}Ss jr{S}St jr|S}Su jr}Sv r~Sw rSx rS|Sy jrSzrg)r   i  )_exprK   rJ   _is_specialNc                 	   [         R                  U 5      n[        U[        5      (       Ga  [	        UR                  5       R                  SS5      5      nUc&  Uc
  [        5       nUR                  [        SU-  5      $ UR                  S5      S:X  a  SUl        OSUl        UR                  S5      nUbt  UR                  S	5      =(       d    Sn[        UR                  S
5      =(       d    S5      n[        [        XV-   5      5      Ul        U[        U5      -
  Ul        SUl        U$ UR                  S5      nUbW  [        [        U=(       d    S5      5      R#                  S5      Ul        UR                  S5      (       a  SUl        OSUl        OSUl        SUl        SUl        U$ [        U[        5      (       a>  US:  a  SUl        OSUl        SUl        [        [%        U5      5      Ul        SUl        U$ [        U[&        5      (       aF  UR                  Ul        UR                  Ul        UR                  Ul        UR                   Ul        U$ [        U[(        5      (       aN  UR*                  Ul        [        UR                  5      Ul        [        UR,                  5      Ul        SUl        U$ [        U[.        [0        45      (       Gau  [        U5      S:w  a  [3        S5      e[        US   [        5      (       a	  US   S;   d  [3        S5      eUS   Ul        US   S:X  a  SUl        US   Ul        SUl        U$ / n	US    HS  n
[        U
[        5      (       a2  SU
s=::  a  S::  a%  O  O"U	(       d  U
S:w  a  U	R5                  U
5        MH  MJ  [3        S5      e   US   S;   a7  SR7                  [9        [        U	5      5      Ul        US   Ul        SUl        U$ [        US   [        5      (       aA  SR7                  [9        [        U	=(       d    S/5      5      Ul        US   Ul        SUl        U$ [3        S5      e[        U[:        5      (       a~  Uc
  [        5       nUR                  [<        S5        [&        R?                  U5      nUR                  Ul        UR                  Ul        UR                  Ul        UR                   Ul        U$ [A        SU-  5      e)N_ zInvalid literal for Decimal: %rr[   -r2   r(   intfracexp0FdiagsignalNrH   FT   ztInvalid tuple size in creation of Decimal from list or tuple.  The list or tuple should have exactly three elements.r(   r2   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.rH   r   zUThe third value in the tuple must be an integer, or one of the strings 'F', 'n', 'N'.;strict semantics for mixing floats and Decimals are enabledzCannot convert %r to Decimal)!object__new__
isinstancestr_parserstripreplacer   _raise_errorr   grouprJ   r   rK   lenr   r   lstripabsr   _WorkRepr[   r   listtuple
ValueErrorappendjoinmapfloatr   
from_floatr   )clsr   r8   r7   mintpartfracpartr   r   digitsdigits              r/   r   Decimal.__new__  sY   . ~~c" eS!!--c267Ay?(lG++,< AE IK K wwv#%

ggenG"776?0b!''%./C0G$4 56	#h-/	#(  K wwv# #C$4 5 < <S ADIwwx(($'	$'	 !$DI #DI#' K eS!!z

DICJDI$DK eW%%DIDJDI % 1 1DK eX&&DJEIIDIEIIDI$DK ed5\**5zQ  "G H H uQx--%(e2C  "O P P qDJQx3	!!H	#' 6 K1 "1XE!%--!u//!UaZ"MM%0 &0 ) *8 9 9 & 8z) "C(8 9DI %aDI'+D$ K  a#.. "CA3(? @DI %aDI',D$
 K % &> ? ?
 eU##$,   &&u-EDIDJDI % 1 1DK6>??r1   c                 <   [        U[        5      (       a!  US:  a  SOSnSn[        [        U5      5      nO[        U[        5      (       a  [
        R                  " U5      (       d  [
        R                  " U5      (       a  U " [        U5      5      $ [
        R                  " SU5      S:X  a  SnOSn[        U5      R                  5       u  pVUR                  5       S-
  n[        USU-  -  5      nO[        S5      e[        X$U* 5      nU [        L a  U$ U " U5      $ )Nr(   r2   g      ?   zargument must be int or float.)r   r   r   r   r   _mathisinfisnanreprcopysignas_integer_ratio
bit_lengthr   rI   r   )r   fr[   kcoeffrH   dresults           r/   r   Decimal.from_floatI  s    , aQ1ADAAKE5!!{{1~~Q47|#~~c1%,q6**,DA"A!Q$KE<==!$r2'>Mv;r1   c                 Z    U R                   (       a  U R                  nUS:X  a  gUS:X  a  gg)NrH   r2   r   r   r(   )r   r   )r7   r   s     r/   _isnanDecimal._isnanv  s-     ))Cczr1   c                 J    U R                   S:X  a  U R                  (       a  ggg)Nr   r2   r(   )r   rJ   r7   s    r/   _isinfinityDecimal._isinfinity  s      99zzr1   c                 L   U R                  5       nUc  SnOUR                  5       nU(       d  U(       ap  Uc
  [        5       nUS:X  a  UR                  [        SU 5      $ US:X  a  UR                  [        SU5      $ U(       a  U R	                  U5      $ UR	                  U5      $ g)NFr   sNaNr(   )r   r   r   r
   rL   )r7   otherr8   self_is_nanother_is_nans        r/   _check_nansDecimal._check_nans  s     kkm= L <<>L,$,a++,<f(,. .q ++,<f(-/ /}}W-->>'**r1   c                    Uc
  [        5       nU R                  (       d  UR                  (       a  U R                  5       (       a  UR                  [        SU 5      $ UR                  5       (       a  UR                  [        SU5      $ U R                  5       (       a  UR                  [        SU 5      $ UR                  5       (       a  UR                  [        SU5      $ g)Nzcomparison involving sNaNzcomparison involving NaNr(   )r   r   is_snanr   r
   is_qnanr7   r   r8   s      r/   _compare_check_nansDecimal._compare_check_nans  s     ? lGu00||~~++,<,G,02 2 ++,<,G,13 3 ++,<,F,02 2 ++,<,F,13 3 r1   c                 F    U R                   =(       d    U R                  S:g  $ Nr   r   rK   r   s    r/   __bool__Decimal.__bool__  s    
 3499#33r1   c                     U R                   (       d  UR                   (       a-  U R                  5       nUR                  5       nX#:X  a  gX#:  a  ggU (       d  U(       d  gSUR                  -  * $ U(       d  SU R                  -  $ UR                  U R                  :  a  gU R                  UR                  :  a  gU R                  5       nUR                  5       nXE:X  a|  U R                  SU R
                  UR
                  -
  -  -   nUR                  SUR
                  U R
                  -
  -  -   nXg:X  a  gXg:  a  SU R                  -  * $ SU R                  -  $ XE:  a  SU R                  -  $ SU R                  -  * $ )Nr(   r   r2   r   )r   r   rJ   adjustedrK   r   )r7   r   self_inf	other_infself_adjustedother_adjustedself_paddedother_paddeds           r/   _cmpDecimal._cmp  sQ    u00'')H))+I$% u{{*++## ;;#::#)*))c499uzz+A&BBK ::UZZ$))-C(DDL*+djj(((TZZ''+##4::%&&r1   c                     [        XSS9u  pU[        L a  U$ U R                  X5      (       a  gU R                  U5      S:H  $ )NT)equality_opFr(   )_convert_for_comparisonNotImplementedr   r   r   s      r/   __eq__Decimal.__eq__  sE    -dtLN"LE++yy1$$r1   c                     [        X5      u  pU[        L a  U$ U R                  X5      nU(       a  gU R                  U5      S:  $ NFr(   r   r   r   r   r7   r   r8   rN   s       r/   __lt__Decimal.__lt__"  E    -d:N"L&&u6yy!##r1   c                     [        X5      u  pU[        L a  U$ U R                  X5      nU(       a  gU R                  U5      S:*  $ r  r  r  s       r/   __le__Decimal.__le__+  E    -d:N"L&&u6yy1$$r1   c                     [        X5      u  pU[        L a  U$ U R                  X5      nU(       a  gU R                  U5      S:  $ r  r  r  s       r/   __gt__Decimal.__gt__4  r  r1   c                     [        X5      u  pU[        L a  U$ U R                  X5      nU(       a  gU R                  U5      S:  $ r  r  r  s       r/   __ge__Decimal.__ge__=  r
  r1   c                     [        USS9nU R                  (       d  U(       a+  UR                  (       a  U R                  X5      nU(       a  U$ [        U R	                  U5      5      $ NTraiseit)_convert_otherr   r   r   r   r  s       r/   compareDecimal.compareF  sQ     ud3 %*;*;""52C
tyy'((r1   c                    U R                   (       ah  U R                  5       (       a  [        S5      eU R                  5       (       a  [        R                  U 5      $ U R                  (       a  [        * $ [        $ U R                  S:  a  [        SU R                  [        5      nO [        [        U R                  * [        5      n[        U R                  5      U-  [        -  nU S:  a  UOU* nUS:X  a  S$ U$ )Nz"Cannot hash a signaling NaN value.r(   
   r   )r   r   r   is_nanr   __hash__rJ   _PyHASH_INFr   pow_PyHASH_MODULUS_PyHASH_10INVr   rK   )r7   exp_hashhash_rN   s       r/   r  Decimal.__hash__X  s     ||~~ DEEt,,::'<'&&99>2tyy/:H=499*oFHDII)O;qyeufBYr'C'r1   c           	          [        U R                  [        [        [        U R
                  5      5      U R                  5      $ r,   )r   rJ   r   r   r   rK   r   r   s    r/   as_tupleDecimal.as_tupler  s+    
 DJJc#tyy.A(BDIINNr1   c                     U R                   (       a+  U R                  5       (       a  [        S5      e[        S5      eU (       d  g[	        U R
                  5      nU R                  S:  a  USU R                  -  -  Sp!O{U R                  * nUS:  a$  US-  S:X  a  US-  nUS-  nUS:  a  US-  S:X  a  M  U R                  * n[        X* -  R                  5       S-
  U5      nU(       a  X-  nXE-  nSU-  U-  nU R                  (       a  U* nX4$ )Nz#cannot convert NaN to integer ratioz(cannot convert Infinity to integer ratior   r(   r  r2   r   )
r   r  r   OverflowErrorr   rK   r   minr   rJ   )r7   rH   r   d5d2shift2s         r/   r   Decimal.as_integer_ratioy  s    {{}} !FGG#$NOO 		N99>r499}$aq ))Bq&QUaZaa q&QUaZ ))B!b&,,.2B7F2A::Atr1   c                     S[        U 5      -  $ )NzDecimal('%s'))r   r   s    r/   __repr__Decimal.__repr__  s     T**r1   c                 (   SS/U R                      nU R                  (       aI  U R                  S:X  a  US-   $ U R                  S:X  a  US-   U R                  -   $ US-   U R                  -   $ U R                  [	        U R                  5      -   nU R                  S::  a	  US	:  a  UnO1U(       d  S
nO'U R                  S:X  a  US
-   S-  S
-
  nOUS
-
  S-  S
-   nUS::  a  SnSSU* -  -   U R                  -   nOeU[	        U R                  5      :  a+  U R                  SU[	        U R                  5      -
  -  -   nSnO!U R                  S U nSU R                  US  -   nXE:X  a  SnO&Uc
  [        5       nSS/UR                     SXE-
  -  -   nX6-   U-   U-   $ )Nr   r   r   InfinityrH   NaNr   r(   r2   r   r   .eEz%+d)rJ   r   r   rK   r   r   r|   )	r7   engr8   r[   
leftdigitsdotplacer   r   r   s	            r/   __str__Decimal.__str__  s    Cy$yyCj((c!e|dii//f}tyy00 YYTYY/

 99>j2o!HHYY#"Q!+a/H #Q!+a/Hq=GS8)_,tyy8HTYY'iiXc$))n%< ==GHii	*GTYYxy11H!C$,*W--.*:M1NNC~(3..r1   c                 "    U R                  SUS9$ )NT)r8  r8   )r;  r7   r8   s     r/   to_eng_stringDecimal.to_eng_string  s     ||g|66r1   c                    U R                   (       a  U R                  US9nU(       a  U$ Uc
  [        5       nU (       d%  UR                  [        :w  a  U R                  5       nOU R                  5       nUR                  U5      $ Nr   )r   r   r   rt   r   copy_abscopy_negate_fixr7   r8   rN   s      r/   __neg__Decimal.__neg__  sn    
 ""7"3C
? lG((K7 --/C""$Cxx  r1   c                     U R                   (       a  U R                  US9nU(       a  U$ Uc
  [        5       nU (       d%  UR                  [        :w  a  U R                  5       nO[        U 5      nUR                  U5      $ rB  )r   r   r   rt   r   rC  r   rE  rF  s      r/   __pos__Decimal.__pos__  sg    
 ""7"3C
? lG((K7--/C$-Cxx  r1   c                     U(       d  U R                  5       $ U R                  (       a  U R                  US9nU(       a  U$ U R                  (       a  U R	                  US9nU$ U R                  US9nU$ rB  )rC  r   r   rJ   rG  rJ  )r7   roundr8   rN   s       r/   __abs__Decimal.__abs__  sl     ==?"""7"3C
::,,w,/C 
 ,,w,/C
r1   c                    [        U5      nU[        L a  U$ Uc
  [        5       nU R                  (       d  UR                  (       a  U R	                  X5      nU(       a  U$ U R                  5       (       aP  U R                  UR                  :w  a+  UR                  5       (       a  UR                  [        S5      $ [        U 5      $ UR                  5       (       a  [        U5      $ [        U R                  UR                  5      nSnUR                  [        :X  a  U R                  UR                  :w  a  SnU (       dP  U(       dI  [        U R                  UR                  5      nU(       a  Sn[        USU5      nUR                  U5      nU$ U (       dS  [!        XAR                  UR"                  -
  S-
  5      nUR%                  XBR                  5      nUR                  U5      nU$ U(       dS  [!        X@R                  UR"                  -
  S-
  5      nU R%                  XBR                  5      nUR                  U5      nU$ ['        U 5      n['        U5      n[)        XxUR"                  5      u  px['        5       n	UR*                  UR*                  :w  a  UR,                  UR,                  :X  a   [        USU5      nUR                  U5      nU$ UR,                  UR,                  :  a  XpUR*                  S:X  a+  SU	l        UR*                  UR*                  sUl        Ul        O6SU	l        O.UR*                  S:X  a  SU	l        Su  Ul        Ul        OSU	l        UR*                  S:X  a  UR,                  UR,                  -   U	l        OUR,                  UR,                  -
  U	l        UR.                  U	l        [        U	5      nUR                  U5      nU$ )Nz
-INF + INFr(   r2   r   )r(   r(   )r  r   r   r   r   r   rJ   r   r
   r   r)  r   rt   r   rI   rE  maxru   _rescaler   
_normalizer[   r   r   )
r7   r   r8   rN   r   negativezeror[   op1op2r   s
             r/   __add__Decimal.__add__.  s   
 u%N"L? lGu00""52C
!!::,1B1B1D1D"//0@,OOt}$  ""u~%$))UZZ({*tzzU[[/HLEtzz5;;/D"4c2C((7#CJc::4Q67C..&6&67C((7#CJc99w||3A56C--%5%56C((7#CJtnuoc588sxxww#''!&|S#>hhw'
ww Sxx1}%(XXsxx"#(XX]FK!'CHchFK 88q=377*FJ377*FJWW
fohhw
r1   c                     [        U5      nU[        L a  U$ U R                  (       d  UR                  (       a  U R                  XS9nU(       a  U$ U R	                  UR                  5       US9$ rB  )r  r   r   r   rW  rD  r  s       r/   __sub__Decimal.__sub__  sc    u%N"Lu00""5":C
 ||E--/|AAr1   c                 L    [        U5      nU[        L a  U$ UR                  XS9$ rB  )r  r   rZ  r   s      r/   __rsub__Decimal.__rsub__  s*    u%N"L}}T}33r1   c                    [        U5      nU[        L a  U$ Uc
  [        5       nU R                  UR                  -  nU R                  (       d  UR                  (       a  U R                  X5      nU(       a  U$ U R                  5       (       a&  U(       d  UR                  [        S5      $ [        U   $ UR                  5       (       a&  U (       d  UR                  [        S5      $ [        U   $ U R                  UR                  -   nU (       a  U(       d   [        USU5      nUR                  U5      nU$ U R                  S:X  a)  [        X1R                  U5      nUR                  U5      nU$ UR                  S:X  a)  [        X0R                  U5      nUR                  U5      nU$ [        U 5      n[        U5      n[        U[        UR                   UR                   -  5      U5      nUR                  U5      nU$ )Nz(+-)INF * 0z0 * (+-)INFr   1)r  r   r   rJ   r   r   r   r   r
   rY   r   rI   rE  rK   r   r   r   )r7   r   r8   
resultsignrN   	resultexprU  rV  s           r/   __mul__Decimal.__mul__  s   
 u%N"L? lGZZ%++-
u00""52C
!!"//0@-PP&z22  """//0@-PP&z22II

*	 5":sI>C((7#CJ 99":zz9EC((7#CJ::":yy)DC((7#CJtnuoz3sww/@+A9Mhhw
r1   c                    [        U5      nU[        L a  [        $ Uc
  [        5       nU R                  UR                  -  nU R                  (       d  UR                  (       a  U R                  X5      nU(       a  U$ U R                  5       (       a+  UR                  5       (       a  UR                  [        S5      $ U R                  5       (       a	  [        U   $ UR                  5       (       a1  UR                  [        S5        [        USUR                  5       5      $ U(       d4  U (       d  UR                  [        S5      $ UR                  [        SU5      $ U (       d  U R                  UR                  -
  nSnGO[!        UR"                  5      [!        U R"                  5      -
  UR$                  -   S-   nU R                  UR                  -
  U-
  n['        U 5      n['        U5      n	US:  a)  [)        UR*                  SU-  -  U	R*                  5      u  pjO)[)        UR*                  U	R*                  SU* -  -  5      u  pjU
(       a  US	-  S:X  a  US-  nOAU R                  UR                  -
  nX[:  a#  US-  S:X  a  US-  nUS-  nX[:  a  US-  S:X  a  M  [        U[-        U5      U5      nUR/                  U5      $ )
Nz(+-)INF/(+-)INFzDivision by infinityr   z0 / 0zx / 0r(   r2   r  r   )r  r   r   rJ   r   r   r   r   r
   rY   r	   rI   Etinyr   r   r   r   rK   ru   r   divmodr   r   rE  )r7   r   r8   r[   rN   r   r   shiftrU  rV  	remainder	ideal_exps               r/   __truediv__Decimal.__truediv__  sL   u%N"!!? lGzzEKK'u00""52C
!!e&7&7&9&9++,<>OPP!!&t,,  ""$$W.DE'c7==?CC ++,=wGG''FF))ejj(CE 

Oc$))n4w||CaGE))ejj(50C4.C5/Cz#)#''BI*=sww#G y#)#''377R%Z3G#H 19>QJE !II

2	o%"*/bLE1HC o%"*/ tSZ5xx  r1   c                    U R                   UR                   -  nUR                  5       (       a  U R                  nO [        U R                  UR                  5      nU R	                  5       UR	                  5       -
  nU (       a  UR                  5       (       d  US::  a(  [        USS5      U R                  XBR                  5      4$ XRR                  ::  a  [        U 5      n[        U5      nUR                  UR                  :  a0  U=R                  SUR                  UR                  -
  -  -  sl        O/U=R                  SUR                  UR                  -
  -  -  sl        [        UR                  UR                  5      u  pUSUR                  -  :  a6  [        U[        U5      S5      [        U R                   [        U	5      U5      4$ UR                  [        S5      n
X4$ )Nr  r   r(   r  z%quotient too large in //, % or divmod)rJ   r   r   r)  r   rI   rR  rt   ru   r   r   r   rg  r   r   r   )r7   r   r8   r[   rj  expdiffrU  rV  qrrN   s              r/   _divideDecimal._divide  s}    zzEKK'		IDIIuzz2I--/ENN$44u((**gm$T32MM)-=-=>@ @ll"4.C5/Cww#''!2#'' 1222#'' 122#''377+DA2w||##(s1vq9(SVYGI I ""#5#JLxr1   c                 L    [        U5      nU[        L a  U$ UR                  XS9$ rB  )r  r   rk  r   s      r/   __rtruediv__Decimal.__rtruediv__1  s-    u%N"L   77r1   c                 j   [        U5      nU[        L a  U$ Uc
  [        5       nU R                  X5      nU(       a  X34$ U R                  UR                  -  nU R                  5       (       aM  UR                  5       (       a  UR                  [        S5      nX34$ [        U   UR                  [        S5      4$ U(       dM  U (       d  UR                  [        S5      nX34$ UR                  [        SU5      UR                  [        S5      4$ U R                  X5      u  pVUR                  U5      nXV4$ )Nzdivmod(INF, INF)INF % xzdivmod(0, 0)x // 0x % 0)r  r   r   r   rJ   r   r   r
   rY   r   r   rq  rE  )r7   r   r8   rN   r[   quotientri  s          r/   
__divmod__Decimal.__divmod__8  s-    u%N"L? lGu.:zzEKK'  ""**+;=OPx'-,,-=yIK K **+<nMx,,^XtL,,-=wGI I #ll5:NN7+	""r1   c                 L    [        U5      nU[        L a  U$ UR                  XS9$ rB  )r  r   r{  r   s      r/   __rdivmod__Decimal.__rdivmod__\  s-    u%N"L66r1   c                    [        U5      nU[        L a  U$ Uc
  [        5       nU R                  X5      nU(       a  U$ U R	                  5       (       a  UR                  [        S5      $ U(       d3  U (       a  UR                  [        S5      $ UR                  [        S5      $ U R                  X5      S   nUR                  U5      nU$ )Nrw  ry  z0 % 0r2   )
r  r   r   r   r   r   r
   r   rq  rE  )r7   r   r8   rN   ri  s        r/   __mod__Decimal.__mod__c  s     u%N"L? lGu.J''(8)DD++,<gFF++,=wGGLL03	NN7+	r1   c                 L    [        U5      nU[        L a  U$ UR                  XS9$ rB  )r  r   r  r   s      r/   __rmod__Decimal.__rmod__~  *    u%N"L}}T}33r1   c                    Uc
  [        5       n[        USS9nU R                  X5      nU(       a  U$ U R                  5       (       a  UR	                  [
        S5      $ U(       d3  U (       a  UR	                  [
        S5      $ UR	                  [        S5      $ UR                  5       (       a  [        U 5      nUR                  U5      $ [        U R                  UR                  5      nU (       d(  [        U R                  SU5      nUR                  U5      $ U R                  5       UR                  5       -
  nXRR                  S-   :  a  UR	                  [        5      $ US::  a,  U R!                  XBR"                  5      nUR                  U5      $ [%        U 5      n[%        U5      nUR&                  UR&                  :  a0  U=R(                  S	UR&                  UR&                  -
  -  -  sl        O/U=R(                  S	UR&                  UR&                  -
  -  -  sl        [+        UR(                  UR(                  5      u  pS
U	-  US-  -   UR(                  :  a  XR(                  -  n	US-  nUS	UR                  -  :  a  UR	                  [        5      $ U R                  n
U	S:  a  SU
-
  n
U	* n	[        U
[-        U	5      U5      nUR                  U5      $ )NTr  zremainder_near(infinity, x)zremainder_near(x, 0)zremainder_near(0, 0)r   r2   r  r  r   r(   )r   r  r   r   r   r
   r   r   rE  r)  r   rI   rJ   r   ru   r   rR  rt   r   r   r   rg  r   )r7   r   r8   rN   ideal_exponentrn  rU  rV  ro  rp  r[   s              r/   remainder_nearDecimal.remainder_near  su    ? lGud3u.J ''(8(EG G ++,<,BD D ++,=,BD D $-C88G$$ TYY

3"4::sNCC88G$$ --/ENN$44llQ&&''(:;;b=--0@0@AC88G$$ tnuo77cggGGrCGGcgg-..GGGrCGGcgg-..Gcggsww' Q3!A#; LAFAGLL  ''(:;; zzq5T6DAtSV^<xx  r1   c                    [        U5      nU[        L a  U$ Uc
  [        5       nU R                  X5      nU(       a  U$ U R	                  5       (       aK  UR	                  5       (       a  UR                  [        S5      $ [        U R                  UR                  -     $ U(       dK  U (       a.  UR                  [        SU R                  UR                  -  5      $ UR                  [        S5      $ U R                  X5      S   $ )Nz
INF // INFrx  z0 // 0r(   )r  r   r   r   r   r   r
   rY   rJ   r   r   rq  r  s       r/   __floordiv__Decimal.__floordiv__  s    u%N"L? lGu.J  ""++,<lKK&tzzEKK'?@@++NH,0JJ,DF F ++,=xHH||E+A..r1   c                 L    [        U5      nU[        L a  U$ UR                  XS9$ rB  )r  r   r  r   s      r/   __rfloordiv__Decimal.__rfloordiv__  s-    u%N"L!!$!88r1   c                     U R                  5       (       a6  U R                  5       (       a  [        S5      eU R                  (       a  SOSnO[	        U 5      n[        U5      $ )Nz%Cannot convert signaling NaN to floatz-nannan)r   r   r   rJ   r   r   r7   ss     r/   	__float__Decimal.__float__  sC    ;;==||~~ !HII**%AD	AQxr1   c                    U R                   (       a@  U R                  5       (       a  [        S5      eU R                  5       (       a  [	        S5      eSU R
                  -  nU R                  S:  a(  U[        U R                  5      -  SU R                  -  -  $ U[        U R                  S U R                   =(       d    S5      -  $ )NzCannot convert NaN to integerz"Cannot convert infinity to integerr   r(   r  r   )	r   r   r   r   r(  rJ   r   r   rK   r  s     r/   __int__Decimal.__int__  s    {{}} !@AA!!###$HII$**99>S^#B		M11S:DII.5#666r1   c                     U $ r,   r-   r   s    r/   realDecimal.real  s    r1   c                     [        S5      $ Nr(   r   r   s    r/   imagDecimal.imag  s    qzr1   c                     U $ r,   r-   r   s    r/   	conjugateDecimal.conjugate  s    r1   c                 *    [        [        U 5      5      $ r,   )complexr   r   s    r/   __complex__Decimal.__complex__  s    uT{##r1   c                    U R                   nUR                  UR                  -
  n[        U5      U:  aA  U[        U5      U-
  S  R	                  S5      n[        U R                  X R                  S5      $ [        U 5      $ )Nr   T)	rK   ru   r}   r   r   rI   rJ   r   r   )r7   r8   payloadmax_payload_lens       r/   rL   Decimal._fix_nan  sm    )) ",,6w</)c'l?:;<CCCHG#DJJDIIt}r1   c                 L   U R                   (       a1  U R                  5       (       a  U R                  U5      $ [        U 5      $ UR	                  5       nUR                  5       nU (       d  UR                  U/UR                     n[        [        U R                  U5      U5      nXPR                  :w  a,  UR                  [        5        [        U R                  SU5      $ [        U 5      $ [        U R                   5      U R                  -   UR"                  -
  nXc:  aM  UR                  [$        SU R                  5      nUR                  [&        5        UR                  [(        5        U$ Xb:  nU(       a  UnU R                  U:  Ga  [        U R                   5      U R                  -   U-
  n	U	S:  a  [        U R                  SUS-
  5      n Sn	U R*                  UR,                     n
U
" X	5      nU R                   S U	 =(       d    SnUS:  a:  [/        [1        U5      S-   5      n[        U5      UR"                  :  a
  US S nUS-  nXc:  a"  UR                  [$        SU R                  5      nO[        U R                  X5      nU(       a  U(       a  UR                  [2        5        U(       a  UR                  [4        5        U(       a  UR                  [&        5        UR                  [(        5        U(       d  UR                  [        5        U$ U(       a  UR                  [4        5        UR                  S:X  aZ  U R                  U:  aJ  UR                  [        5        U R                   SU R                  U-
  -  -   n[        U R                  X5      $ [        U 5      $ )Nr   
above Emaxr(   r`  r2   r   )r   r   rL   r   rf  Etoprv   r}   r)  rQ  r   r   r	   rI   rJ   r   rK   ru   r   r   r   _pick_rounding_functionrt   r   r   r   r   )r7   r8   rf  r  exp_maxnew_expexp_minrN   self_is_subnormalr   rounding_methodchangedr   r   s                 r/   rE  Decimal._fix&  s    {{}}}}W-- t}$ ||~||T*7==9G#dii/9G))#$$W-'

CAAt}$ dii.499,w||;>&&xtzzJC  )  )J#OG 99w^dii/'9Fz'

CC"::7;K;KLO%d3GIIgv&-#E{CJqL)u:,!#2JEqLG ~**8\4::N&tzz5B ,$$Y/ $$Y/$$W-  )$$W-J  + ==A$))d"2  )))c499t+;&<<K#DJJBB t}r1   c                 <    [        U R                  U5      (       a  gg)Nr(   r   )
_all_zerosrK   r7   ru   s     r/   _round_downDecimal._round_down  s    dii&&r1   c                 &    U R                  U5      * $ r,   )r  r  s     r/   	_round_upDecimal._round_up  s      &&&r1   c                 d    U R                   U   S;   a  g[        U R                   U5      (       a  gg)N56789r2   r(   r   )rK   r  r  s     r/   _round_half_upDecimal._round_half_up  s,    99T?g%		4((r1   c                 \    [        U R                  U5      (       a  gU R                  U5      $ )Nr   _exact_halfrK   r  r  s     r/   _round_half_downDecimal._round_half_down  s'    tyy$''&&t,,r1   c                     [        U R                  U5      (       a  US:X  d  U R                  US-
     S;   a  gU R                  U5      $ )Nr(   r2   02468r   r  r  s     r/   _round_half_evenDecimal._round_half_even  sB    tyy$''diiQ/7:&&t,,r1   c                 j    U R                   (       a  U R                  U5      $ U R                  U5      * $ r,   rJ   r  r  s     r/   _round_ceilingDecimal._round_ceiling  s.    ::##D))$$T***r1   c                 j    U R                   (       d  U R                  U5      $ U R                  U5      * $ r,   r  r  s     r/   _round_floorDecimal._round_floor  s.    zz##D))$$T***r1   c                     U(       a'  U R                   US-
     S;  a  U R                  U5      $ U R                  U5      * $ )Nr2   05)rK   r  r  s     r/   _round_05upDecimal._round_05up  s>    DIId1f%T1##D))$$T***r1   )r   r   r   r   r   r   r   r   c                 <   Ub?  [        U[        5      (       d  [        S5      e[        SSU* 5      nU R	                  U5      $ U R
                  (       a+  U R                  5       (       a  [        S5      e[        S5      e[        U R                  S[        5      5      $ )Nz+Second argument to round should be integralr(   r`  cannot round a NaNcannot round an infinity)r   r   r   rI   quantizer   r  r   r(  rR  r   )r7   rH   r   s      r/   	__round__Decimal.__round__  s    ^ =a%% MNN"1cA2.C==%% {{}} !566#$>??4==O455r1   c                     U R                   (       a+  U R                  5       (       a  [        S5      e[        S5      e[	        U R                  S[        5      5      $ Nr  r  r(   )r   r  r   r(  r   rR  r   r   s    r/   	__floor__Decimal.__floor__  sF     {{}} !566#$>??4==K011r1   c                     U R                   (       a+  U R                  5       (       a  [        S5      e[        S5      e[	        U R                  S[        5      5      $ r  )r   r  r   r(  r   rR  r   r   s    r/   __ceil__Decimal.__ceil__  sF     {{}} !566#$>??4==M233r1   c           	         [        USS9n[        USS9nU R                  (       d  UR                  (       Ga  Uc
  [        5       nU R                  S:X  a  UR	                  [
        SU 5      $ UR                  S:X  a  UR	                  [
        SU5      $ U R                  S:X  a  U nGOUR                  S:X  a  UnGO	U R                  S:X  a>  U(       d  UR	                  [
        S5      $ [        U R                  UR                  -     nOUR                  S:X  a=  U (       d  UR	                  [
        S5      $ [        U R                  UR                  -     nOm[        U R                  UR                  -  [        [        U R                  5      [        UR                  5      -  5      U R                  UR                  -   5      nWR                  X#5      $ )	NTr  r   r   rH   r   zINF * 0 in fmaz0 * INF in fma)r  r   r   r   r   r
   rY   rJ   rI   r   r   rK   rW  )r7   r   thirdr8   products        r/   fmaDecimal.fma+  s~    ud3ud3 u000$,yyC++,<fdKKzzS ++,<feLLyyCs"c!"//0@0@B B)$**u{{*BCs""//0@0@B B)$**u{{*BC&tzzEKK'?'*3tyy>C

O+K'L'+yy5::'=?G u..r1   c                    [        U5      nU[        L a  U$ [        U5      nU[        L a  U$ Uc
  [        5       nU R                  5       nUR                  5       nUR                  5       nU(       d  U(       d  U(       a  US:X  a  UR	                  [
        SU 5      $ US:X  a  UR	                  [
        SU5      $ US:X  a  UR	                  [
        SU5      $ U(       a  U R                  U5      $ U(       a  UR                  U5      $ UR                  U5      $ U R                  5       (       a*  UR                  5       (       a  UR                  5       (       d  UR	                  [
        S5      $ US:  a  UR	                  [
        S5      $ U(       d  UR	                  [
        S5      $ UR                  5       UR                  :  a  UR	                  [
        S5      $ U(       d  U (       d  UR	                  [
        S5      $ UR                  5       (       a  SnOU R                  n[        [        U5      5      n[        U R                  5       5      n[        UR                  5       5      n	UR                  U-  [!        S	UR"                  U5      -  U-  n[%        U	R"                  5       H  n
[!        US	U5      nM     [!        XR                  U5      n['        U[)        U5      S5      $ )
Nr   r   z@pow() 3rd argument not allowed unless all arguments are integersr(   zApow() 2nd argument cannot be negative when 3rd argument specifiedzpow() 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  )r  r   r   r   r   r
   rL   
_isintegerr   ru   _isevenrJ   r   r   r   to_integral_valuer  r   rangerI   r   )r7   r   modulor8   r   r   modulo_is_nanr[   baseexponentis              r/   _power_moduloDecimal._power_moduloW  s    u%N"L'^#M? lG kkm||~,-a++,<f(,. .q ++,<f(-/ /!++,<f(.0 0}}W--~~g..??7++ !!  ""!!##''(8)LM M 19''(8)OP P ''(8(HJ J
 ??,''(8);< < T''(8)>? ? ==??D::D S[!..01E3356 6!CDHHf$==Gx||$AtR(D %4v.c$i33r1   c                 	   [        U 5      nUR                  UR                  pTUS-  S:X  a  US-  nUS-  nUS-  S:X  a  M  [        U5      nUR                  UR                  pUS-  S:X  a  US-  nUS-  nUS-  S:X  a  M  US:X  a  XW-  nUS-  S:X  a  US-  nUS-  nUS-  S:X  a  M  US:  a  g USU-  -  n	UR                  S:X  a  U	* n	UR	                  5       (       a:  UR
                  S:X  a*  U R                  [        U5      -  n
[        X-
  US-
  5      nOSn[        SSSU-  -   X-
  5      $ UR                  S:X  Ga@  US-  nUS;   ah  XD* -  U:w  a  g [        U5      S-
  nUS-  S-  nU[        [        U5      5      :  a  g [        X-  U5      n[        XW-  U5      nUb  Uc  g X:  a  g S	U-  nOUS	:X  a  [        U5      S
-  S-  n[        S	U-  U5      u  pOU(       a  g US	-  S:X  a  US	-  nUS-  nUS	-  S:X  a  M  US-  S-  nU[        [        U5      5      :  a  g [        X-  U5      n[        XW-  U5      nUb  Uc  g X:  a  g SU-  nOg [        U5      n[        U5      U:  a  g U* U-
  n[        SUU5      $ US:  a  USU-  -  SnnOUS:w  a%  [        [        [        Xu-  5      5      5      U* ::  a  g [        U5      n[        [        [        U5      U-  5      5      U* ::  a  g USU* -  nnUS-  US-  s=:X  a  S:X  a$  O  O!US-  nUS-  nUS-  US-  s=:X  a  S:X  a  M  O  US	-  US	-  s=:X  a  S:X  a$  O  O!US	-  nUS	-  nUS	-  US	-  s=:X  a  S:X  a  M  O  US:  al  WU::  a  g [        UU5      u  nnUS:w  a  g S[        U5      * U-  * -  n [        UUUS-
  -  5      u  nnUU::  a  OUUS-
  -  U-   U-  nM,  UU:X  a  US:X  d  g UnUS:  a  UUS-  [        U5      -  :  a  g UU-  nUU-  n[        U5      n[        U5      U:  a  g UR	                  5       (       aC  UR
                  S:X  a3  U R                  [        U5      -  n
[        XZ-
  U[        U5      -
  5      nOSn[        SUSU-  -   X[-
  5      $ )Nr  r(   r2   r`  r   )r            ]   A   r      r   r   d   )r   r   r   r[   r  rJ   r   r)  rI   _nbitsr   r   _decimal_lshift_exactrg  r   	_log10_lb)r7   r   pxxcxeyycyer  r  zeros
last_digitr6  emaxri  strxcr   rH   xc_bitsremaro  rp  str_xcs                            r/   _power_exactDecimal._power_exact  s   t TNB2gl2IB!GB 2gl UOB2gl2IB!GB 2gl 7HBr'Q,r	a r'Q, AvBF{Hvv{$9!!ekkQ&6!%3u:!5H3QqS9#AsSYGG 66Q;bJY&8r>2JqL6 tRxSY' *!&"5*27B79
8Tq 2JrM2% &q!tR 01fk1HBFA 1fk tQwSY')!&"5*27B79
8T GE5zA~BB#Aub11 7b"f9aqAqQw3s3ru:/B36RjG3s2ww'(RC/rRCyqAa%1q5%A%aa a%1q5%A% a%1q5%A%aa a%1q5%A%
 q5!|RmGBax r
{A~&&Ab!ac(+16AaC1q(A  FqAvB 6a!C%2..U
a Rv;?
 %++"2!YYs5z1N)1S[=9EE6#e)#3RX>>r1   c                 "   Ub  U R                  XU5      $ [        U5      nU[        L a  U$ Uc
  [        5       nU R	                  X5      nU(       a  U$ U(       d#  U (       d  UR                  [        S5      $ [        $ SnU R                  S:X  aZ  UR                  5       (       a  UR                  5       (       d  SnOU (       a  UR                  [        S5      $ U R                  5       n U (       d&  UR                  S:X  a  [        USS5      $ [        U   $ U R                  5       (       a&  UR                  S:X  a	  [        U   $ [        USS5      $ U [        :X  a  UR                  5       (       a  UR                  S:X  a  SnO'XR                  :  a  UR                  nO[!        U5      nU R"                  U-  nUSUR                  -
  :  a$  SUR                  -
  nUR                  [$        5        O9UR                  [&        5        UR                  [$        5        SUR                  -
  n[        USSU* -  -   U5      $ U R)                  5       nUR                  5       (       a,  UR                  S:H  US:  :X  a  [        USS5      $ [        U   $ S nSn	U R+                  5       UR)                  5       -   n
US:  UR                  S:H  :X  a=  U
[-        [/        UR0                  5      5      :  a  [        USUR0                  S-   5      nO9UR3                  5       nU
[-        [/        U* 5      5      :  a  [        USUS-
  5      nUcJ  U R5                  XR                  S-   5      nUb)  US:X  a!  [        SUR6                  UR"                  5      nSn	Uc  UR                  n[9        U 5      nUR                   UR:                  p[9        U5      nUR                   UR:                  nnUR<                  S:X  a  U* nS	n [?        XUUUU-   5      u  nnUS
S[-        [/        U5      5      U-
  S-
  -  -  -  (       a  OUS	-  nMD  [        U[/        U5      U5      nU	(       Ga  UR                  5       (       Gd  [-        UR6                  5      UR                  ::  aY  UR                  S-   [-        UR6                  5      -
  n[        UR                  UR6                  SU-  -   UR"                  U-
  5      nURA                  5       nURC                  5         [D         H  nSURF                  U'   M     URI                  U5      nUR                  [&        5        URJ                  [L           (       a  UR                  [N        5        URJ                  [P           (       a!  UR                  [P        SUR                  5        [N        [L        [&        [$        [R        4 H*  nURJ                  U   (       d  M  UR                  U5        M,     U$ URI                  U5      nU$ )Nz0 ** 0r(   r2   z+x ** y with x negative and y not an integerr   r`  FTr   r   r  r  )*r  r  r   r   r   r   r
   _OnerJ   r  r  rD  rI   rY   r   ru   r   r   r   r   r   _log10_exp_boundr   r   rv   rf  r  rK   r   r   r[   _dpowerr   r   _signalsr   rE  r~   r   r   r   r	   )r7   r   r  r8   rN   result_sign
multiplierr   self_adjexactboundrf  r  r  r  r  r  r  r  extrar   rn  
newcontext	exceptions                           r/   __pow__Decimal.__pow__  sI   0 %%eW==u%N"L? lG u.J ++,<hGG ::?!!}}"#K "//0@EG G ##%D {{a'S!<<&{33 {{a&{33'S!<<
 4<!!
 ;;!#!"J\\)!(J!$UJii*,7<<'GLL.C((1$$W-$$W-n#KS#XsCC ==? q hl3'S!<<&{33  %%'%..*::Mu{{a/0 C-..&{CaH MMOECK((&{CqA ;##E<<!+;<C!#*1chhAC ;AAUUAEEAUUAEEBvv{S E$RRQuW=
sAb3s5z?1#4Q#6778
	  #;E
C@C ))++ 388},!,,*S]:&syy#((3w;2F'*xx'79 !J""$%	./
  + & ((:&C ##G,	*''	2 )$$X|SYYG&	7GWL	##I..((3 M 
 ((7#C
r1   c                 L    [        U5      nU[        L a  U$ UR                  XS9$ rB  )r  r   r  r   s      r/   __rpow__Decimal.__rpow__|	  r  r1   c                 Z   Uc
  [        5       nU R                  (       a  U R                  US9nU(       a  U$ U R                  U5      nUR	                  5       (       a  U$ U(       d  [        UR                  SS5      $ UR                  UR                  5       /UR                     n[        UR                  5      nUR                  nUR                  US-
     S:X  a,  Xd:  a'  US-  nUS-  nUR                  US-
     S:X  a  Xd:  a  M'  [        UR                  UR                  S U U5      $ )Nr   r   r(   r2   )r   r   r   rE  r   rI   rJ   rv   r  r}   r   rK   r   )r7   r8   rN   dupr  endr   s          r/   	normalizeDecimal.normalize	  s     ? lG""7"3C
ii ??J#CIIsA66<<0?#((mhhhhs1uo$1HC1HC hhs1uo$  		388DS>3??r1   c                    [        USS9nUc
  [        5       nUc  UR                  nU R                  (       d  UR                  (       a  U R	                  X5      nU(       a  U$ UR                  5       (       d  U R                  5       (       aK  UR                  5       (       a   U R                  5       (       a  [        U 5      $ UR                  [        S5      $ UR                  5       UR                  s=::  a  UR                  ::  d  O  UR                  [        S5      $ U (       d2  [        U R                  SUR                  5      nUR                  U5      $ U R                  5       nXSR                  :  a  UR                  [        S5      $ XQR                  -
  S-   UR                   :  a  UR                  [        S5      $ U R#                  UR                  U5      nUR                  5       UR                  :  a  UR                  [        S5      $ [%        UR&                  5      UR                   :  a  UR                  [        S5      $ U(       a3  UR                  5       UR(                  :  a  UR                  [*        5        UR                  U R                  :  a/  X@:w  a  UR                  [,        5        UR                  [.        5        UR                  U5      nU$ )	NTr  zquantize with one INFz)target exponent out of bounds in quantizer   z9exponent of quantize result too large for current contextr2   z7quantize result has too many digits for current context)r  r   rt   r   r   r   r   r   r
   rf  r   rv   rI   rJ   rE  r   ru   rR  r   rK   r{   r   r   r   )r7   r   rt   r8   rN   r   s         r/   r  Decimal.quantize	  sP   
 S$/? lG''Hs""30C
  D$4$4$6$6??$$)9)9););"4=(++,<(?A A 388;w||;''(8>@ @ "4::sCHH=C88G$$<<'''(8(ce e88#a'',,6''(8(ac c mmCHHh/<<>GLL(''(8(ce esxx=7<<'''(8(ac c 3<<>GLL0  +88dii{$$W-  ) hhw
r1   c                 6   [        USS9nU R                  (       d  UR                  (       aU  U R                  5       =(       a    UR                  5       =(       d'    U R                  5       =(       a    UR                  5       $ U R                  UR                  :H  $ r  )r  r   r  is_infiniter   r   s      r/   same_quantumDecimal.same_quantum	  sm     ud3u00KKM4elln ?$$&>5+<+<+>@yyEJJ&&r1   c                 P   U R                   (       a  [        U 5      $ U (       d  [        U R                  SU5      $ U R                  U:  a4  [        U R                  U R
                  SU R                  U-
  -  -   U5      $ [        U R
                  5      U R                  -   U-
  nUS:  a  [        U R                  SUS-
  5      n SnU R                  U   nU" X5      nU R
                  S U =(       d    SnUS:X  a  [        [        U5      S-   5      n[        U R                  Xa5      $ )Nr   r(   r`  r2   )
r   r   rI   rJ   r   rK   r   r  r   r   )r7   r   rt   r   this_functionr  r   s          r/   rR  Decimal._rescale	  s    4= #DJJS9999#DJJ(,		CS4I(I3P P
 TYY$))+c1A:#DJJSU;DF44X>-		'6")ca<E
1%E

E77r1   c                 J   US::  a  [        S5      eU R                  (       d  U (       d  [        U 5      $ U R                  U R	                  5       S-   U-
  U5      nUR	                  5       U R	                  5       :w  a&  UR                  UR	                  5       S-   U-
  U5      nU$ )Nr(   z'argument should be at least 1 in _roundr2   )r   r   r   rR  r   )r7   placesrt   rN   s       r/   _roundDecimal._round

  s     Q;FGG44= mmDMMOA-f4h?
 <<>T]]_,,,s||~a/6AC
r1   c                    U R                   (       a#  U R                  US9nU(       a  U$ [        U 5      $ U R                  S:  a  [        U 5      $ U (       d  [	        U R
                  SS5      $ Uc
  [        5       nUc  UR                  nU R                  SU5      nX0:w  a  UR                  [        5        UR                  [        5        U$ )Nr   r(   r   )r   r   r   r   rI   rJ   r   rt   rR  r   r   r   r7   rt   r8   rN   s       r/   to_integral_exactDecimal.to_integral_exact!
  s     ""7"3C
4= 99>4= #DJJQ77? lG''HmmAx(;  )W%
r1   c                     Uc
  [        5       nUc  UR                  nU R                  (       a#  U R                  US9nU(       a  U$ [	        U 5      $ U R
                  S:  a  [	        U 5      $ U R                  SU5      $ )Nr   r(   )r   rt   r   r   r   r   rR  r7  s       r/   r  Decimal.to_integral_value>
  ss    ? lG''H""7"3C
4= 99>4= ==H--r1   c                 r   Uc
  [        5       nU R                  (       aH  U R                  US9nU(       a  U$ U R                  5       (       a  U R                  S:X  a  [        U 5      $ U (       d5  [        U R                  SU R                  S-  5      nUR                  U5      $ U R                  S:X  a  UR                  [        S5      $ UR                  S-   n[        U 5      nUR                  S-	  nUR                  S-  (       a+  UR                  S-  n[        U R                   5      S-	  S-   nO'UR                  n[        U R                   5      S-   S-	  nX7-
  nUS:  a  USU-  -  nS	n	O[#        USU* -  5      u  pjU
(       + n	XX-  nSU-  n Xk-  nX::  a  O	X-   S-	  nM  U	=(       a    X-  U:H  n	U	(       a  US:  a	  USU-  -  nO	USU* -  -  nXX-  nOUS
-  S:X  a  US-  n[        S[%        U5      U5      nUR'                  5       nUR)                  [*        5      nUR                  U5      nXl        U$ )Nr   r(   r   r   r2   zsqrt(-x), x > 0r  r  Tr   )r   r   r   r   rJ   r   rI   r   rE  r   r
   ru   r   r   r   r   rK   rg  r   _shallow_copy_set_roundingr   rt   )r7   r8   rN   ru   opr6  clrh  r  ri  rH   ro  rt   s                 r/   sqrtDecimal.sqrtQ
  s(   ? lG""7"3C
!!djjAot}$"4::sDIINCC88G$$::?''(8:KLL, ||A~ d^FFaK66A:ATYY1$)AADIIq A%A A:eOAE!!S5&[1LA!ME	
 HAvEQJ  "!#(zb%iR%ZJA 1uzQq#a&!, '')((9hhw#
r1   c                    [        USS9nUc
  [        5       nU R                  (       d  UR                  (       ay  U R                  5       nUR                  5       nU(       d  U(       aK  US:X  a  US:X  a  U R	                  U5      $ US:X  a  US:X  a  UR	                  U5      $ U R                  X5      $ U R                  U5      nUS:X  a  U R                  U5      nUS:X  a  UnOU nUR	                  U5      $ NTr  r2   r(   r   r  r   r   r   rE  r   r   compare_totalr7   r   r8   snonr@  rN   s          r/   rQ  Decimal.max
  s     ud3? lGu00 BBR7rQw99W--7rQw ::g..''77IIe6 ""5)A7CCxx  r1   c                    [        USS9nUc
  [        5       nU R                  (       d  UR                  (       ay  U R                  5       nUR                  5       nU(       d  U(       aK  US:X  a  US:X  a  U R	                  U5      $ US:X  a  US:X  a  UR	                  U5      $ U R                  X5      $ U R                  U5      nUS:X  a  U R                  U5      nUS:X  a  U nOUnUR	                  U5      $ rE  rF  rH  s          r/   r)  Decimal.min
  s     ud3? lGu00 BBR7rQw99W--7rQw ::g..''77IIe6""5)A7CCxx  r1   c                     U R                   (       a  gU R                  S:  a  gU R                  U R                  S  nUS[        U5      -  :H  $ )NFr(   Tr   )r   r   rK   r   )r7   rests     r/   r  Decimal._isinteger   sC    99>yy$s3t9}$$r1   c                 p    U (       a  U R                   S:  a  gU R                  SU R                   -      S;   $ )Nr(   Tr   r  )r   rK   r   s    r/   r  Decimal._iseven	  s.    tyy1}yyDII&'11r1   c                 n     U R                   [        U R                  5      -   S-
  $ ! [         a     gf = f)Nr2   r(   )r   r   rK   r   r   s    r/   r   Decimal.adjusted  s5    	99s499~-11 		s   $' 
44c                     U $ r,   r-   r   s    r/   	canonicalDecimal.canonical  s	     r1   c                 h    [        USS9nU R                  X5      nU(       a  U$ U R                  XS9$ NTr  r   )r  r   r  r  s       r/   compare_signalDecimal.compare_signal  s9     u5&&u6J||E|33r1   c                    [        USS9nU R                  (       a  UR                  (       d  [        $ U R                  (       d  UR                  (       a  [        $ U R                  nU R	                  5       nUR	                  5       nU(       d  U(       a  XE:X  ax  [        U R                  5      U R                  4n[        UR                  5      UR                  4nXg:  a  U(       a  [        $ [        $ Xg:  a  U(       a  [        $ [        $ [        $ U(       a1  US:X  a  [        $ US:X  a  [        $ US:X  a  [        $ US:X  a  [        $ O0US:X  a  [        $ US:X  a  [        $ US:X  a  [        $ US:X  a  [        $ X:  a  [        $ X:  a  [        $ U R                  UR                  :  a  U(       a  [        $ [        $ U R                  UR                  :  a  U(       a  [        $ [        $ [        $ )NTr  r2   r   )	r  rJ   _NegativeOner  r   r   rK   _Zeror   )r7   r   r8   r[   self_nan	other_nanself_key	other_keys           r/   rG  Decimal.compare_total+  s    ud3 ::ekkzzekkKzz ;;=LLN	y$tyy>4994

OUZZ7	'#++'++#q=''>Kq=''>K " q=K>''q=K>''<<K99uzz!##99uzz!##r1   c                 x    [        USS9nU R                  5       nUR                  5       nUR                  U5      $ r  )r  rC  rG  )r7   r   r8   r  os        r/   compare_total_magDecimal.compare_total_magt  s6    
 ud3MMONNq!!r1   c                 Z    [        SU R                  U R                  U R                  5      $ r  )rI   rK   r   r   r   s    r/   rC  Decimal.copy_abs  s!    499dii9I9IJJr1   c                     U R                   (       a,  [        SU R                  U R                  U R                  5      $ [        SU R                  U R                  U R                  5      $ )Nr(   r2   )rJ   rI   rK   r   r   r   s    r/   rD  Decimal.copy_negate  sG    ::#Atyy$))T=M=MNN#Atyy$))T=M=MNNr1   c                     [        USS9n[        UR                  U R                  U R                  U R
                  5      $ r  )r  rI   rJ   rK   r   r   r   s      r/   	copy_signDecimal.copy_sign  s6    ud3TYY $		4+;+;= 	=r1   c                    Uc
  [        5       nU R                  US9nU(       a  U$ U R                  5       S:X  a  [        $ U (       d  [        $ U R                  5       S:X  a  [        U 5      $ UR                  nU R                  5       nU R                  S:X  aD  U[        [        UR                  S-   S-  5      5      :  a  [        SSUR                  S-   5      nGOLU R                  S:X  aL  U[        [        UR                  5       * S-   S-  5      5      :  a  [        SSUR                  5       S-
  5      nOU R                  S:X  a!  XC* :  a  [        SSSUS-
  -  -   S-   U* 5      nOU R                  S:X  a!  XC* S-
  :  a  [        SSUS-   -  U* S-
  5      nO[        U 5      nUR                  UR                   pvUR"                  S:X  a  U* nSn [%        XgX8-   5      u  pU	S	S
[        [        U	5      5      U-
  S-
  -  -  -  (       a  OUS-  nM@  [        S[        U	5      U
5      nUR'                  5       nUR)                  [*        5      nUR-                  U5      nXl        U$ )Nr   r   r2   r(   r   r`  r   rs   r   r  )r   r   r   r^  r  r   ru   r   rJ   r   r   rv   rI   rf  r   r   r   r[   _dexpr=  r>  r   rE  rt   )r7   r8   rN   r  adjr?  r@  r6  r  r   r   rt   s               r/   r   Decimal.exp  s6    ? lG w/J #L K "4=  LLmmo ::?sSgll1na-?)@%AA"1c7<<>:CZZ1_s30@0BA/E+F'G!G"1c7==?1+<=CZZ1_r"1cC1Io&;aR@CZZ1_r!t"1c1Q3i!A6C $B66266qww!|B
 E"11
Ab3s5z?1#4Q#6778
	  #1c%j#6C '')((9hhw#
r1   c                     g)NTr-   r   s    r/   is_canonicalDecimal.is_canonical  s     r1   c                 $    U R                   (       + $ r,   )r   r   s    r/   	is_finiteDecimal.is_finite  s     ####r1   c                      U R                   S:H  $ )Nr   r   r   s    r/   r,  Decimal.is_infinite      yyCr1   c                      U R                   S;   $ )Nr   rz  r   s    r/   r  Decimal.is_nan  s    yyJ&&r1   c                     U R                   (       d  U (       d  gUc
  [        5       nUR                  U R                  5       :*  $ NF)r   r   r{   r   r>  s     r/   	is_normalDecimal.is_normal  s1    4? lG||t}}..r1   c                      U R                   S:H  $ )NrH   rz  r   s    r/   r   Decimal.is_qnan  r|  r1   c                      U R                   S:H  $ Nr2   )rJ   r   s    r/   	is_signedDecimal.is_signed  s    zzQr1   c                      U R                   S:H  $ )Nr   rz  r   s    r/   r   Decimal.is_snan  r|  r1   c                     U R                   (       d  U (       d  gUc
  [        5       nU R                  5       UR                  :  $ r  )r   r   r   r{   r>  s     r/   is_subnormalDecimal.is_subnormal  s1    4? lG}}--r1   c                 P    U R                   (       + =(       a    U R                  S:H  $ r   r   r   s    r/   is_zeroDecimal.is_zero  s    ###8		S(88r1   c                    U R                   [        U R                  5      -   S-
  nUS:  a  [        [        US-  S-  5      5      S-
  $ US::  a   [        [        SU-
  S-  S-  5      5      S-
  $ [	        U 5      nUR
                  UR                  pCUS:X  a9  [        USU* -  -
  5      n[        U5      n[        U5      [        U5      -
  XV:  -
  $ U[        [        SU* -  U-
  5      5      -   S-
  $ )Nr2      r  r  r   r(   r   r   rK   r   r   r   r   r7   rq  r?  r@  r6  numdens          r/   _ln_exp_boundDecimal._ln_exp_bound  s     ii#dii.(1,!8s3r62:'!++"9sBsFB;?+,q00d^vvrvv1!8aQBh-Ca&Cs8c#h&#)443s2r6A:''!++r1   c           
         Uc
  [        5       nU R                  US9nU(       a  U$ U (       d  [        $ U R                  5       S:X  a  [        $ U [
        :X  a  [        $ U R                  S:X  a  UR                  [        S5      $ [        U 5      nUR                  UR                  pTUR                  nX`R                  5       -
  S-   n [        XEU5      nUSS[!        [#        [%        U5      5      5      U-
  S-
  -  -  -  (       a  OUS-  nME  ['        [        US:  5      [#        [%        U5      5      U* 5      nUR)                  5       nUR+                  [,        5      n	UR/                  U5      nXl        U$ )	Nr   r2   zln of a negative valuer   r   r  r   r(   )r   r   _NegativeInfinityr   	_Infinityr  r^  rJ   r   r
   r   r   r   ru   r  _dlogr   r   r   rI   r=  r>  r   rE  rt   
r7   r8   rN   r?  r@  r6  r  r3  r   rt   s
             r/   ln
Decimal.ln,  sd    ? lG w/J $$ " 4<L ::?''(8(@B B d^vvrvv1LL ''))A-!'E"s3s5z?3A5a7889aKF  s57|SU_vgF'')((9hhw#
r1   c                    U R                   [        U R                  5      -   S-
  nUS:  a  [        [        U5      5      S-
  $ US::  a  [        [        SU-
  5      5      S-
  $ [	        U 5      nUR
                  UR                  pCUS:X  a?  [        USU* -  -
  5      n[        SU-  5      n[        U5      [        U5      -
  XV:  -
  S-   $ [        SU* -  U-
  5      n[        U5      U-   US:  -
  S-
  $ )	Nr2   r  r   r(   r     r   231r  r  s          r/   r  Decimal._log10_exp_bound^  s     ii#dii.(1,!8s3x=?""9s2c6{#A%%d^vvrvv1!8aQBh-Cc!e*Cs8c#h&#)4q88"qb&(m3x!|sU{+a//r1   c           
         Uc
  [        5       nU R                  US9nU(       a  U$ U (       d  [        $ U R                  5       S:X  a  [        $ U R
                  S:X  a  UR                  [        S5      $ U R                  S   S:X  a[  U R                  SS  S[        U R                  5      S-
  -  :X  a/  [        U R                  [        U R                  5      -   S-
  5      nO[        U 5      nUR                  UR                  pTUR                  nX`R!                  5       -
  S-   n [#        XEU5      nUSS	[        [%        ['        U5      5      5      U-
  S-
  -  -  -  (       a  OUS
-  nME  [)        [        US:  5      [%        ['        U5      5      U* 5      nUR+                  5       nUR-                  [.        5      n	UR1                  U5      nXl        U$ )Nr   r2   zlog10 of a negative valuer(   r`  r   r   r   r  r   )r   r   r  r   r  rJ   r   r
   rK   r   r   r   r   r   r   ru   r  _dlog10r   r   rI   r=  r>  r   rE  rt   r  s
             r/   log10Decimal.log10|  s    ? lG w/J $$ " ::?''(8(CE E 99Q<3499QR=CTYY!9K4L#L$))c$))n4q89C $B66266qA ,,..q0Ff-Ab3s3u:#7#9!#;<<=!  #3uQw<SZ6'JC'')((9hhw#
r1   c                    U R                  US9nU(       a  U$ Uc
  [        5       nU R                  5       (       a  [        $ U (       d  UR	                  [
        SS5      $ [        U R                  5       5      nUR                  U5      $ )Nr   zlogb(0)r2   )	r   r   r   r  r   r   r   r   rE  rF  s      r/   logbDecimal.logb  s}     w/J? lG  ''	1EE
 dmmo&xx  r1   c                 |    U R                   S:w  d  U R                  S:w  a  gU R                   H  nUS;  d  M    g   g)Nr(   F01T)rJ   r   rK   )r7   digs     r/   
_islogicalDecimal._islogical  s9     ::?dii1n99C$  r1   c                     UR                   [        U5      -
  nUS:  a	  SU-  U-   nOUS:  a  X!R                   * S  nUR                   [        U5      -
  nUS:  a  SU-  U-   nX#4$ US:  a  X1R                   * S  nX#4$ )Nr(   r   )ru   r   )r7   r8   opaopbdifs        r/   _fill_logicalDecimal._fill_logical  s    llSX%7c'C-C1W||mn%CllSX%7c'C-C x 1W||mn%Cxr1   c                    Uc
  [        5       n[        USS9nU R                  5       (       a  UR                  5       (       d  UR                  [        5      $ U R                  X R                  UR                  5      u  p4SR                  [        X45       VVs/ s H%  u  pV[        [        U5      [        U5      -  5      PM'     snn5      n[        SUR                  S5      =(       d    SS5      $ s  snnf NTr  r   r(   r   r   r  r  r   r
   r  rK   r   zipr   r   rI   r   r7   r   r8   r  r  r  br   s           r/   logical_andDecimal.logical_and      ? lGud3  (8(8(:(:''(899 ''EJJG
 CE#c!fSVm,EF6==#5#<a@@ F   ,C1
c                 p    Uc
  [        5       nU R                  [        SSUR                  -  S5      U5      $ )Nr(   r`  )r   logical_xorrI   ru   r>  s     r/   logical_invertDecimal.logical_invert  s9    ? lG 03w||3CA F ') 	)r1   c                    Uc
  [        5       n[        USS9nU R                  5       (       a  UR                  5       (       d  UR                  [        5      $ U R                  X R                  UR                  5      u  p4SR                  [        X45       VVs/ s H%  u  pV[        [        U5      [        U5      -  5      PM'     snn5      n[        SUR                  S5      =(       d    SS5      $ s  snnf r  r  r  s           r/   
logical_orDecimal.logical_or   r  r  c                    Uc
  [        5       n[        USS9nU R                  5       (       a  UR                  5       (       d  UR                  [        5      $ U R                  X R                  UR                  5      u  p4SR                  [        X45       VVs/ s H%  u  pV[        [        U5      [        U5      -  5      PM'     snn5      n[        SUR                  S5      =(       d    SS5      $ s  snnf r  r  r  s           r/   r  Decimal.logical_xor  r  r  c                 &   [        USS9nUc
  [        5       nU R                  (       d  UR                  (       ay  U R                  5       nUR                  5       nU(       d  U(       aK  US:X  a  US:X  a  U R	                  U5      $ US:X  a  US:X  a  UR	                  U5      $ U R                  X5      $ U R                  5       R                  UR                  5       5      nUS:X  a  U R                  U5      nUS:X  a  UnOU nUR	                  U5      $ rE  	r  r   r   r   rE  r   rC  r   rG  rH  s          r/   max_magDecimal.max_mag"  s    ud3? lGu00 BBR7rQw99W--7rQw ::g..''77MMO  !126""5)A7CCxx  r1   c                 &   [        USS9nUc
  [        5       nU R                  (       d  UR                  (       ay  U R                  5       nUR                  5       nU(       d  U(       aK  US:X  a  US:X  a  U R	                  U5      $ US:X  a  US:X  a  UR	                  U5      $ U R                  X5      $ U R                  5       R                  UR                  5       5      nUS:X  a  U R                  U5      nUS:X  a  U nOUnUR	                  U5      $ rE  r  rH  s          r/   min_magDecimal.min_mag@  s    ud3? lGu00 BBR7rQw99W--7rQw ::g..''77MMO  !126""5)A7CCxx  r1   c                    Uc
  [        5       nU R                  US9nU(       a  U$ U R                  5       S:X  a  [        $ U R                  5       S:X  a(  [	        SSUR
                  -  UR                  5       5      $ UR                  5       nUR                  [        5        UR                  5         U R                  U5      nX0:w  a  U$ U R                  [	        SSUR                  5       S-
  5      U5      $ )Nr   r   r2   r(   rs   r`  )r   r   r   r  rI   ru   r  r   r>  r   _ignore_all_flagsrE  rZ  rf  r7   r8   rN   new_selfs       r/   
next_minusDecimal.next_minus^  s    ? lGw/J#$$"#As7<<'7HH,,.k*!!#99W%O||,QW]]_Q5FG#% 	%r1   c                    Uc
  [        5       nU R                  US9nU(       a  U$ U R                  5       S:X  a  [        $ U R                  5       S:X  a(  [	        SSUR
                  -  UR                  5       5      $ UR                  5       nUR                  [        5        UR                  5         U R                  U5      nX0:w  a  U$ U R                  [	        SSUR                  5       S-
  5      U5      $ )Nr   r2   r   rs   r(   r`  )r   r   r   r  rI   ru   r  r   r>  r   r  rE  rW  rf  r  s       r/   	next_plusDecimal.next_plusu  s    ? lGw/J"##As7<<'7HH,,.m,!!#99W%O||,QW]]_Q5FG#% 	%r1   c                    [        USS9nUc
  [        5       nU R                  X5      nU(       a  U$ U R                  U5      nUS:X  a  U R	                  U5      $ US:X  a  U R                  U5      nOU R                  U5      nUR                  5       (       aM  UR                  [        SUR                  5        UR                  [        5        UR                  [        5        U$ UR                  5       UR                  :  ap  UR                  [        5        UR                  [         5        UR                  [        5        UR                  [        5        U(       d  UR                  ["        5        U$ )NTr  r(   r   z Infinite result from next_toward)r  r   r   r   rm  r  r  r   r   r   rJ   r   r   r   r{   r   r   r	   )r7   r   r8   rN   
comparisons        r/   next_towardDecimal.next_toward  s.    ud3? lGu.JYYu%
?>>%((..)C//'*C ??  !C!$,   )  ) 
 \\^gll*  +  +  )  ) $$W-
r1   c                 t   U R                  5       (       a  gU R                  5       (       a  gU R                  5       nUS:X  a  gUS:X  a  gU R                  5       (       a  U R                  (       a  ggUc
  [        5       nU R                  US	9(       a  U R                  (       a  g
gU R                  (       a  gg)Nr   r3  r2   z	+Infinityr   z	-Infinityz-Zeroz+Zeror   z
-Subnormalz
+Subnormalz-Normalz+Normal)r   r   r   r  rJ   r   r  )r7   r8   infs      r/   number_classDecimal.number_class  s     <<>><<>> !8"9<<>>zz? lGW-zz##::r1   c                     [        S5      $ Nr  r  r   s    r/   radixDecimal.radix  s    r{r1   c                    Uc
  [        5       n[        USS9nU R                  X5      nU(       a  U$ UR                  S:w  a  UR	                  [
        5      $ UR                  * [        U5      s=::  a  UR                  ::  d  O  UR	                  [
        5      $ U R                  5       (       a  [        U 5      $ [        U5      nU R                  nUR                  [        U5      -
  nUS:  a	  SU-  U-   nOUS:  a  XV* S  nXTS  US U -   n[        U R                  UR                  S5      =(       d    SU R                  5      $ NTr  r(   r   r   r  r   r   r   r
   ru   r   r   r   rK   r   rI   rJ   r   )r7   r   r8   rN   torotrotdigtopadrotateds           r/   rotateDecimal.rotate  s$   ? lGud3u.J::?''(899U;w||;''(8994=  E
s6{*19Y'FQYFG_F .6&5>1

 's 3 :sDIIG 	Gr1   c                 L   Uc
  [        5       n[        USS9nU R                  X5      nU(       a  U$ UR                  S:w  a  UR	                  [
        5      $ SUR                  UR                  -   -  nSUR                  UR                  -   -  nU[        U5      s=::  a  U::  d  O  UR	                  [
        5      $ U R                  5       (       a  [        U 5      $ [        U R                  U R                  U R                  [        U5      -   5      nUR                  U5      nU$ )NTr  r(   r  r   )r   r  r   r   r   r
   rv   ru   r   r   r   rI   rJ   rK   rE  )r7   r   r8   rN   liminflimsupr   s          r/   scalebDecimal.scaleb	  s    ? lGud3u.J::?''(899w||gll23w||gll23#e*..''(8994= TZZDIIE
4JKFF7Or1   c                    Uc
  [        5       n[        USS9nU R                  X5      nU(       a  U$ UR                  S:w  a  UR	                  [
        5      $ UR                  * [        U5      s=::  a  UR                  ::  d  O  UR	                  [
        5      $ U R                  5       (       a  [        U 5      $ [        U5      nU R                  nUR                  [        U5      -
  nUS:  a	  SU-  U-   nOUS:  a  XV* S  nUS:  a  US U nOUSU-  -   nXrR                  * S  n[        U R                  UR                  S5      =(       d    SU R                  5      $ r  r  )r7   r   r8   rN   r  r  r  shifteds           r/   rh  Decimal.shift"  s@   ? lGud3u.J::?''(899U;w||;''(8994=  E
s6{*19Y'FQYFG_F 19VenGs5y(G||mn-G

$+NN3$7$>3		K 	Kr1   c                 2    U R                   [        U 5      44$ r,   )	__class__r   r   s    r/   
__reduce__Decimal.__reduce__I  s    T--r1   c                 ^    [        U 5      [        L a  U $ U R                  [        U 5      5      $ r,   typer   r  r   r   s    r/   __copy__Decimal.__copy__L  &    : K~~c$i((r1   c                 ^    [        U 5      [        L a  U $ U R                  [        U 5      5      $ r,   r  )r7   memos     r/   __deepcopy__Decimal.__deepcopy__Q  r  r1   c                 \   Uc
  [        5       n[        XS9nU R                  (       aI  [        U R                  U5      n[        U R                  5       5      nUS   S:X  a  US-  n[        XVU5      $ US   c  SS/UR                     US'   US   S:X  a.  [        U R                  U R                  U R                  S-   5      n UR                  nUS   nUbo  US   S;   a  U R                  US	-   U5      n OPUS   S
;   a  U R                  U* U5      n O3US   S;   a*  [        U R                  5      U:  a  U R                  X5      n U (       d+  U R                  S:  a  US   S
;   a  U R                  SU5      n U (       d  US   (       a  U R                  (       a  Sn	OU R                  n	U R                  [        U R                  5      -   n
US   S;   a  U (       d	  Ub  S	U-
  nO3S	nO0US   S
;   a  U
nO$US   S;   a  U R                  S::  a	  U
S:  a  U
nOS	nWS:  a  SnSU* -  U R                  -   nOkU[        U R                  5      :  a+  U R                  SU[        U R                  5      -
  -  -   nSnO'U R                  S U =(       d    SnU R                  US  nX-
  n[!        XXU5      $ )N)_localeconvr  %gGr   	precisioneEr2   zfF%gGr(   no_neg_0r4  r   r   )r   _parse_format_specifierr   _format_signrJ   r   rC  _format_alignr|   rI   rK   r   rt   r4  rR  r   _format_number)r7   	specifierr8   r  specr[   bodyrt   r	  adjusted_signr9  r:  r   r   r   s                  r/   
__format__Decimal.__format__X  s    ? lG&yJ 

D1Dt}}'DF|s" T22 <:g&6&67DL <3#DJJ		499Q;GD ##%	 F|t#{{9Q;9f&}}iZ:f%#dii.9*D{{97 		A$v,%*?==H-DZ(TZZM JJM YYTYY/
<4I1y=&\U"!H&\T!yyA~*r/% a<GXI2HDII&ii#xDII'>"??GHii	*1cGyy+H! mhTJJr1   )r   rK   r   rJ   )r   N)NNr,   )FN)TN)r<   r=   r>   r?   	__slots__r   classmethodr   r   r   r   r   r   r   r   r  r  r  r  r  r  r%  r   r/  r;  r?  rG  rJ  rN  rW  __radd__rZ  r]  rc  __rmul__rk  rq  rt  r{  r~  r  r  r  r  r  r  r  	__trunc__propertyr  r  r  r  rL   rE  r  r  r  r  r  r  r  r  dictr  r  r  r  r  r  r  r  r"  r'  r  r-  rR  r4  r8  r  to_integralrB  rQ  r)  r  r  r   rV  rZ  rG  rf  rC  rD  rm  r   rt  rw  r,  r  r  r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rh  r  r  r  r  r@   r-   r1   r/   r   r     s    7IT@l * *X@B4-'@%$%$%)$(4O0d+
2/h7!,!*,Tl HB46n H9!vB8"#H764I!V/897 I   $
ZL'--+++ # &**&" 	<6|24*/XS4jv?pVp4@2;z' 8D.:." $KaF(!T !D%2
4FR	"KO=IV$ '/  .9,20d0<1f!<A")A"A"!<!<%.%.,\(TGB2$KN.)
)TKr1   r   c                 h    [         R                  [        5      nXl        Xl        X$l        X4l        U$ r,   )r   r   r   rJ   rK   r   r   )r[   coefficientr  specialr7   s        r/   rI   rI     s,     >>'"DJIIKr1   c                   &    \ rS rSrS rS rS rSrg)r   i  c                 .    UR                  5       U l        g r,   )r   r   )r7   r   s     r/   __init___ContextManager.__init__  s    &++-r1   c                 b    [        5       U l        [        U R                  5        U R                  $ r,   )r   saved_contextr   r   r   s    r/   	__enter___ContextManager.__enter__  s&    '\4##$r1   c                 .    [        U R                  5        g r,   )r   r'  )r7   tvtbs       r/   __exit___ContextManager.__exit__  s    4%%&r1   )r   r'  N)r<   r=   r>   r?   r$  r(  r.  r@   r-   r1   r/   r   r     s    . 'r1   r   c                      \ rS rSr   SUS jrS rS rS rS rS r	S	 r
S
 rS rS rS r\rSVS jrS rS rS rSrS rS rS rSWS jrS rS rS rS rS rS rS rS r S r!S r"S  r#S! r$S" r%S# r&S$ r'S% r(S& r)S' r*S( r+S) r,S* r-S+ r.S, r/S- r0S. r1S/ r2S0 r3S1 r4S2 r5S3 r6S4 r7S5 r8S6 r9S7 r:S8 r;S9 r<S: r=S; r>S< r?S= r@S> rAS? rBS@ rCSA rDSB rESC rFSD rGSVSE jrHSF rISG rJSH rKSI rLSJ rMSK rNSL rOSM rPSN rQSO rRSP rSSQ rTSR rUSS rV\VrWSTrXg)Xr   i  Nc
                   ^^  [         n
Ub  UOW
R                  U l        Ub  UOW
R                  U l        Ub  UOW
R                  U l        Ub  UOW
R
                  U l        Ub  UOW
R                  U l        Ub  UOW
R                  U l        U	c  / U l        OXl        Tc   W
R                  R                  5       U l	        O>[        T[        5      (       d"  [        U4S j[        T-    5       5      U l	        OTU l	        Tc   [        R                  [        S5      U l        g [        T[        5      (       d"  [        U4S j[        T-    5       5      U l        g TU l        g ! [         a     GNef = f)Nc              3   B   >#    U  H  o[        UT;   5      4v   M     g 7fr,   r   ).0r  r   s     r/   	<genexpr>#Context.__init__.<locals>.<genexpr>       M<Lq#a5j/2<L   r(   c              3   B   >#    U  H  o[        UT;   5      4v   M     g 7fr,   r3  )r4  r  r~   s     r/   r5  r6    r7  r8  )r   	NameErrorru   rt   r{   rv   r|   r}   _ignored_flagsr   r   r   r  r  fromkeysr~   )r7   ru   rt   r{   rv   r|   r}   r~   r   r;  dcs          ``  r/   r$  Context.__init__  s&   
	B !,D"''	$,$8bkk ,D"''	 ,D"''	$,$8bkk#/URXX
!"$D"0=DJE4((MHu<LMMDJDJ=x3DJE4((MHu<LMMDJDJ7  		s   E" "
E0/E0c                    [        U[        5      (       d  [        SU-  5      eUS:X  a  X$:  a  [        SXXB4-  5      eO6US:X  a  X#:  a  [        SXXB4-  5      eOX#:  d  X$:  a  [        SXXB4-  5      e[        R                  XU5      $ )Nz%s must be an integer-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)r   r   r   r   r   __setattr__)r7   namer   vminvmaxs        r/   _set_integer_checkContext._set_integer_check  s    %%%3d:;;6>| !BdRVE^!^__ U]| !BdRVE^!^__  |u| !ATQUD]!]^^!!$e44r1   c                     [        U[        5      (       d  [        SU-  5      eU H  nU[        ;  d  M  [	        SU-  5      e   [         H  nX2;  d  M
  [	        SU-  5      e   [
        R                  XU5      $ )Nz%s must be a signal dictz%s is not a valid signal dict)r   r  r   r  KeyErrorr   rA  )r7   rB  r   r   s       r/   _set_signal_dictContext._set_signal_dict  sy    !T""6:;;C(?>BCC  C8>BCC  !!$a00r1   c                    US:X  a  U R                  XSS5      $ US:X  a  U R                  XSS5      $ US:X  a  U R                  XSS5      $ US:X  a  U R                  XSS5      $ US	:X  a  U R                  XSS5      $ US
:X  a.  U[        ;  a  [        SU-  5      e[        R	                  XU5      $ US:X  d  US:X  a  U R                  X5      $ US:X  a  [        R	                  XU5      $ [        SU-  5      e)Nru   r2   r  r{   r@  r(   rv   r|   r}   rt   z%s: invalid rounding moder~   r   r;  z.'decimal.Context' object has no attribute '%s')rE  _rounding_modesr   r   rA  rI  AttributeError)r7   rB  r   s      r/   rA  Context.__setattr__%  s   6>**45AAV^**4BBV^**45AAZ**41==W_**41==ZO+   ;e CDD%%d%88W_((55%%%%d%88 @4GI Ir1   c                     [        SU-  5      e)Nz%s cannot be deleted)rM  )r7   rB  s     r/   __delattr__Context.__delattr__>  s    3d:;;r1   c           	         U R                   R                  5        VVs/ s H  u  pU(       d  M  UPM     nnnU R                  R                  5        VVs/ s H  u  pU(       d  M  UPM     nnnU R                  U R                  U R
                  U R                  U R                  U R                  U R                  X444$ s  snnf s  snnf r,   )
r~   r   r   r  ru   rt   r{   rv   r|   r}   )r7   sigr,  r~   r   s        r/   r  Context.__reduce__B  s    #'::#3#3#5;#5#5;#'::#3#3#5;#5#5;DMM499dii

E:; 	; <;s   C C C&Cc                    / nUR                  S[        U 5      -  5        U R                  R                  5        VVs/ s H  u  p#U(       d  M  UR                  PM     nnnUR                  SSR                  U5      -   S-   5        U R                  R                  5        VVs/ s H  u  pSU(       d  M  UR                  PM     nnnUR                  SSR                  U5      -   S-   5        SR                  U5      S-   $ s  snnf s  snnf )NzrContext(prec=%(prec)d, rounding=%(rounding)s, Emin=%(Emin)d, Emax=%(Emax)d, capitals=%(capitals)d, clamp=%(clamp)dzflags=[, ]ztraps=[))r   varsr~   r   r<   r   r   )r7   r  r   r,  namesr+  s         r/   r/  Context.__repr__I  s    	 # : 	 )-

(8(8(:@(:a(:@	TYYu--34(,

(8(8(:@(:a(:@	TYYu--34yy|c!!	 A@s   DD$D5Dc                 H    U R                    H  nSU R                   U'   M     g r  )r~   r7   flags     r/   r   Context.clear_flagsV      JJD DJJt r1   c                 H    U R                    H  nSU R                   U'   M     g r  )r   r]  s     r/   clear_trapsContext.clear_traps[  r`  r1   c                     [        U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  5	      nU$ r,   )
r   ru   rt   r{   rv   r|   r}   r~   r   r;  r7   ncs     r/   r=  Context._shallow_copy`  sM    TYYtyy$))]]DJJ

DJJ((* 	r1   c                    [        U R                  U R                  U R                  U R                  U R
                  U R                  U R                  R                  5       U R                  R                  5       U R                  5	      nU$ r,   )r   ru   rt   r{   rv   r|   r}   r~   r   r   r;  re  s     r/   r   Context.copyg  s\    TYYtyy$))]]DJJZZ__&

(9((* 	r1   c                     [         R                  X5      nX@R                  ;   a  U" 5       R                  " U /UQ76 $ SU R                  U'   U R
                  U   (       d  U" 5       R                  " U /UQ76 $ U" U5      er  )_condition_mapr   r;  r9   r~   r   )r7   	conditionexplanationr.   errors        r/   r   Context._raise_errorp  su     ""98'''7>>$...

5zz% ;%%d2T22 K  r1   c                 (    U R                   " [        6 $ r,   )_ignore_flagsr  r   s    r/   r  Context._ignore_all_flags  s    !!8,,r1   c                 R    U R                   [        U5      -   U l         [        U5      $ r,   )r;  r   )r7   r~   s     r/   rq  Context._ignore_flags  s%      $22T%[@E{r1   c                     U(       a#  [        US   [        [        45      (       a  US   nU H  nU R                  R	                  U5        M      g r  )r   r   r   r;  remove)r7   r~   r^  s      r/   _regard_flagsContext._regard_flags  s@    Za5,77!HED&&t, r1   c                 L    [        U R                  U R                  -
  S-   5      $ r  )r   r{   ru   r   s    r/   rf  Context.Etiny      499tyy(1,--r1   c                 L    [        U R                  U R                  -
  S-   5      $ r  )r   rv   ru   r   s    r/   r  Context.Etop  r{  r1   c                 *    U R                   nXl         U$ r,   )rt   )r7   r  rt   s      r/   r>  Context._set_rounding  s     ==r1   c                 t   [        U[        5      (       a/  XR                  5       :w  d  SU;   a  U R                  [        S5      $ [        XS9nUR                  5       (       aF  [        UR                  5      U R                  U R                  -
  :  a  U R                  [        S5      $ UR                  U 5      $ )Nr   zAtrailing or leading whitespace and underscores are not permitted.r   zdiagnostic info too long in NaN)r   r   r   r   r   r   r   r   rK   ru   r}   rE  )r7   r  r   s      r/   create_decimalContext.create_decimal  s     c3SIIK%73#:$$%5&FG G C&88::#aff+		DJJ(>>$$%5%FH Hvvd|r1   c                 N    [         R                  U5      nUR                  U 5      $ r,   )r   r   rE  )r7   r   r   s      r/   create_decimal_from_float!Context.create_decimal_from_float  s"     q!vvd|r1   c                 4    [        USS9nUR                  U S9$ rY  )r  rN  r7   r  s     r/   r   Context.abs  s!    $ 1d+yyy&&r1   c                 f    [        USS9nUR                  X S9nU[        L a  [        SU-  5      eU$ NTr  r   Unable to convert %s to Decimal)r  rW  r   r   r7   r  r  rp  s       r/   addContext.add  s>     1d+IIaI&=ABBHr1   c                 6    [        UR                  U 5      5      $ r,   )r   rE  r  s     r/   _applyContext._apply  s    166$<  r1   c                 b    [        U[        5      (       d  [        S5      eUR                  5       $ )Nz,canonical requires a Decimal as an argument.)r   r   r   rV  r  s     r/   rV  Context.canonical  s)     !W%%JKK{{}r1   c                 4    [        USS9nUR                  X S9$ rY  )r  r  r7   r  r  s      r/   r  Context.compare  s"    B 1d+yyy))r1   c                 4    [        USS9nUR                  X S9$ rY  )r  rZ  r  s      r/   rZ  Context.compare_signal7  s%    @ 1d+00r1   c                 8    [        USS9nUR                  U5      $ r  )r  rG  r  s      r/   rG  Context.compare_totalZ  s    4 1d+q!!r1   c                 8    [        USS9nUR                  U5      $ r  )r  rf  r  s      r/   rf  Context.compare_total_magw  s!    
 1d+""1%%r1   c                 6    [        USS9nUR                  5       $ r  )r  rC  r  s     r/   rC  Context.copy_abs  s     1d+zz|r1   c                 ,    [        USS9n[        U5      $ r  )r  r   r  s     r/   copy_decimalContext.copy_decimal  s     1d+qzr1   c                 6    [        USS9nUR                  5       $ r  )r  rD  r  s     r/   rD  Context.copy_negate  s     1d+}}r1   c                 8    [        USS9nUR                  U5      $ r  )r  rm  r  s      r/   rm  Context.copy_sign  s    * 1d+{{1~r1   c                 f    [        USS9nUR                  X S9nU[        L a  [        SU-  5      eU$ r  )r  rk  r   r   r  s       r/   divideContext.divide  s>    < 1d+MM!M*=ABBHr1   c                 f    [        USS9nUR                  X S9nU[        L a  [        SU-  5      eU$ r  )r  r  r   r   r  s       r/   
divide_intContext.divide_int  s>      1d+NN1N+=ABBHr1   c                 f    [        USS9nUR                  X S9nU[        L a  [        SU-  5      eU$ r  )r  r{  r   r   r  s       r/   rg  Context.divmod  s>     1d+LLL)=ABBHr1   c                 4    [        USS9nUR                  U S9$ rY  )r  r   r  s     r/   r   Context.exp  s!    * !T*uuTu""r1   c                 6    [        USS9nUR                  X#U S9$ rY  )r  r  )r7   r  r  r@  s       r/   r  Context.fma'  s#    ( 1d+uuQ4u((r1   c                 b    [        U[        5      (       d  [        S5      eUR                  5       $ )Nz/is_canonical requires a Decimal as an argument.)r   r   r   rt  r  s     r/   rt  Context.is_canonical>  s*     !W%%MNN~~r1   c                 6    [        USS9nUR                  5       $ r  )r  rw  r  s     r/   rw  Context.is_finiteK  s    & 1d+{{}r1   c                 6    [        USS9nUR                  5       $ r  )r  r,  r  s     r/   r,  Context.is_infinitea  s     1d+}}r1   c                 6    [        USS9nUR                  5       $ r  )r  r  r  s     r/   r  Context.is_nanp  s     1d+xxzr1   c                 4    [        USS9nUR                  U S9$ rY  )r  r  r  s     r/   r  Context.is_normal  s!    ( 1d+{{4{((r1   c                 6    [        USS9nUR                  5       $ r  )r  r   r  s     r/   r   Context.is_qnan  s     1d+yy{r1   c                 6    [        USS9nUR                  5       $ r  )r  r  r  s     r/   r  Context.is_signed  s     1d+{{}r1   c                 6    [        USS9nUR                  5       $ r  )r  r   r  s     r/   r   Context.is_snan  s     1d+yy{r1   c                 4    [        USS9nUR                  U S9$ rY  )r  r  r  s     r/   r  Context.is_subnormal  s!    & 1d+~~d~++r1   c                 6    [        USS9nUR                  5       $ r  )r  r  r  s     r/   r  Context.is_zero  s     1d+yy{r1   c                 4    [        USS9nUR                  U S9$ rY  )r  r  r  s     r/   r  
Context.ln  s!    & 1d+ttDt!!r1   c                 4    [        USS9nUR                  U S9$ rY  )r  r  r  s     r/   r  Context.log10  s!    2 1d+wwtw$$r1   c                 4    [        USS9nUR                  U S9$ rY  )r  r  r  s     r/   r  Context.logb   s!    . 1d+vvdv##r1   c                 4    [        USS9nUR                  X S9$ rY  )r  r  r  s      r/   r  Context.logical_and:  !    0 1d+}}Q}--r1   c                 4    [        USS9nUR                  U S9$ rY  )r  r  r  s     r/   r  Context.logical_invertU  s$      1d+--r1   c                 4    [        USS9nUR                  X S9$ rY  )r  r  r  s      r/   r  Context.logical_orh  s!    0 1d+||A|,,r1   c                 4    [        USS9nUR                  X S9$ rY  )r  r  r  s      r/   r  Context.logical_xor  r  r1   c                 4    [        USS9nUR                  X S9$ rY  )r  rQ  r  s      r/   rQ  Context.max  !    0 1d+uuQu%%r1   c                 4    [        USS9nUR                  X S9$ rY  )r  r  r  s      r/   r  Context.max_mag  !     1d+yyy))r1   c                 4    [        USS9nUR                  X S9$ rY  )r  r)  r  s      r/   r)  Context.min  r  r1   c                 4    [        USS9nUR                  X S9$ rY  )r  r  r  s      r/   r  Context.min_mag  r  r1   c                 4    [        USS9nUR                  U S9$ rY  )r  rG  r  s     r/   minusContext.minus  !     1d+yyy&&r1   c                 f    [        USS9nUR                  X S9nU[        L a  [        SU-  5      eU$ r  )r  rc  r   r   r  s       r/   multiplyContext.multiply  s>    2 1d+IIaI&=ABBHr1   c                 4    [        USS9nUR                  U S9$ rY  )r  r  r  s     r/   r  Context.next_minus'  s!    " 1d+||D|))r1   c                 4    [        USS9nUR                  U S9$ rY  )r  r  r  s     r/   r  Context.next_plus;  s!    " 1d+{{4{((r1   c                 4    [        USS9nUR                  X S9$ rY  )r  r  r  s      r/   r  Context.next_towardO  s"    @ 1d+}}Q}--r1   c                 4    [        USS9nUR                  U S9$ rY  )r  r'  r  s     r/   r'  Context.normalizer  s!    * 1d+{{4{((r1   c                 4    [        USS9nUR                  U S9$ rY  )r  r  r  s     r/   r  Context.number_class  s"    ^ 1d+~~d~++r1   c                 4    [        USS9nUR                  U S9$ rY  )r  rJ  r  s     r/   plusContext.plus  r  r1   c                 h    [        USS9nUR                  X#U S9nU[        L a  [        SU-  5      eU$ r  )r  r  r   r   )r7   r  r  r  rp  s        r/   powerContext.power  sA    R 1d+IIaI.=ABBHr1   c                 4    [        USS9nUR                  X S9$ rY  )r  r  r  s      r/   r  Context.quantize  s"    n 1d+zz!z**r1   c                     [        S5      $ r  r  r   s    r/   r  Context.radixW  s     r{r1   c                 f    [        USS9nUR                  X S9nU[        L a  [        SU-  5      eU$ r  )r  r  r   r   r  s       r/   ri  Context.remainder_  s>    > 1d+IIaI&=ABBHr1   c                 4    [        USS9nUR                  X S9$ rY  )r  r  r  s      r/   r  Context.remainder_near  s$    > 1d+00r1   c                 4    [        USS9nUR                  X S9$ rY  )r  r  r  s      r/   r  Context.rotate  s!    4 1d+xxx((r1   c                 8    [        USS9nUR                  U5      $ r  )r  r-  r  s      r/   r-  Context.same_quantum  s    * 1d+~~a  r1   c                 4    [        USS9nUR                  X S9$ rY  )r  r  r  s      r/   r  Context.scaleb  s!      1d+xxx((r1   c                 4    [        USS9nUR                  X S9$ rY  )r  rh  r  s      r/   rh  Context.shift  s!    6 1d+wwqw''r1   c                 4    [        USS9nUR                  U S9$ rY  )r  rB  r  s     r/   rB  Context.sqrt  s!    : 1d+vvdv##r1   c                 f    [        USS9nUR                  X S9nU[        L a  [        SU-  5      eU$ r  )r  rZ  r   r   r  s       r/   subtractContext.subtract-  s>      1d+IIaI&=ABBHr1   c                 4    [        USS9nUR                  U S9$ rY  )r  r?  r  s     r/   r?  Context.to_eng_stringD  s!    2 1d+t,,r1   c                 4    [        USS9nUR                  U S9$ rY  )r  r;  r  s     r/   to_sci_stringContext.to_sci_string`  s!    
 1d+yyy&&r1   c                 4    [        USS9nUR                  U S9$ rY  )r  r8  r  s     r/   r8  Context.to_integral_exacth  s$    6 1d+""4"00r1   c                 4    [        USS9nUR                  U S9$ rY  )r  r  r  s     r/   r  Context.to_integral_value  s$    4 1d+""4"00r1   )	rv   r{   r;  r|   r}   r~   ru   rt   r   )	NNNNNNNNNr,   )r   )Yr<   r=   r>   r?   r$  rE  rI  rA  rP  r  r/  r   rb  r=  r   r  r   r  rq  rw  r  rf  r  r>  r  r  r   r  r  rV  r  rZ  rG  rf  rC  r  rD  rm  r  r  rg  r   r  rt  rw  r,  r  r  r   r  r   r  r  r  r  r  r  r  r  r  rQ  r  r)  r  r  r  r  r  r  r'  r  r  r  r  r  ri  r  r  r-  r  rh  rB  r	  r?  r  r8  r  r  r@   r-   r1   r/   r   r     s   & BFDH&*"H5	1I2<;"!
!
 H!,-- H..&"$'**!"*H!1F":&0#J.*#0). , )." ,,"",%8$4.6.&-6.6&6*"&6*"'"@*()(!.F)00,d'"N`8+t$L 1D):!0)&(<$@.-8'1<1< $Kr1   r   c                   (    \ rS rSrSrSS jrS rSrg)r   i  r[   r   r   Nc                    Uc  S U l         SU l        S U l        g [        U[        5      (       a=  UR
                  U l         [        UR                  5      U l        UR                  U l        g US   U l         US   U l        US   U l        g )Nr(   r2   r   )r[   r   r   r   r   rJ   rK   r   )r7   r   s     r/   r$  _WorkRep.__init__  sq    =DIDHDHw''DI5::DHzzDH aDIQxDHQxDHr1   c                 \    SU R                   < SU R                  < SU R                  < S3$ )N(rV  rX  r  r   s    r/   r/  _WorkRep.__repr__  s    !%DHHdhh??r1   )r   r   r[   r,   )r<   r=   r>   r?   r  r$  r/  r@   r-   r1   r/   r   r     s    $I
 @r1   r   c                    U R                   UR                   :  a  UnU nOU nUn[        [        UR                  5      5      n[        [        UR                  5      5      nUR                   [	        SXR-
  S-
  5      -   nXdR                   -   S-
  U:  a  SUl        Xtl         U=R                  SUR                   UR                   -
  -  -  sl        UR                   Ul         X4$ )Nr   r   r2   r  )r   r   r   r   r)  )rU  rV  ru   tmpr   tmp_len	other_lenr   s           r/   rS  rS    s    
 ww #cgg,GC		N#I
''CGNQ./
/C99q 3&		GGrcgg		)**GiiCG8Or1   c                     U S:X  a  gUS:  a  U SU-  -  $ [        [        U 5      5      n[        U5      [        UR                  S5      5      -
  nX1* :  a  S $ U SU* -  -  $ )Nr(   r  r   )r   r   r   rstrip)rH   r6  str_nval_ns       r/   r  r    si     	Av	
a2q5y CFE
Sc!233rzt2qBF{2r1   c                 h    U S::  d  US::  a  [        S5      eSnX:w  a  XU * U-  -
  S-	  pX:w  a  M  U$ )Nr(   z3Both arguments to _sqrt_nearest should be positive.r2   )r   )rH   r  r  s      r/   _sqrt_nearestr$    sF     	AvaNOOA
&QBE'1*1 &Hr1   c                 >    SU-  X-	  p2USXS-
  -  -  US-  -   U:  -   $ )Nr2   r   r-   )r  rh  r  ro  s       r/   _rshift_nearestr&    s4    
 :qzq1!91%)**r1   c                 >    [        X5      u  p#USU-  US-  -   U:  -   $ )Nr   r2   )rg  )r  r  ro  rp  s       r/   _div_nearestr(    s*    
 !<DA!qsa  r1   c                 8   X-
  nSnXB::  a  [        U5      X$-
  -  U:  d  XB:  a{  [        U5      XB-
  -	  U:  ag  [        X-  S-  U[        X[        X45      -   -  U5      -   5      nUS-  nXB::  a  [        U5      X$-
  -  U:  a  ML  XB:  a  [        U5      XB-
  -	  U:  a  Mg  [	        S[        [        U5      5      -  SU-  -  5      * n[        X45      n[        X5      n[        US-
  SS5       H  n[        X5      [        Xg-  U5      -
  nM     [        Xs-  U5      $ )Nr(   r2   r   r   )r   r(  r$  r&  r   r   r   r  )	r  MLr  RTyshiftwr   s	            r/   _ilogr1    s   < 	
A	A6c!fmq(5SVqs]a'!#!]10E.E+FJJL	Q	 6c!fmq(5SVqs]a' 
SSV_qs#	$$AQ"FQA1Q32fh!::  Qr1   c                 @   US-  n[        [        U 5      5      nX-   X-   S:  -
  nUS:  aT  SU-  nX-   U-
  nUS:  a	  U SU-  -  n O[        U SU* -  5      n [        X5      n[	        U5      n[        Xu-  U5      nXE-  n	OSn[        USU* -  5      n	[        X-   S5      $ Nr   r2   r(   r  r  )r   r   r(  r1  _log10_digits)
r@  r6  r  rA  r   r+  r   log_dlog_10log_tenpowers
             r/   r  r  D  s     FA 	CFA	qsaxA1uECE6QJAQQB'Aaq!UWf-s#ArA2v.*C00r1   c                    US-  n[        [        U 5      5      nX-   X-   S:  -
  nUS:  a6  X-   U-
  nUS:  a	  U SU-  -  n O[        U SU* -  5      n [        U SU-  5      nOSnU(       aI  [        [        [	        U5      5      5      S-
  nX'-   S:  a  [        U[        X'-   5      -  SU-  5      nOSnOSn[        X-   S5      $ r3  )r   r   r(  r1  r   r4  )	r@  r6  r  rA  r   r   r5  r  	f_log_tens	            r/   r  r  f  s     FA
 	CFA	qsaxA 	1uCE6QJAQQB'A aQ  	CAK "9> %Q}QW'=%=r5yIII	 	)3//r1   c                        \ rS rSrS rS rSrg)_Log10Memoizei  c                     SU l         g )N/23025850929940456840179914546843642076011014886r   r   s    r/   r$  _Log10Memoize.__init__  s	    Gr1   c                 D   US:  a  [        S5      eU[        U R                  5      :  a\  Sn SX-   S-   -  n[        [	        [        SU-  U5      S5      5      nXB* S  SU-  :w  a  OUS-  nM@  UR                  S5      S S U l        [        U R                  S US	-    5      $ )
Nr(   zp should be nonnegativer   r  r   r  r   r   r2   )r   r   r   r   r(  r1  r   r   )r7   r  r  r+  r   s        r/   	getdigits_Log10Memoize.getdigits  s     q5677DKK   EO\%1a.#>?&'?c%i/
  !--,Sb1DK4;;t!$%%r1   r>  N)r<   r=   r>   r?   r$  rA  r@   r-   r1   r/   r;  r;    s    H&r1   r;  c                 H   [        X-  U-  5      n[        S[        [        U5      5      -  SU-  -  5      * n[	        X5      nX-  n[        US-
  SS5       H  n[	        XU-   -  Xg-  5      nM     [        US-
  SS5       H  nXS-   -  n[	        XUU-   -  U5      nM     X-   $ )Nr*  r   r2   r(   r   r   )r  r   r   r   r(  r  )	r  r+  r,  r-  r.  r  Mshiftr  r   s	            r/   _iexprE    s    * 	qyA 
SSV_qs#	$$AQATF1Q32QJ4  1Q3BqSfHv.   3Jr1   c           	          US-  n[        SU[        [        U 5      5      -   S-
  5      nX#-   nX-   nUS:  a	  U SU-  -  nO	U SU* -  -  n[        U[	        U5      5      u  px[        USU-  5      n[        [        USU-  5      S5      Xr-
  S-   4$ )Nr   r(   r2   r  i  r   )rQ  r   r   rg  r4  r(  rE  )	r@  r6  r  r  ro  rh  cshiftquotr  s	            r/   rp  rp    s     FA 1s3q6{?Q&'E		A CEz2u9BJv}Q/0ID sBI
&C c2q5)40$(Q,>>r1   c                    [        [        [        U5      5      5      U-   n[        XXE-   S-   5      nX5-
  nUS:  a  Xb-  SU-  -  nO[	        Xb-  SU* -  5      nUS:X  aA  [        [        U 5      5      U-   S:  US:  :X  a  SUS-
  -  S-   SU-
  pX4$ SU-  S-
  U* p X4$ [        XS-   * US-   5      u  p[	        U	S5      n	U
S-  n
X4$ )Nr2   r(   r  )r   r   r   r  r(  rp  )r  r  r  r  r  r  lxcrh  pcr   r   s              r/   r  r     s      	CBLBA A
C DEzVBI#&"uf*-	Qw R\B!#a0ac1ac3 : Qq1"3 :	 21vqs+
UB'q:r1   r  F   5   (      r     r  r   )	r`  2345678rs   c                 f    U S::  a  [        S5      e[        U 5      nS[        U5      -  XS      -
  $ )Nr(   z0The argument to _log10_lb should be nonnegative.r  )r   r   r   )r@  
correctionstr_cs      r/   r   r   *  s:     	AvKLLFEs5z>JQx000r1   c                    [        U [        5      (       a  U $ [        U [        5      (       a  [        U 5      $ U(       a*  [        U [        5      (       a  [        R	                  U 5      $ U(       a  [        SU -  5      e[        $ )Nr  )r   r   r   r   r   r   r   )r   r  allow_floats      r/   r  r  5  sg     %!!%u~z%//!!%((9EABBr1   c                    [        U[        5      (       a  X4$ [        U[        R                  5      (       ar  U R                  (       dJ  [        U R                  [        [        U R                  5      UR                  -  5      U R                  5      n U [        UR                  5      4$ U(       a;  [        U[        R                  5      (       a  UR                  S:X  a  UR                  n[        U[         5      (       aR  [#        5       nU(       a  SUR$                  [&        '   OUR)                  [&        S5        U [        R+                  U5      4$ [,        [,        4$ )Nr(   r2   r   )r   r   _numbersRationalr   rI   rJ   r   r   rK   denominatorr   	numeratorComplexr  r  r   r   r~   r   r   r   r   )r7   r   r   r8   s       r/   r   r   H  s    %!!{ %**++#DJJ$'DII9J9J(J$K$(II/D WU__---
 z%)9)9::uzzQ

%,,-GMM.)  MOW''...>))r1   r  i?B i)ru   rt   r   r~   rv   r{   r|   r}   r   )ru   rt   r   r~   a          # A numeric string consists of:
#    \s*
    (?P<sign>[-+])?              # an optional sign, followed by either...
    (
        (?=\d|\.\d)              # ...a number (with at least one digit)
        (?P<int>\d*)             # having a (possibly empty) integer part
        (\.(?P<frac>\d*))?       # followed by an optional fractional part
        (E(?P<exp>[-+]?\d+))?    # followed by an optional exponent, or...
    |
        Inf(inity)?              # ...an infinity, or...
    |
        (?P<signal>s)?           # ...an (optionally signaling)
        NaN                      # NaN
        (?P<diag>\d*)            # with (possibly empty) diagnostic info.
    )
#    \s*
    \Z
z0*$z50*$z\A
(?:
   (?P<fill>.)?
   (?P<align>[<>=^])
)?
(?P<sign>[-+ ])?
(?P<no_neg_0>z)?
(?P<alt>\#)?
(?P<zeropad>0)?
(?P<minimumwidth>(?!0)\d+)?
(?P<thousands_sep>[,_])?
(?:\.(?P<precision>0|(?!0)\d+))?
(?P<type>[eEfFgGn%])?
\Z
c                    [         R                  U 5      nUc  [        SU -   5      eUR                  5       nUS   nUS   nUS   S LUS'   US   (       a"  Ub  [        SU -   5      eUb  [        SU -   5      eU=(       d    SUS'   U=(       d    SUS'   US	   c  S
US	'   [	        US   =(       d    S5      US'   US   b  [	        US   5      US'   US   S:X  a  US   b	  US   S;   a  SUS'   US   S:X  aK  SUS'   Uc  [
        R                  " 5       nUS   b  [        SU -   5      eUS   US'   US   US'   US   US'   U$ US   c  SUS'   SS/US'   SUS'   U$ )NzInvalid format specifier: fillalignzeropadz7Fill character conflicts with '0' in format specifier: z2Alignment conflicts with '0' in format specifier:  >r[   r   minimumwidthr   r	  r(   r  gGnr2   rH   r  thousands_sepzJExplicit thousands separator conflicts with 'n' type in format specifier: groupingdecimal_pointr   r   r5  )_parse_format_specifier_regexmatchr   	groupdictr   _locale
localeconv)format_specr  r   format_dictrd  re  s         r/   r  r    s   & 	&++K8Ay5CDD ++-K vD E))4D@K	9 68CD E E 24?@ A A+#K !<CK 6"!F #&k.&A&HS"IK;+#&{;'?#@K  ;1$v&+f*=*F'(K$ 6c!!F!,,.K'3 >@KL M M'2?'CO$"-j"9J'2?'CO$  '/+-K(#$a&J'*O$r1   c                    US   nUS   nXC[        U 5      -
  [        U5      -
  -  nUS   nUS:X  a	  X-   U-   nU$ US:X  a	  XP-   U-   nU$ US:X  a	  X-   U-   nU$ US:X  a   [        U5      S-  nUS U U -   U-   XXS  -   nU$ [        S	5      e)
Nri  rd  re  <rh  =^r   zUnrecognised alignment field)r   r   )	r[   r  r  ri  rd  paddingre  r   halfs	            r/   r  r  &  s     'L<D3t9,s4y89GME|w& M 
#$& M 
#$& M 
#7|Q$$&-> M 788r1   c                     SSK JnJn  U (       d  / $ U S   S:X  a$  [        U 5      S:  a  U" U S S U" U S   5      5      $ U S   [        R
                  :X  a  U S S $ [        S5      e)Nr(   )chainrepeatr   r   r  z unrecognised format for grouping)	itertoolsr|  r}  r   rq  CHAR_MAXr   )rl  r|  r}  s      r/   _group_lengthsr  A  sl     (		"	s8}1Xcr]F8B<$899	"))	)};<<r1   c                    US   nUS   n/ n[        U5       H  nUS::  a  [        S5      e[        [        [	        U 5      US5      U5      nUR                  SU[	        U 5      -
  -  X* S  -   5        U S U*  n X&-  nU (       d  US::  a    ONU[	        U5      -  nM     [        [	        U 5      US5      nUR                  SU[	        U 5      -
  -  X* S  -   5        UR                  [        U5      5      $ )Nrk  rl  r(   zgroup length should be positiver2   r   )r  r   r)  rQ  r   r   r   reversed)r   r  	min_widthseprl  groupsrA  s          r/   _insert_thousands_sepr  X  s    " 
CJHFH%6>??CKA.2c1s6{?+fRSk9:!	)q.SX	 & FY*c1s6{?+fRSk9:88HV$%%r1   c                 0    U (       a  gUS   S;   a  US   $ g)Nr   r[   z +r   r-   )is_negativer  s     r/   r  r  }  s#     	f	F|r1   c                 P   [        X5      nU(       d
  US   (       a  US   U-   nUS:w  d	  US   S;   a!  SSSSS.US      nUS	R                  Xc5      -  nUS   S
:X  a  US
-  nUS   (       a  US   [        U5      -
  [        U5      -
  nOSn[        XU5      n[	        XQU-   U5      $ )Naltrm  r(   r  r
  r7  r6  )r7  r6  r  r  z{0}{1:+}r  rf  ri  )r  formatr   r  r  )r  r   r   r   r  r[   echarr  s           r/   r  r    s    $ *D4;(83
ax4<4'#C8fFJ%%e11F|sCI(3x=83t9D		#G9=Gx/66r1   Infz-Infr3  r   r   r,   )F)r(   )r  )FF)r2   ){__all__r<   	__xname____version____libmpdec_version__mathr   numbersr^  syscollectionsr)   _namedtupler   ImportErrorr   r   r   r   r   r   r   r   r%   r&   maxsizer!   r"   r#   r$   ArithmeticErrorr   r	   r
   r   ZeroDivisionErrorr   r   r   r   r   r   r   r   r   r   r   r  rk  rL  contextvars
ContextVarr   	frozensetr   r   r   r    r   r   rI   Numberregisterr   r   r   rS  r   r   r  r  r$  r&  r(  r1  r  r  r;  rA  r4  rE  rp  r  r   r  r   r   r   r   recompileVERBOSE
IGNORECASEro  r   r  r  DOTALLrn  localerq  r  r  r  r  r  r  r  r  rM   r^  r  r]  rY   	hash_infomodulusr  r  r  r  _PyHASH_NANr  r   r-   r1   r/   <module>r     s  $!F 	    
&5~/EiXL
 
##
 ;;'!H!H"HHHH
#	 .
 
' :' %%'8 % 	) 		(*; 	
 
% 
 
	  	#:w #:L) %y   ^Wh'ND ##3$%5#$4 !13 }o}/:G "--.?@ O & +hB4Kf B4KHh& 	   !
'f 'O$f O$b6@v @4< 
3*+!. ` 1D*0X!&F !&F ))#J"?H(V r"br+ 1&"*T /x)9: x)97IN * 

** " ZZ"--#!" "'# & ZZ$$
jj && !#

 , ZZ		!   
	N`6=.#&J#7R EN	FO u~
qzr{ /0 --''mmmm B!+_=CD  &%L&b|  		s#   M# M3 #	M0/M03M<;M<