
    z%id             
          	 g d Z eZdZdZdZddlZddlZddl	Z		 ddl
mZ  eddd	      ZdZdZdZdZdZdZdZdZdZdZe	j2                  dk(  rdZdZdZndZdZdZeedz
  z
  Z G d de      Z G d de      Z  G d de      Z! G d  d!e!      Z" G d" d#ee#      Z$ G d$ d%e!      Z% G d& d'e!e#      Z& G d( d)e      Z' G d* d+e!      Z( G d, d-e      Z) G d. d/e      Z* G d0 d1e'e)      Z+ G d2 d3e'e)e*      Z, G d4 d5ee-      Z.e e$e'e+e)e,e!e*e.g	Z/e"e!e%e!e&e!e(e!iZ0eeeeeeeefZ1ddl2Z2 e2jf                  d6      Z4 e5g d7      Z6d8 Z7d9 Z8[2dsd:Z9 G d; d<e:      Z;dtd=Z<ejz                  j}                  e;        G d> d?e:      Z? G d@ dAe:      Z@ G dB dCe:      ZAdudDZBeCj                  ZEdE ZFdF ZGdG ZHdH ZIdvdIZJdJ ZKdK ZL G dL dMe:      ZM eM       j                  ZOdvdNZPdO ZQdP ZRdQdRdSdTdUdVdWdXdYdZ	fd[ZSdwd\ZTdtd]ZU e@d^ee$e+e!gg d_d`dda      ZV e@dbee$e+e!e e,gg c      ZW e@dbeg g c      ZXddlYZY eYj                  ddeYj                  eYj                  z        j                  Z^ eYj                  de      j                  Z_ eYj                  df      j                  Z` eYj                  dgeYj                  eYj                  z        Zb[Y	 ddlcZddsdhZedi Zfdj ZgdxdkZhdl Zidm Zj e;dn      Zk e;do      Zl e;dp      Zm e;d      Zn e;d      Zo e;dq      ZpekelfZqe	j                  j                  Zte	j                  j                  Zve	j                  j                  Zx eydXetdrz
  et      Zz[	y# e$ r d
 ZY Dw xY w# e$ r Y w xY w)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                      | S N )argss    >/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/_pydecimal.py<lambda>r0      s         r   r   r   r   r   r   r   r   Tl    l   NZolNZoi@Ti   c                       e Zd Z	 d Zy)r   c                      y r,   r-   selfcontextr.   s      r/   handlezDecimalException.handle   s    r1   N__name__
__module____qualname__r8   r-   r1   r/   r   r      s    $r1   r   c                       e Zd Zy)r	   Nr:   r;   r<   r-   r1   r/   r	   r	          	r1   r	   c                       e Zd Z	 d Zy)r
   c                     |r9t        |d   j                  |d   j                  dd      }|j                  |      S t        S )Nr(   nT)_dec_from_triple_sign_int_fix_nan_NaN)r6   r7   r.   anss       r/   r8   zInvalidOperation.handle   s9    "47==$q',,TJC<<((r1   Nr9   r-   r1   r/   r
   r
      s    ,r1   r
   c                       e Zd Z	 d Zy)r   c                     t         S r,   rG   r5   s      r/   r8   zConversionSyntax.handle      r1   Nr9   r-   r1   r/   r   r      s    r1   r   c                       e Zd Z	 d Zy)r   c                     t         |   S r,   )_SignedInfinityr6   r7   signr.   s       r/   r8   zDivisionByZero.handle  s    t$$r1   Nr9   r-   r1   r/   r   r   
  s    
%r1   r   c                       e Zd Z	 d Zy)r   c                     t         S r,   rK   r5   s      r/   r8   zDivisionImpossible.handle"  rL   r1   Nr9   r-   r1   r/   r   r         r1   r   c                       e Zd Z	 d Zy)r   c                     t         S r,   rK   r5   s      r/   r8   zDivisionUndefined.handle-  rL   r1   Nr9   r-   r1   r/   r   r   %  rT   r1   r   c                       e Zd Zy)r   Nr>   r-   r1   r/   r   r   0  r?   r1   r   c                       e Zd Z	 d Zy)r   c                     t         S r,   rK   r5   s      r/   r8   zInvalidContext.handleG  rL   r1   Nr9   r-   r1   r/   r   r   <  s    r1   r   c                       e Zd Zy)r   Nr>   r-   r1   r/   r   r   J  r?   r1   r   c                       e Zd Zy)r   Nr>   r-   r1   r/   r   r   V  s    r1   r   c                       e Zd Z	 d Zy)r   c                    |j                   t        t        t        t        fv r	t
        |   S |dk(  rP|j                   t        k(  r	t
        |   S t        |d|j                  z  |j                  |j                  z
  dz         S |dk(  rP|j                   t        k(  r	t
        |   S t        |d|j                  z  |j                  |j                  z
  dz         S y )Nr(   9r2   )roundingr   r   r   r   rO   r   rC   precEmaxr   rP   s       r/   r8   zOverflow.handlew  s     / ; ;"4((19=0&t,,#D#gll*:#LL5a79 919;.&t,,#D#gll*:$\\',,6q8: : r1   Nr9   r-   r1   r/   r   r   a  s    *:r1   r   c                       e Zd Zy)r   Nr>   r-   r1   r/   r   r         r1   r   c                       e Zd Zy)r   Nr>   r-   r1   r/   r   r     rc   r1   r   decimal_context)r`   Eminra   capitalsclampr_   flagstrapsc                      	 	 t         j                         S # t        $ r$ t               } t         j	                  |        | cY S w xY wr,   )_current_context_vargetLookupErrorr   setr7   s    r/   r   r     sD    #'')) )  )s    *AAc                     	 | t         t        t        fv r | j                         } | j	                          t
        j                  |        y r,   )r   r   r   copyclear_flagsrl   ro   rp   s    r/   r   r     s9    /><AA,,.W%r1   c                     	 | 
t               } t        |       }|j                         D ]3  \  }}|t        vrt	        d| d      t        |j                  ||       5 |S )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      sq    "F {l!#&Klln 5
U))au$VWXX''e45 r1   c            
          e Zd Z	 dZdydZed        Zd Zd ZdzdZ	d Z
d	 Zd
 Zd{dZd{dZd{dZd{dZd{dZd{dZd Zd Zd Zd Zd|dZd{dZd{dZd{dZd}dZd{dZeZd{dZd{dZd{dZ e Z!d{dZ"d Z#d{d Z$d{d!Z%d{d"Z&d{d#Z'd{d$Z(d{d%Z)d{d&Z*d{d'Z+d( Z,d) Z-e-Z.e/d*        Z0e/d+        Z1d, Z2d- Z3d. Z4d/ Z5d0 Z6d1 Z7d2 Z8d3 Z9d4 Z:d5 Z;d6 Z<d7 Z= e>e6e7e8e9e:e;e<e=8      Z?d{d9Z@d: ZAd; ZBd{d<ZCd{d=ZDd> ZEdzd?ZFd{d@ZGd{dAZHdzdBZId{dCZJdD ZKdE ZLdzdFZMdzdGZNeNZOd{dHZPd{dIZQd{dJZRdK ZSdL ZTdM ZUdN ZVd{dOZWd{dPZXd{dQZYdR ZZdS Z[d{dTZ\d{dUZ]dV Z^dW Z_dX Z`dY Zad{dZZbd[ Zcd\ Zdd] Zed{d^Zfd_ Zgd` Zhd{daZidb Zjd{dcZkd{ddZlde Zmdf Znd{dgZod{dhZpd{diZqd{djZrd{dkZsd{dlZtd{dmZud{dnZvd{doZwd{dpZxdq Zyd{drZzd{dsZ{d{dtZ|du Z}dv Z~dw ZdzdxZy)~r   )_exprE   rD   _is_specialNc                 :	   	 t         j                  |       }t        |t              rht	        |j                         j                  dd            }|%|
t               }|j                  t        d|z        S |j                  d      dk(  rd|_        nd|_        |j                  d      }|k|j                  d	      xs d}t        |j                  d
      xs d      }t        t        ||z               |_        |t        |      z
  |_        d|_        |S |j                  d      }|Mt        t        |xs d            j#                  d      |_        |j                  d      rd|_        nd|_        nd|_        d|_        d|_        |S t        |t              r=|dk\  rd|_        nd|_        d|_        t        t%        |            |_        d|_        |S t        |t&              rF|j                  |_        |j                  |_        |j                  |_        |j                   |_        |S t        |t(              rN|j*                  |_        t        |j                        |_        t        |j,                        |_        d|_        |S t        |t.        t0        f      rZt        |      dk7  rt3        d      t        |d   t              r|d   dv st3        d      |d   |_        |d   dk(  rd|_        |d   |_        d|_        |S g }	|d   D ]N  }
t        |
t              r2d|
cxk  rdk  r'n t3        d      |	s|
dk7  s3|	j5                  |
       Et3        d       |d   dv r7dj7                  t9        t        |	            |_        |d   |_        d|_        |S t        |d   t              r<dj7                  t9        t        |	xs dg            |_        |d   |_        d|_        |S t3        d      t        |t:              r}|
t               }|j                  t<        d       t&        j?                  |      }|j                  |_        |j                  |_        |j                  |_        |j                   |_        |S tA        d|z        )N_ zInvalid literal for Decimal: %rrQ   -r2   r(   intfracexp0FdiagsignalNrB   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.rB   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   grouprD   r   rE   lenr   r   lstripabsr   _WorkReprQ   r   listtuple
ValueErrorappendjoinmapfloatr   
from_floatry   )clsr   r7   r6   mintpartfracpartr   r   digitsdigits              r/   r   zDecimal.__new__  sV   	, ~~c" eS!--c267Ay?(lG++,< AE IK K wwv#%

ggenG"776?0b!''%./C0GH$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 "1X 9E!%-!u//
 ) *8 9 9 "UaZ"MM%0( *8 9 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                    	 t        |t              r |dk\  rdnd}d}t        t        |            }nt        |t              rt        j                  |      st        j                  |      r | t        |            S t        j                  d|      dk(  rd}nd}t        |      j                         \  }}|j                         dz
  }t        |d|z  z        }nt        d      t        |||       }| t        u r|S  | |      S )Nr(   r2   g      ?   zargument must be int or float.)r   r   r   r   r   _mathisinfisnanreprcopysignas_integer_ratio
bit_lengthry   rC   r   )r   frQ   kcoeffrB   dresults           r/   r   zDecimal.from_float  s    	( aQ1ADAAKE5!{{1~Q47|#~~c1%,q6**,DAq"A!Q$KE<==!$r2'>Mv;r1   c                 N    	 | j                   r| j                  }|dk(  ry|dk(  ryy)NrB   r2   r   r   r(   )r   r   )r6   r   s     r/   _isnanzDecimal._isnan  s2    	 ))Cczr1   c                 @    	 | j                   dk(  r| j                  ryyy)Nr   r2   r(   )r   rD   r6   s    r/   _isinfinityzDecimal._isinfinity  s%    	 99zzr1   c                 (   	 | j                         }|d}n|j                         }|s|rh|
t               }|dk(  r|j                  t        d|       S |dk(  r|j                  t        d|      S |r| j	                  |      S |j	                  |      S y)NFr   sNaNr(   )r   r   r   r
   rF   )r6   otherr7   self_is_nanother_is_nans        r/   _check_nanszDecimal._check_nans  s    	 kkm= L <<>L,$,a++,<f(,. .q ++,<f(-/ /}}W-->>'**r1   c                    	 |
t               }| j                  s|j                  r| j                         r|j                  t        d|       S |j                         r|j                  t        d|      S | j                         r|j                  t        d|       S |j                         r|j                  t        d|      S y)Nzcomparison involving sNaNzcomparison involving NaNr(   )r   r   is_snanr   r
   is_qnanr6   r   r7   s      r/   _compare_check_nansz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                 >    	 | j                   xs | j                  dk7  S Nr   r   rE   r   s    r/   __bool__zDecimal.__bool__4  s#    	 3499#33r1   c                    	 | j                   s|j                   r-| j                         }|j                         }||k(  ry||k  ryy| s|syd|j                  z   S |sd| j                  z  S |j                  | j                  k  ry| j                  |j                  k  ry| j                         }|j                         }||k(  r|| j                  d| j
                  |j
                  z
  z  z   }|j                  d|j
                  | j
                  z
  z  z   }||k(  ry||k  rd| j                  z   S d| j                  z  S ||kD  rd| j                  z  S d| j                  z   S )Nr(   r   r2   r   )r   r   rD   adjustedrE   r   )r6   r   self_inf	other_infself_adjustedother_adjustedself_paddedother_paddeds           r/   _cmpzDecimal._cmp;  sc   	D
 u00'')H))+I9$I% u{{*++## ;;#::#)N*))c499uzz+A&BBK ::UZZ$))-C(DDLl*|+djj(((TZZ''^+##4::%&&r1   c                     t        | |d      \  } }|t        u r|S | j                  ||      ry| j                  |      dk(  S )NT)equality_opFr(   )_convert_for_comparisonNotImplementedr   r   r   s      r/   __eq__zDecimal.__eq__{  sH    -dEtLeN"LE7+yy1$$r1   c                     t        | |      \  } }|t        u r|S | j                  ||      }|ry| j                  |      dk  S NFr(   r   r   r   r   r6   r   r7   rH   s       r/   __lt__zDecimal.__lt__  K    -dE:eN"L&&ug6yy!##r1   c                     t        | |      \  } }|t        u r|S | j                  ||      }|ry| j                  |      dk  S r   r   r   s       r/   __le__zDecimal.__le__  K    -dE:eN"L&&ug6yy1$$r1   c                     t        | |      \  } }|t        u r|S | j                  ||      }|ry| j                  |      dkD  S r   r   r   s       r/   __gt__zDecimal.__gt__  r   r1   c                     t        | |      \  } }|t        u r|S | j                  ||      }|ry| j                  |      dk\  S r   r   r   s       r/   __ge__zDecimal.__ge__  r   r1   c                     	 t        |d      }| j                  s|r"|j                  r| j                  ||      }|r|S t        | j	                  |            S NTraiseit)_convert_otherr   r   r   r   r   s       r/   comparezDecimal.compare  sX    	 ud3 %*;*;""5'2C
tyy'((r1   c                    	 | j                   rY| j                         rt        d      | j                         rt        j                  |       S | j                  rt         S t        S | j                  dk\  rt        d| j                  t              }n t        t        | j                   t              }t        | j                        |z  t        z  }| dk\  r|n| }|dk(  rdS |S )Nz"Cannot hash a signaling NaN value.r(   
   r   )r   r   ry   is_nanr   __hash__rD   _PyHASH_INFr   pow_PyHASH_MODULUS_PyHASH_10INVr   rE   )r6   exp_hashhash_rH   s       r/   r   zDecimal.__hash__  s    ' ||~ DEEt,,::'<'&&99>2tyy/:H=499*oFHDII)O;qyeufBYr'C'r1   c           	          	 t        | j                  t        t        t        | j
                              | j                        S r,   )r   rD   r   r   r   rE   r   r   s    r/   as_tuplezDecimal.as_tuple  s0    	 DJJc#tyy.A(BDIINNr1   c                    	 | j                   r&| j                         rt        d      t        d      | syt	        | j
                        }| j                  dk\  r|d| j                  z  z  d}}nt| j                   }|dkD  r |dz  dk(  r|dz  }|dz  }|dkD  r	|dz  dk(  r| j                   }t        || z  j                         dz
  |      }|r
||z  }||z  }d|z  |z  }| j                  r| }||fS )Nz#cannot convert NaN to integer ratioz(cannot convert Infinity to integer ratior   r(   r   r2   r   )
r   r   r   OverflowErrorr   rE   r   minr   rD   )r6   rB   r   d5d2shift2s         r/   r   zDecimal.as_integer_ratio  s   	 {{} !FGG#$NOO 		N99>r499}$aqA ))Bq&QUaZaa q&QUaZ ))B!qb&,,.2B7Fff2A::A!tr1   c                      	 dt        |       z  S )NzDecimal('%s'))r   r   s    r/   __repr__zDecimal.__repr__  s    >T**r1   c                 
   	 ddg| j                      }| j                  rG| j                  dk(  r|dz   S | j                  dk(  r|dz   | j                  z   S |dz   | j                  z   S | j                  t	        | j                        z   }| j                  dk  r|d	kD  r|}n+|sd
}n&| j                  dk(  r|d
z   dz  d
z
  }n|d
z
  dz  d
z   }|dk  rd}dd| z  z   | j                  z   }nd|t	        | j                        k\  r+| j                  d|t	        | j                        z
  z  z   }d}n!| j                  d | }d| j                  |d  z   }||k(  rd}n&|
t               }ddg|j                     d||z
  z  z   }||z   |z   |z   S )Nr   r   r   InfinityrB   NaNr   r(   r2   r   r   .eEz%+d)rD   r   r   rE   r   r   rg   )	r6   engr7   rQ   
leftdigitsdotplacer   r   r   s	            r/   __str__z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--.*X:M1NNCg~(3..r1   c                 *    	 | j                  d|      S )NT)r  r7   )r  r6   r7   s     r/   to_eng_stringzDecimal.to_eng_stringE  s    	 ||g|66r1   c                     	 | j                   r| j                  |      }|r|S |
t               }| s$|j                  t        k7  r| j                         }n| j                         }|j                  |      S Nrp   )r   r   r   r_   r   copy_abscopy_negate_fixr6   r7   rH   s      r/   __neg__zDecimal.__neg__N  ss    	 ""7"3C
? lG((K7 --/C""$Cxx  r1   c                     	 | j                   r| j                  |      }|r|S |
t               }| s$|j                  t        k7  r| j                         }nt        |       }|j                  |      S r  )r   r   r   r_   r   r  r   r  r  s      r/   __pos__zDecimal.__pos__d  sl    	 ""7"3C
? lG((K7--/C$-Cxx  r1   c                     	 |s| j                         S | j                  r| j                  |      }|r|S | j                  r| j	                  |      }|S | j                  |      }|S r  )r  r   r   rD   r  r   )r6   roundr7   rH   s       r/   __abs__zDecimal.__abs__y  sq    	 ==?"""7"3C
::,,w,/C 
 ,,w,/C
r1   c                 >   	 t        |      }|t        u r|S |
t               }| j                  s|j                  r| j	                  ||      }|r|S | j                         rJ| j                  |j                  k7  r&|j                         r|j                  t        d      S t        |       S |j                         rt        |      S t        | j                  |j                        }d}|j                  t        k(  r| j                  |j                  k7  rd}| sF|sDt        | j                  |j                        }|rd}t        |d|      }|j                  |      }|S | sUt!        ||j                  |j"                  z
  dz
        }|j%                  ||j                        }|j                  |      }|S |sUt!        || j                  |j"                  z
  dz
        }| j%                  ||j                        }|j                  |      }|S t'        |       }t'        |      }t)        |||j"                        \  }}t'               }	|j*                  |j*                  k7  r|j,                  |j,                  k(  r t        |d|      }|j                  |      }|S |j,                  |j,                  k  r||}}|j*                  dk(  r+d|	_        |j*                  |j*                  c|_        |_        n5d|	_        n-|j*                  dk(  rd|	_        d\  |_        |_        nd|	_        |j*                  dk(  r|j,                  |j,                  z   |	_        n|j,                  |j,                  z
  |	_        |j.                  |	_        t        |	      }|j                  |      }|S )Nz
-INF + INFr(   r2   r   )r(   r(   )r   r   r   r   r   r   rD   r   r
   r   r  r   r_   r   rC   r  maxr`   _rescaler   
_normalizerQ   r   r   )
r6   r   r7   rH   r   negativezerorQ   op1op2r   s
             r/   __add__zDecimal.__add__  s    	 u%N"L? lGu00""5'2C
!::,1B1B1D"//0@,OOt}$  "u~%$))UZZ({*tzzU[[/HLEtzz5;;/D"4c2C((7#CJc5::4Q67C..g&6&67C((7#CJc499w||3A56C--W%5%56C((7#CJtnuoc35S88sxxww#''!&|S#>hhw'
ww Sxx1}%(XXsxx"#(XX]FK!'CHchFK 88q=377*FJ377*FJWW
fohhw
r1   c                     	 t        |      }|t        u r|S | j                  s|j                  r| j                  ||      }|r|S | j	                  |j                         |      S r  )r   r   r   r   r+  r  r   s       r/   __sub__zDecimal.__sub__  sh    !u%N"Lu00""5'":C
 ||E--/|AAr1   c                 T    	 t        |      }|t        u r|S |j                  | |      S r  )r   r   r-  r   s      r/   __rsub__zDecimal.__rsub__  s/    !u%N"L}}T7}33r1   c                    	 t        |      }|t        u r|S |
t               }| j                  |j                  z  }| j                  s|j                  rx| j                  ||      }|r|S | j                         r!|s|j                  t        d      S t        |   S |j                         r!| s|j                  t        d      S t        |   S | j                  |j                  z   }| r|s t        |d|      }|j                  |      }|S | j                  dk(  r*t        ||j                  |      }|j                  |      }|S |j                  dk(  r*t        || j                  |      }|j                  |      }|S t        |       }t        |      }t        |t        |j                   |j                   z        |      }|j                  |      }|S )Nz(+-)INF * 0z0 * (+-)INFr   1)r   r   r   rD   r   r   r   r   r
   rO   r   rC   r  rE   r   r   r   )r6   r   r7   
resultsignrH   	resultexpr)  r*  s           r/   __mul__z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":uzz9EC((7#CJ::":tyy)DC((7#CJtnuoz3sww/@+A9Mhhw
r1   c                    	 t        |      }|t        u rt        S |
t               }| j                  |j                  z  }| j                  s|j                  r| j                  ||      }|r|S | j                         r&|j                         r|j                  t        d      S | j                         r	t        |   S |j                         r1|j                  t        d       t        |d|j                               S |s/| s|j                  t        d      S |j                  t        d|      S | s| j                  |j                  z
  }d}nt!        |j"                        t!        | j"                        z
  |j$                  z   dz   }| j                  |j                  z
  |z
  }t'        |       }t'        |      }	|dk\  r*t)        |j*                  d|z  z  |	j*                        \  }}
n*t)        |j*                  |	j*                  d| z  z        \  }}
|
r|d	z  dk(  rD|dz  }n>| j                  |j                  z
  }||k  r |dz  dk(  r|dz  }|dz  }||k  r	|dz  dk(  rt        |t-        |      |      }|j/                  |      S )
Nz(+-)INF/(+-)INFzDivision by infinityr   z0 / 0zx / 0r(   r2   r   r   )r   r   r   rD   r   r   r   r   r
   rO   r	   rC   Etinyr   r   r   r   rE   r`   r   divmodr   r   r  )r6   r   r7   rQ   rH   r   r   shiftr)  r*  	remainder	ideal_exps               r/   __truediv__zDecimal.__truediv__6  sJ   "u%N"!!? lGzzEKK'u00""5'2C
!e&7&7&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 y19>QJE !II

2	Io%"*/bLE1HC Io%"*/ tSZ5xx  r1   c                    	 | j                   |j                   z  }|j                         r| j                  }n t        | j                  |j                        }| j	                         |j	                         z
  }| r|j                         s|dk  r)t        |dd      | j                  ||j                        fS ||j                  k  rt        |       }t        |      }|j                  |j                  k\  r0|xj                  d|j                  |j                  z
  z  z  c_        n/|xj                  d|j                  |j                  z
  z  z  c_        t        |j                  |j                        \  }}	|d|j                  z  k  r6t        |t        |      d      t        | j                   t        |	      |      fS |j                  t        d      }
|
|
fS )Nr   r   r(   r   z%quotient too large in //, % or divmod)rD   r   r   r  r   rC   r&  r_   r`   r   r   r   r7  r   r   r   )r6   r   r7   rQ   r:  expdiffr)  r*  qrrH   s              r/   _dividezDecimal._divideq  s   	
 zzEKK'		IDIIuzz2I--/ENN$44u((*gm$T32MM)W-=-=>@ @gll"4.C5/Cww#''!2#'' 1222#'' 122#''377+DAq2w||##(s1vq9(SVYGI I ""#5#JLCxr1   c                 T    	 t        |      }|t        u r|S |j                  | |      S r  )r   r   r;  r   s      r/   __rtruediv__zDecimal.__rtruediv__  s2    7u%N"L  w 77r1   c                 D   	 t        |      }|t        u r|S |
t               }| j                  ||      }|r||fS | j                  |j                  z  }| j                         rI|j                         r|j                  t        d      }||fS t        |   |j                  t        d      fS |sI| s|j                  t        d      }||fS |j                  t        d|      |j                  t        d      fS | j                  ||      \  }}|j                  |      }||fS )Nzdivmod(INF, INF)INF % xzdivmod(0, 0)x // 0x % 0)r   r   r   r   rD   r   r   r
   rO   r   r   r@  r  )r6   r   r7   rH   rQ   quotientr9  s          r/   
__divmod__zDecimal.__divmod__  s:   	 u%N"L? lGug.:zzEKK'  "**+;=OPCx'-,,-=yIK K **+<nMCx,,^XtL,,-=wGI I #ll5':)NN7+	""r1   c                 T    	 t        |      }|t        u r|S |j                  | |      S r  )r   r   rH  r   s      r/   __rdivmod__zDecimal.__rdivmod__  s2    6u%N"Lg66r1   c                 n   	 t        |      }|t        u r|S |
t               }| j                  ||      }|r|S | j	                         r|j                  t        d      S |s.| r|j                  t        d      S |j                  t        d      S | j                  ||      d   }|j                  |      }|S )NrD  rF  z0 % 0r2   )
r   r   r   r   r   r   r
   r   r@  r  )r6   r   r7   rH   r9  s        r/   __mod__zDecimal.__mod__  s    	 u%N"L? lGug.J''(8)DD++,<gFF++,=wGGLL03	NN7+	r1   c                 T    	 t        |      }|t        u r|S |j                  | |      S r  )r   r   rL  r   s      r/   __rmod__zDecimal.__rmod__  /    3u%N"L}}T7}33r1   c                 v   	 |
t               }t        |d      }| j                  ||      }|r|S | j                         r|j	                  t
        d      S |s.| r|j	                  t
        d      S |j	                  t        d      S |j                         rt        |       }|j                  |      S t        | j                  |j                        }| s(t        | j                  d|      }|j                  |      S | j                         |j                         z
  }||j                  dz   k\  r|j	                  t              S |dk  r-| j!                  ||j"                        }|j                  |      S t%        |       }t%        |      }|j&                  |j&                  k\  r0|xj(                  d	|j&                  |j&                  z
  z  z  c_        n/|xj(                  d	|j&                  |j&                  z
  z  z  c_        t+        |j(                  |j(                        \  }}	d
|	z  |dz  z   |j(                  kD  r|	|j(                  z  }	|dz  }|d	|j                  z  k\  r|j	                  t              S | j                  }
|	dk  rd|
z
  }
|	 }	t        |
t-        |	      |      }|j                  |      S )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   r  r  r   rC   rD   r   r`   r   r&  r_   r   r   r   r7  r   )r6   r   r7   rH   ideal_exponentr=  r)  r*  r>  r?  rQ   s              r/   remainder_nearzDecimal.remainder_near  s~   	 ? lGud3ug.J ''(8(EG G ++,<,BD D ++,=,BD D $-C88G$$ TYY

3"4::sNCC88G$$ --/ENN$44gllQ&&''(:;;b=--0@0@AC88G$$ tnuo77cggGGrCGGcgg-..GGGrCGGcgg-..Gcggsww'1 Q3!A#; LAFAGLL  ''(:;; zzq5T6DAtSV^<xx  r1   c                    	 t        |      }|t        u r|S |
t               }| j                  ||      }|r|S | j	                         rF|j	                         r|j                  t        d      S t        | j                  |j                  z     S |sF| r.|j                  t        d| j                  |j                  z        S |j                  t        d      S | j                  ||      d   S )Nz
INF // INFrE  z0 // 0r(   )r   r   r   r   r   r   r
   rO   rD   r   r   r@  r   s       r/   __floordiv__zDecimal.__floordiv__1  s    u%N"L? lGug.J  "++,<lKK&tzzEKK'?@@++NH,0JJ,DF F ++,=xHH||E7+A..r1   c                 T    	 t        |      }|t        u r|S |j                  | |      S r  )r   r   rT  r   s      r/   __rfloordiv__zDecimal.__rfloordiv__M  s2    8u%N"L!!$!88r1   c                     	 | j                         r6| j                         rt        d      | j                  rdnd}t        |      S t	        |       }t        |      S )Nz%Cannot convert signaling NaN to floatz-nannan)r   r   r   rD   r   r   r6   ss     r/   	__float__zDecimal.__float__T  sO    #;;=||~ !HII**%A Qx D	AQxr1   c                 f   	 | j                   r6| j                         rt        d      | j                         rt	        d      d| j
                  z  }| j                  dk\  r(|t        | j                        z  d| j                  z  z  S |t        | j                  d | j                   xs d      z  S )NzCannot convert NaN to integerz"Cannot convert infinity to integerr   r(   r   r   )	r   r   r   r   r  rD   r   r   rE   rY  s     r/   __int__zDecimal.__int__^  s    ?{{} !@AA!!##$HII$**99>S^#B		M11S:DII.5#666r1   c                     | S r,   r-   r   s    r/   realzDecimal.realm  s    r1   c                     t        d      S Nr(   r   r   s    r/   imagzDecimal.imagq  s    qzr1   c                     | S r,   r-   r   s    r/   	conjugatezDecimal.conjugateu  s    r1   c                 *    t        t        |             S r,   )complexr   r   s    r/   __complex__zDecimal.__complex__x  s    uT{##r1   c                    	 | j                   }|j                  |j                  z
  }t        |      |kD  rB|t        |      |z
  d  j	                  d      }t        | j                  || j                  d      S t        |       S )Nr   T)	rE   r`   rh   r   r   rC   rD   r   r   )r6   r7   payloadmax_payload_lens       r/   rF   zDecimal._fix_nan{  sr    @)) ",,6w</)c'l?:;<CCCHG#DJJDIIt}r1   c                    	 | j                   r,| j                         r| j                  |      S t        |       S |j	                         }|j                         }| s|j                  |g|j                     }t        t        | j                  |      |      }|| j                  k7  r,|j                  t               t        | j                  d|      S t        |       S t        | j                         | j                  z   |j"                  z
  }||kD  rM|j                  t$        d| j                        }|j                  t&               |j                  t(               |S ||k  }|r|}| j                  |k  rlt        | j                         | j                  z   |z
  }	|	dk  rt        | j                  d|dz
        } d}	| j*                  |j,                     }
 |
| |	      }| j                   d |	 xs d}|dkD  r9t/        t1        |      dz         }t        |      |j"                  kD  r
|d d }|dz  }||kD  r"|j                  t$        d| j                        }nt        | j                  ||      }|r|r|j                  t2               |r|j                  t4               |r|j                  t&               |j                  t(               |s|j                  t               |S |r|j                  t4               |j                  dk(  rZ| j                  |kD  rK|j                  t               | j                   d| j                  |z
  z  z   }t        | j                  ||      S t        |       S )Nr   
above Emaxr(   r1  r2   r   )r   r   rF   r   r6  Etopra   rh   r  r%  r   r   r	   rC   rD   r   rE   r`   r   r   r   _pick_rounding_functionr_   r   r   r   r   )r6   r7   r6  rn  exp_maxnew_expexp_minrH   self_is_subnormalr   rounding_methodchangedr   r   s                 r/   r  zDecimal._fix  s   	 {{}}}W-- t}$ ||~||T*7==9G#dii/9G$))#$$W-'

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

CC"::7;K;KLO%dF3GIIgv&-#E{CJqL)u:,!#2JEqLG ~**8\4::N&tzz5'B ,$$Y/ $$Y/$$W-  )$$W-J  + ==A$))d"2  )))c499t+;&<<K#DJJTBB t}r1   c                 4    	 t        | j                  |      ryy)Nr(   r   )
_all_zerosrE   r6   r`   s     r/   _round_downzDecimal._round_down  s    6dii&r1   c                 (    	 | j                  |       S r,   )ry  rx  s     r/   	_round_upzDecimal._round_up  s    !  &&&r1   c                 X    	 | j                   |   dv ryt        | j                   |      ryy)N56789r2   r(   r   )rE   rw  rx  s     r/   _round_half_upzDecimal._round_half_up  s,    '99T?g%		4(r1   c                 T    	 t        | j                  |      ry| j                  |      S )Nr   _exact_halfrE   r~  rx  s     r/   _round_half_downzDecimal._round_half_down  s'    tyy$'&&t,,r1   c                     	 t        | j                  |      r|dk(  s| j                  |dz
     dv ry| j                  |      S )Nr(   r2   02468r   r  rx  s     r/   _round_half_evenzDecimal._round_half_even  sB    /tyy$'diiQ/7:&&t,,r1   c                 b    	 | j                   r| j                  |      S | j                  |       S r,   rD   ry  rx  s     r/   _round_ceilingzDecimal._round_ceiling  s1    6::##D))$$T***r1   c                 b    	 | j                   s| j                  |      S | j                  |       S r,   r  rx  s     r/   _round_floorzDecimal._round_floor  s1    5zz##D))$$T***r1   c                 v    	 |r%| j                   |dz
     dvr| j                  |      S | j                  |       S )Nr2   05)rE   ry  rx  s     r/   _round_05upzDecimal._round_05up  sA    7DIId1f%T1##D))$$T***r1   )r   r   r   r   r   r   r   r   c                    	 |:t        |t              st        d      t        dd|       }| j	                  |      S | j
                  r&| j                         rt        d      t        d      t        | j                  dt                    S )Nz+Second argument to round should be integralr(   r1  cannot round a NaNcannot round an infinity)r   r   ry   rC   quantizer   r   r   r  r&  r   )r6   rB   r   s      r/   	__round__zDecimal.__round__0  s    -	\ =a% MNN"1cA2.C==%% {{} !566#$>??4==O455r1   c                     	 | j                   r&| j                         rt        d      t        d      t	        | j                  dt                    S Nr  r  r(   )r   r   r   r  r   r&  r   r   s    r/   	__floor__zDecimal.__floor__n  sI    	 {{} !566#$>??4==K011r1   c                     	 | j                   r&| j                         rt        d      t        d      t	        | j                  dt                    S r  )r   r   r   r  r   r&  r   r   s    r/   __ceil__zDecimal.__ceil__}  sI    	 {{} !566#$>??4==M233r1   c           	         	 t        |d      }t        |d      }| j                  s|j                  r|
t               }| j                  dk(  r|j	                  t
        d|       S |j                  dk(  r|j	                  t
        d|      S | j                  dk(  r| }n|j                  dk(  r|}n| j                  dk(  r9|s|j	                  t
        d      S t        | j                  |j                  z     }n|j                  dk(  r| s|j	                  t
        d      S t        | j                  |j                  z     }nmt        | j                  |j                  z  t        t        | j                        t        |j                        z        | j                  |j                  z         }j                  ||      S )	NTr   r   r   rB   r   zINF * 0 in fmaz0 * INF in fma)r   r   r   r   r   r
   rO   rD   rC   r   r   rE   r+  )r6   r   thirdr7   products        r/   fmazDecimal.fma  s   	 ud3ud3 u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 ug..r1   c                 D   	 t        |      }|t        u r|S t        |      }|t        u r|S |
t               }| j                         }|j                         }|j                         }|s|s|r|dk(  r|j	                  t
        d|       S |dk(  r|j	                  t
        d|      S |dk(  r|j	                  t
        d|      S |r| j                  |      S |r|j                  |      S |j                  |      S | j                         r |j                         r|j                         s|j	                  t
        d      S |dk  r|j	                  t
        d      S |s|j	                  t
        d      S |j                         |j                  k\  r|j	                  t
        d      S |s| s|j	                  t
        d      S |j                         rd}n| j                  }t        t        |            }t        | j                               }t        |j                               }	|j                  |z  t!        d	|j"                  |      z  |z  }t%        |	j"                        D ]  }
t!        |d	|      } t!        ||	j                  |      }t'        |t)        |      d      S )
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
   rF   
_isintegerr   r`   _isevenrD   r   r   r   to_integral_valuer   r   rangerC   r   )r6   r   modulor7   r   r   modulo_is_nanrQ   baseexponentis              r/   _power_modulozDecimal._power_modulo  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                    	 t        |       }|j                  |j                  }}|dz  dk(  r|dz  }|dz  }|dz  dk(  rt        |      }|j                  |j                  }}|dz  dk(  r|dz  }|dz  }|dz  dk(  r|dk(  r||z  }|dz  dk(  r|dz  }|dz  }|dz  dk(  r|dk  ry |d|z  z  }	|j                  dk(  r|	 }	|j	                         r:|j
                  dk(  r+| j                  t        |      z  }
t        |	|
z
  |dz
        }nd}t        ddd|z  z   |	|z
        S |j                  dk(  r+|dz  }|dv rg|| z  |k7  ry t        |      dz
  }|dz  dz  }|t        t        |            k\  ry t        ||z  |      }t        ||z  |      }||y ||kD  ry d	|z  }n|d	k(  rt        |      d
z  dz  }t        d	|z  |      \  }}|ry |d	z  dk(  r|d	z  }|dz  }|d	z  dk(  r|dz  dz  }|t        t        |            k\  ry t        ||z  |      }t        ||z  |      }||y ||kD  ry d|z  }ny |d|z  k\  ry | |z
  }t        dt        |      |      S |dk\  r|d|z  z  d}}n|dk7  r%t        t        t        ||z                    | k  ry t        |      }t        t        t        |      |z              | k  ry |d| z  }}|dz  |dz  cxk(  rdk(  r!n n|dz  }|dz  }|dz  |dz  cxk(  rdk(  rn |d	z  |d	z  cxk(  rdk(  r!n n|d	z  }|d	z  }|d	z  |d	z  cxk(  rdk(  rn |dkD  rf|k  ry t        ||      \  }}|dk7  ry dt        |       |z   z  }	 t        |||dz
  z        \  }}||k  rn||dz
  z  |z   |z  }*||k(  r|dk(  sy |}|dkD  r||dz  t        |      z  kD  ry ||z  }||z  }|d|z  kD  ry t        |      }|j	                         rC|j
                  dk(  r4| j                  t        |      z  }
t        ||
z
  |t        |      z
        }nd}t        d|d|z  z   ||z
        S )Nr   r(   r2   r1  r   )r            ]   A   r      r   r   d   )r   r   r   rQ   r  rD   r   r  rC   _nbitsr   r   _decimal_lshift_exactr7  r   	_log10_lb)r6   r   pxxcxeyycyer  rQ  zeros
last_digitr  emaxr9  r   rB   xc_bitsremar>  r?  str_xcs                           r/   _power_exactzDecimal._power_exact  s$   	Br 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' *!b&"5*27B79
t8Tq 2JrM2% &q!tR 0I1fk1HBFA 1fk tQwSY')!b&"5*27B79
t8TRU{BB#As2w33 7b"f9aqAQw3s3r"u:/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A:
 R%++"2!YYs5z1N>)1S[=9EE6#e)#3RX>>r1   c                 \   	 || j                  |||      S t        |      }|t        u r|S |
t               }| j	                  ||      }|r|S |s| s|j                  t        d      S t        S d}| j                  dk(  rK|j                         r|j                         sd}n| r|j                  t        d      S | j                         } | s%|j                  dk(  rt        |dd      S t        |   S | j                         r%|j                  dk(  r	t        |   S t        |dd      S | t        k(  r|j                         r|j                  dk(  rd}n'||j                  kD  r|j                  }nt!        |      }| j"                  |z  }|d|j                  z
  k  r^d|j                  z
  }|j                  t$               n9|j                  t&               |j                  t$               d|j                  z
  }t        |dd| z  z   |      S | j)                         }|j                         r+|j                  dk(  |dk  k(  rt        |dd      S t        |   S d }d}	| j+                         |j)                         z   }
|dk\  |j                  dk(  k(  r<|
t-        t/        |j0                              k\  rSt        |d|j0                  dz         }n8|j3                         }|
t-        t/        |             k\  rt        |d|dz
        }|I| j5                  ||j                  dz         }|(|dk(  r!t        d|j6                  |j"                        }d}	||j                  }t9        |       }|j                   |j:                  }}t9        |      }|j                   |j:                  }}|j<                  dk(  r| }d	}	 t?        ||||||z         \  }}|d
dt-        t/        |            |z
  dz
  z  z  z  rn|d	z  }?t        |t/        |      |      }|	r|j                         szt-        |j6                        |j                  k  rY|j                  dz   t-        |j6                        z
  }t        |j                  |j6                  d|z  z   |j"                  |z
        }|jA                         }|jC                          tD        D ]  }d|jF                  |<    |jI                  |      }|j                  t&               |jJ                  tL           r|j                  tN               |jJ                  tP           r!|j                  tP        d|j                         tN        tL        t&        t$        tR        fD ]#  }|jJ                  |   s|j                  |       % |S |jI                  |      }|S )Nz0 ** 0r(   r2   z+x ** y with x negative and y not an integerr   r1  FTr   r   r   rm  )*r  r   r   r   r   r   r
   _OnerD   r  r  r  rC   rO   r   r`   r   r   r   r   r   _log10_exp_boundr   r   ra   r6  r  rE   r   r   rQ   _dpowerrr   rs   _signalsrj   r  ri   r   r   r   r	   )r6   r   r  r7   rH   result_sign
multiplierr   self_adjexactboundr6  r  r  r  r  r  r  r  extrar   r=  
newcontext	exceptions                           r/   __pow__zDecimal.__pow__  sL   	. %%eVW==u%N"L? lG ug.J ++,<hGG ::?!}}"#K "//0@EG G ##%D {{a'S!<<&{33 {{a&{33'S!<<
 4<!
 ;;!#!"JW\\)!(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 ;##E7<<!+;<C!#*1chhAC ;AAUUAEEBAUUAEEBvv{S E$RRQuW=
sAb3s5z?1#4Q#6778
	  #;E
C@C ))+ 388},!,,*S]:&syy#((3w;2F'*xx'79 !J""$% 0	./
  +0 ((:&C ##G,	*''	2 )$$X|SYYG&	7GWL 4	##I.((34 
 ((7#C
r1   c                 T    	 t        |      }|t        u r|S |j                  | |      S r  )r   r   r  r   s      r/   __rpow__zDecimal.__rpow__	  rO  r1   c                 2   	 |
t               }| j                  r| j                  |      }|r|S | j                  |      }|j	                         r|S |st        |j                  dd      S |j                  |j                         g|j                     }t        |j                        }|j                  }|j                  |dz
     dk(  r*||k  r%|dz  }|dz  }|j                  |dz
     dk(  r||k  r%t        |j                  |j                  d | |      S )Nrp   r   r(   r2   )r   r   r   r  r   rC   rD   ra   rn  rh   r   rE   r   )r6   r7   rH   duprp  endr   s          r/   	normalizezDecimal.normalize	  s   M? lG""7"3C
ii ??J#CIIsA66<<0?#((mhhhhs1uo$w1HC1HC hhs1uo$w  		388DS>3??r1   c                 b   	 t        |d      }|
t               }||j                  }| j                  s|j                  rw| j	                  ||      }|r|S |j                         s| j                         rA|j                         r| j                         rt        |       S |j                  t        d      S |j                         |j                  cxk  r|j                  k  sn |j                  t        d      S | s2t        | j                  d|j                        }|j                  |      S | j                         }||j                  kD  r|j                  t        d      S ||j                  z
  dz   |j                   kD  r|j                  t        d      S | j#                  |j                  |      }|j                         |j                  kD  r|j                  t        d      S t%        |j&                        |j                   kD  r|j                  t        d      S |r2|j                         |j(                  k  r|j                  t*               |j                  | j                  kD  r/|| k7  r|j                  t,               |j                  t.               |j                  |      }|S )	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   r_   r   r   r   r   r   r
   r6  r   ra   rC   rD   r  r   r`   r&  r   rE   rf   r   r   r   )r6   r   r_   r7   rH   r   s         r/   r  zDecimal.quantize	  sQ   	 S$/? lG''Hs""30C
 D$4$4$6??$)9)9);"4=(++,<(?A A 388;w||;''(8>@ @ "4::sCHH=C88G$$7<<'''(8(ce e388#a'',,6''(8(ac c mmCHHh/<<>GLL(''(8(ce esxx=7<<'''(8(ac c 3<<>GLL0  +88diid{$$W-  ) hhw
r1   c                    	 t        |d      }| j                  s|j                  rF| j                         xr |j                         xs" | j                         xr |j                         S | j                  |j                  k(  S r   )r   r   r   is_infiniter   r   s      r/   same_quantumzDecimal.same_quantum/
  sr    	 ud3u00KKM4elln ?$$&>5+<+<+>@yyEJJ&&r1   c                 2   	 | j                   rt        |       S | st        | j                  d|      S | j                  |k\  r4t        | j                  | j
                  d| j                  |z
  z  z   |      S t        | j
                        | j                  z   |z
  }|dk  rt        | j                  d|dz
        } d}| j                  |   } || |      }| j
                  d | xs d}|dk(  rt        t        |      dz         }t        | j                  ||      S )Nr   r(   r1  r2   )
r   r   rC   rD   r   rE   r   ro  r   r   )r6   r   r_   r   this_functionru  r   s          r/   r&  z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>f-		'6")ca<E
1%E

E377r1   c                 4   	 |dk  rt        d      | j                  s| st        |       S | j                  | j	                         dz   |z
  |      }|j	                         | j	                         k7  r&|j                  |j	                         dz   |z
  |      }|S )Nr(   z'argument should be at least 1 in _roundr2   )r   r   r   r&  r   )r6   placesr_   rH   s       r/   _roundzDecimal._round`
  s    	 Q;FGG44= mmDMMOA-f4h?
 <<>T]]_,,,s||~a/6AC
r1   c                 ~   	 | j                   r!| j                  |      }|r|S t        |       S | j                  dk\  rt        |       S | st	        | j
                  dd      S |
t               }||j                  }| j                  d|      }|| k7  r|j                  t               |j                  t               |S )Nrp   r(   r   )r   r   r   r   rC   rD   r   r_   r&  r   r   r   r6   r_   r7   rH   s       r/   to_integral_exactzDecimal.to_integral_exactw
  s    	 ""7"3C
4= 99>4= #DJJQ77? lG''HmmAx($;  )W%
r1   c                     	 |
t               }||j                  }| j                  r!| j                  |      }|r|S t	        |       S | j
                  dk\  rt	        |       S | j                  d|      S )Nrp   r(   )r   r_   r   r   r   r   r&  r  s       r/   r  zDecimal.to_integral_value
  sv    N? lG''H""7"3C
4= 99>4= ==H--r1   c                 .   	 |
t               }| j                  r@| j                  |      }|r|S | j                         r| j                  dk(  rt        |       S | s5t        | j                  d| j                  dz        }|j                  |      S | j                  dk(  r|j                  t        d      S |j                  dz   }t        |       }|j                  dz	  }|j                  dz  r+|j                  dz  }t        | j                         dz	  dz   }n'|j                  }t        | j                         dz   dz	  }||z
  }|dk\  r|d|z  z  }d	}	nt#        |d| z        \  }}
|
 }	||z  }d|z  }	 ||z  }||k  rn	||z   dz	  }|	xr ||z  |k(  }	|	r|dk\  r	|d|z  z  }n	|d| z  z  }||z  }n|d
z  dk(  r|dz  }t        dt%        |      |      }|j'                         }|j)                  t*              }|j                  |      }||_        |S )Nrp   r(   r   r   r2   zsqrt(-x), x > 0r   r  Tr   )r   r   r   r   rD   r   rC   r   r  r   r
   r`   r   r   r   r   rE   r7  r   _shallow_copy_set_roundingr   r_   )r6   r7   rH   r`   opr  clr8  r  r9  rB   r>  r_   s                 r/   sqrtzDecimal.sqrt
  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 QA:eOAE!!S5&[1LAy!ME	U
 H1AAvEQJ  "!A#(zb%iR%ZJA 1uzQq#a&!, '')((9hhw#
r1   c                    	 t        |d      }|
t               }| j                  s|j                  rl| j                         }|j                         }|s|rH|dk(  r|dk(  r| j	                  |      S |dk(  r|dk(  r|j	                  |      S | j                  ||      S | j                  |      }|dk(  r| j                  |      }|dk(  r|}n| }|j	                  |      S NTr   r2   r(   r   r   r   r   r   r  r   r   compare_totalr6   r   r7   snonr  rH   s          r/   r%  zDecimal.max
  s    	
 ud3? lGu00 BBR7rQw99W--7rQw ::g..''w77IIe6 ""5)A7CCxx  r1   c                    	 t        |d      }|
t               }| j                  s|j                  rl| j                         }|j                         }|s|rH|dk(  r|dk(  r| j	                  |      S |dk(  r|dk(  r|j	                  |      S | j                  ||      S | j                  |      }|dk(  r| j                  |      }|dk(  r| }n|}|j	                  |      S r  r  r  s          r/   r  zDecimal.min4  s    	
 ud3? lGu00 BBR7rQw99W--7rQw ::g..''w77IIe6""5)A7CCxx  r1   c                     	 | j                   ry| j                  dk\  ry| j                  | j                  d  }|dt        |      z  k(  S )NFr(   Tr   )r   r   rE   r   )r6   rests     r/   r  zDecimal._isintegerV  sF    099>yy$s3t9}$$r1   c                 d    	 | r| j                   dkD  ry| j                  d| j                   z      dv S )Nr(   Tr   r  )r   rE   r   s    r/   r  zDecimal._iseven_  s1    Htyy1}yyDII&'11r1   c                 n    	 	 | j                   t        | j                        z   dz
  S # t        $ r Y yw xY w)Nr2   r(   )r   r   rE   ry   r   s    r/   r   zDecimal.adjustede  s8    2	99s499~-11 		s   $( 	44c                     	 | S r,   r-   r   s    r/   	canonicalzDecimal.canonicalm  s    	
 r1   c                 p    	 t        |d      }| j                  ||      }|r|S | j                  ||      S NTr   rp   )r   r   r   r   s       r/   compare_signalzDecimal.compare_signalu  sB    	
 u5&&ug6J||E7|33r1   c                 d   	 t        |d      }| j                  r|j                  st        S | j                  s|j                  rt        S | j                  }| j	                         }|j	                         }|s|r||k(  rnt        | j                        | j                  f}t        |j                        |j                  f}||k  r|rt        S t        S ||kD  r|rt        S t        S t        S |r,|dk(  rt        S |dk(  rt        S |dk(  rt        S |dk(  r2t        S |dk(  rt        S |dk(  rt        S |dk(  rt        S |dk(  rt        S | |k  rt        S | |kD  rt        S | j                  |j                  k  r|rt        S t        S | j                  |j                  kD  r|rt        S t        S t        S )NTr   r2   r   )	r   rD   _NegativeOner  r   r   rE   _Zeror   )r6   r   r7   rQ   self_nan	other_nanself_key	other_keys           r/   r  zDecimal.compare_total  s   	 ud3 ::ekkzzekkKzz ;;=LLN	y9$tyy>4994

OUZZ7	i'#++i'++#q=''>Kq=''>Kq=K>''q=K>''%<%<K99uzz!##99uzz!##r1   c                     	 t        |d      }| j                         }|j                         }|j                  |      S r   )r   r  r  )r6   r   r7   rZ  os        r/   compare_total_magzDecimal.compare_total_mag  s;    	 ud3MMONNq!!r1   c                 \    	 t        d| j                  | j                  | j                        S ra  )rC   rE   r   r   r   s    r/   r  zDecimal.copy_abs  s$    5499dii9I9IJJr1   c                     	 | j                   r,t        d| j                  | j                  | j                        S t        d| j                  | j                  | j                        S )Nr(   r2   )rD   rC   rE   r   r   r   s    r/   r  zDecimal.copy_negate  sJ    4::#Atyy$))T=M=MNN#Atyy$))T=M=MNNr1   c                     	 t        |d      }t        |j                  | j                  | j                  | j
                        S r   )r   rC   rD   rE   r   r   r   s      r/   	copy_signzDecimal.copy_sign  s9    2ud3TYY $		4+;+;= 	=r1   c                    	 |
t               }| j                  |      }|r|S | j                         dk(  rt        S | st        S | j                         dk(  rt        |       S |j                  }| j                         }| j                  dk(  rC|t        t        |j                  dz   dz              kD  rt        dd|j                  dz         }nE| j                  dk(  rK|t        t        |j                          dz   dz              kD  rt        dd|j                         dz
        }n| j                  dk(  r!|| k  rt        ddd|dz
  z  z   dz   |       }n| j                  dk(  r!|| dz
  k  rt        dd|dz   z  | dz
        }nt        |       }|j                  |j                   }}|j"                  dk(  r| }d}	 t%        ||||z         \  }	}
|	d	d
t        t        |	            |z
  dz
  z  z  z  rn|dz  }=t        dt        |	      |
      }|j'                         }|j)                  t*              }|j-                  |      }||_        |S )Nrp   r   r2   r(   r   r1  r   r^   r   r   )r   r   r   r  r  r   r`   r   rD   r   r   ra   rC   r6  r   r   r   rQ   _dexpr  r  r   r  r_   )r6   r7   rH   r  adjr  r  r  r  r   r   r_   s               r/   r   zDecimal.exp  sE    ? 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66266qAww!|B
 E"1a51
sAb3s5z?1#4Q#6778
	  #1c%j#6C '')((9hhw#
r1   c                      	 y)NTr-   r   s    r/   is_canonicalzDecimal.is_canonical1  s    	
 r1   c                     	 | j                    S r,   )r   r   s    r/   	is_finitezDecimal.is_finite9  s    	
 ####r1   c                 "    	 | j                   dk(  S )Nr   r   r   s    r/   r  zDecimal.is_infiniteA  s    FyyCr1   c                      	 | j                   dv S )Nr   r  r   s    r/   r   zDecimal.is_nanE  s    LyyJ&&r1   c                 t    	 | j                   s| sy|
t               }|j                  | j                         k  S NF)r   r   rf   r   r  s     r/   	is_normalzDecimal.is_normalI  s4    M4? lG||t}}..r1   c                 "    	 | j                   dk(  S )NrB   r  r   s    r/   r   zDecimal.is_qnanQ  s    IyyCr1   c                 "    	 | j                   dk(  S Nr2   )rD   r   s    r/   	is_signedzDecimal.is_signedU  s    FzzQr1   c                 "    	 | j                   dk(  S )Nr   r  r   s    r/   r   zDecimal.is_snanY  s    MyyCr1   c                 t    	 | j                   s| sy|
t               }| j                         |j                  k  S r  )r   r   r   rf   r  s     r/   is_subnormalzDecimal.is_subnormal]  s4    G4? lG}}--r1   c                 @    	 | j                    xr | j                  dk(  S r   r   r   s    r/   is_zerozDecimal.is_zeroe  s"    D###8		S(88r1   c                    	 | j                   t        | j                        z   dz
  }|dk\  rt        t        |dz  dz              dz
  S |dk  r t        t        d|z
  dz  dz              dz
  S t	        |       }|j
                  |j                  }}|dk(  r:t        |d| z  z
        }t        |      }t        |      t        |      z
  ||k  z
  S |t        t        d| z  |z
              z   dz
  S )Nr2      r   r   r   r(   r   r   rE   r   r   r   r   r6   r
  r  r  r  numdens          r/   _ln_exp_boundzDecimal._ln_exp_boundi  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           
         	 |
t               }| j                  |      }|r|S | st        S | j                         dk(  rt        S | t
        k(  rt        S | j                  dk(  r|j                  t        d      S t        |       }|j                  |j                  }}|j                  }|| j                         z
  dz   }	 t        |||      }|ddt!        t#        t%        |                  |z
  dz
  z  z  z  rn|dz  }@t'        t        |dk        t#        t%        |            |       }|j)                         }|j+                  t,              }	|j/                  |      }|	|_        |S )	Nrp   r2   zln of a negative valuer   r   r   r   r(   )r   r   _NegativeInfinityr   	_Infinityr  r  rD   r   r
   r   r   r   r`   r$  _dlogr   r   r   rC   r  r  r   r  r_   
r6   r7   rH   r  r  r  r  r  r   r_   s
             r/   lnz
Decimal.ln  sm   =? lG w/J $$ " 4<L ::?''(8(@B B d^vvrvv1LL T''))A-!Q'E"s3s5z?3A5a7889aKF  s57|SU_vgF'')((9hhw#
r1   c                    	 | j                   t        | j                        z   dz
  }|dk\  rt        t        |            dz
  S |dk  rt        t        d|z
              dz
  S t	        |       }|j
                  |j                  }}|dk(  r@t        |d| z  z
        }t        d|z        }t        |      t        |      z
  ||k  z
  dz   S t        d| z  |z
        }t        |      |z   |dk  z
  dz
  S )	Nr2   r   r   r(   r      r   231r   r!  s          r/   r  z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           
         	 |
t               }| j                  |      }|r|S | st        S | j                         dk(  rt        S | j
                  dk(  r|j                  t        d      S | j                  d   dk(  rZ| j                  dd  dt        | j                        dz
  z  k(  r/t        | j                  t        | j                        z   dz
        }nt        |       }|j                  |j                  }}|j                  }|| j!                         z
  dz   }	 t#        |||      }|dd	t        t%        t'        |                  |z
  dz
  z  z  z  rn|d
z  }@t)        t        |dk        t%        t'        |            |       }|j+                         }|j-                  t.              }	|j1                  |      }|	|_        |S )Nrp   r2   zlog10 of a negative valuer(   r1  r   r   r   r   r   )r   r   r&  r   r'  rD   r   r
   rE   r   r   r   r   r   r   r`   r  _dlog10r   r   rC   r  r  r   r  r_   r)  s
             r/   log10zDecimal.log10  s   4? lG w/J $$ " ::?''(8(CE E 99Q<3499QR=CTYY!9K4L#L$))c$))n4q89C $B66266qAA t,,..q0F1f-Ab3s3u:#7#9!#;<<=!  #3uQw<SZ6'JC'')((9hhw#
r1   c                     	 | j                  |      }|r|S |
t               }| j                         rt        S | s|j	                  t
        dd      S t        | j                               }|j                  |      S )Nrp   zlogb(0)r2   )	r   r   r   r'  r   r   r   r   r  r  s      r/   logbzDecimal.logb  s    	 w/J? lG  ''	1EE
 dmmo&xx  r1   c                 r    	 | j                   dk7  s| j                  dk7  ry| j                  D ]  }|dvs y y)Nr(   F01T)rD   r   rE   )r6   digs     r/   
_islogicalzDecimal._islogical#  sC    	 ::?dii1n99 	C$	 r1   c                     |j                   t        |      z
  }|dkD  r	d|z  |z   }n|dk  r||j                    d  }|j                   t        |      z
  }|dkD  rd|z  |z   }||fS |dk  r||j                    d  }||fS )Nr(   r   )r`   r   )r6   r7   opaopbdifs        r/   _fill_logicalzDecimal._fill_logical1  s    llSX%7c'C-C1Ww||mn%CllSX%7c'C-C Cx 1Ww||mn%CCxr1   c                    	 |
t               }t        |d      }| j                         r|j                         s|j                  t              S | j                  || j                  |j                        \  }}dj                  t        ||      D cg c]%  \  }}t        t        |      t        |      z        ' c}}      }t        d|j                  d      xs dd      S c c}}w NTr   r   r(   r   r   r   r6  r   r
   r;  rE   r   zipr   r   rC   r   r6   r   r7   r8  r9  r  br   s           r/   logical_andzDecimal.logical_and>      I? lGud3 (8(8(:''(899 ''EJJG
c CE1#c!fSVm,EF6==#5#<a@@ F   *C&
c                 p    	 |
t               }| j                  t        dd|j                  z  d      |      S )Nr(   r1  )r   logical_xorrC   r`   r  s     r/   logical_invertzDecimal.logical_invertO  s<    $? lG 03w||3CA F ') 	)r1   c                    	 |
t               }t        |d      }| j                         r|j                         s|j                  t              S | j                  || j                  |j                        \  }}dj                  t        ||      D cg c]%  \  }}t        t        |      t        |      z        ' c}}      }t        d|j                  d      xs dd      S c c}}w r=  r>  r@  s           r/   
logical_orzDecimal.logical_orV  s    H? lGud3 (8(8(:''(899 ''EJJG
c CE1#c!fSVm,EF6==#5#<a@@ FrD  c                    	 |
t               }t        |d      }| j                         r|j                         s|j                  t              S | j                  || j                  |j                        \  }}dj                  t        ||      D cg c]%  \  }}t        t        |      t        |      z        ' c}}      }t        d|j                  d      xs dd      S c c}}w r=  r>  r@  s           r/   rF  zDecimal.logical_xorg  rC  rD  c                    	 t        |d      }|
t               }| j                  s|j                  rl| j                         }|j                         }|s|rH|dk(  r|dk(  r| j	                  |      S |dk(  r|dk(  r|j	                  |      S | j                  ||      S | j                         j                  |j                               }|dk(  r| j                  |      }|dk(  r|}n| }|j	                  |      S r  	r   r   r   r   r  r   r  r   r  r  s          r/   max_magzDecimal.max_magx  s    Fud3? lGu00 BBR7rQw99W--7rQw ::g..''w77MMO  !126""5)A7CCxx  r1   c                    	 t        |d      }|
t               }| j                  s|j                  rl| j                         }|j                         }|s|rH|dk(  r|dk(  r| j	                  |      S |dk(  r|dk(  r|j	                  |      S | j                  ||      S | j                         j                  |j                               }|dk(  r| j                  |      }|dk(  r| }n|}|j	                  |      S r  rL  r  s          r/   min_magzDecimal.min_mag  s    Fud3? lGu00 BBR7rQw99W--7rQw ::g..''w77MMO  !126""5)A7CCxx  r1   c                    	 |
t               }| j                  |      }|r|S | j                         dk(  rt        S | j                         dk(  r(t	        dd|j
                  z  |j                               S |j                         }|j                  t               |j                          | j                  |      }|| k7  r|S | j                  t	        dd|j                         dz
        |      S )Nrp   r   r2   r(   r^   r1  )r   r   r   r&  rC   r`   rn  rr   r  r   _ignore_all_flagsr  r-  r6  r6   r7   rH   new_selfs       r/   
next_minuszDecimal.next_minus  s    K? lGw/J#$$"#As7<<'7HH,,.k*!!#99W%tO||,QW]]_Q5FG#% 	%r1   c                    	 |
t               }| j                  |      }|r|S | j                         dk(  rt        S | j                         dk(  r(t	        dd|j
                  z  |j                               S |j                         }|j                  t               |j                          | j                  |      }|| k7  r|S | j                  t	        dd|j                         dz
        |      S )Nrp   r2   r   r^   r(   r1  )r   r   r   r'  rC   r`   rn  rr   r  r   rQ  r  r+  r6  rR  s       r/   	next_pluszDecimal.next_plus  s    K? lGw/J"##As7<<'7HH,,.m,!!#99W%tO||,QW]]_Q5FG#% 	%r1   c                    	 t        |d      }|
t               }| j                  ||      }|r|S | j                  |      }|dk(  r| j	                  |      S |dk(  r| j                  |      }n| j                  |      }|j                         rM|j                  t        d|j                         |j                  t               |j                  t               |S |j                         |j                  k  rk|j                  t               |j                  t                |j                  t               |j                  t               |s|j                  t"               |S )NTr   r(   r   z Infinite result from next_toward)r   r   r   r   r  rV  rT  r   r   r   rD   r   r   r   rf   r   r   r	   )r6   r   r7   rH   
comparisons        r/   next_towardzDecimal.next_toward  s2   	 ud3? lGug.JYYu%
?>>%((..)C//'*C ??  !C!$,   )  ) 
 \\^gll*  +  +  )  ) $$W-
r1   c                 0   	 | j                         ry| j                         ry| j                         }|dk(  ry|dk(  ry| j                         r| j                  ryy|
t               }| j                  |	      r| j                  ry
y| j                  ryy)Nr   r  r2   z	+Infinityr   z	-Infinityz-Zeroz+Zerorp   z
-Subnormalz
+Subnormalz-Normalz+Normal)r   r   r   r  rD   r   r  )r6   r7   infs      r/   number_classzDecimal.number_class  s    	 <<><<> !8"9<<>zz? lGW-zz##::r1   c                     	 t        d      S Nr   rb  r   s    r/   radixzDecimal.radix:  s    5r{r1   c                 n   	 |
t               }t        |d      }| j                  ||      }|r|S |j                  dk7  r|j	                  t
              S |j                   t        |      cxk  r|j                  k  sn |j	                  t
              S | j                         rt        |       S t        |      }| j                  }|j                  t        |      z
  }|dkD  r	d|z  |z   }n|dk  r|| d  }||d  |d | z   }t        | j                  |j                  d      xs d| j                        S NTr   r(   r   r   r   r   r   r   r
   r`   r   r   r   rE   r   rC   rD   r   )r6   r   r7   rH   torotrotdigtopadrotateds           r/   rotatezDecimal.rotate>  s*   C? lGud3ug.J::?''(899U;w||;''(8994=  E
s6{*19Y'FQYUFG_F .6&5>1

 's 3 :sDIIG 	Gr1   c                 :   	 |
t               }t        |d      }| j                  ||      }|r|S |j                  dk7  r|j	                  t
              S d|j                  |j                  z   z  }d|j                  |j                  z   z  }|t        |      cxk  r|k  sn |j	                  t
              S | j                         rt        |       S t        | j                  | j                  | j                  t        |      z         }|j                  |      }|S )NTr   r(   r   r   )r   r   r   r   r   r
   ra   r`   r   r   r   rC   rD   rE   r  )r6   r   r7   rH   liminflimsupr   s          r/   scalebzDecimal.scaleb_  s    L? lGud3ug.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                    	 |
t               }t        |d      }| j                  ||      }|r|S |j                  dk7  r|j	                  t
              S |j                   t        |      cxk  r|j                  k  sn |j	                  t
              S | j                         rt        |       S t        |      }| j                  }|j                  t        |      z
  }|dkD  r	d|z  |z   }n|dk  r|| d  }|dk  r|d | }n|d|z  z   }||j                   d  }t        | j                  |j                  d      xs d| j                        S ra  rb  )r6   r   r7   rH   rc  rd  re  shifteds           r/   r8  zDecimal.shiftx  sF   C? lGud3ug.J::?''(899U;w||;''(8994=  E
s6{*19Y'FQYUFG_F 19VenGs5y(Gw||mn-G

$+NN3$7$>3		K 	Kr1   c                 2    | j                   t        |       ffS r,   )	__class__r   r   s    r/   
__reduce__zDecimal.__reduce__  s    T--r1   c                 \    t        |       t        u r| S | j                  t        |             S r,   typer   ro  r   r   s    r/   __copy__zDecimal.__copy__  &    : K~~c$i((r1   c                 \    t        |       t        u r| S | j                  t        |             S r,   rr  )r6   memos     r/   __deepcopy__zDecimal.__deepcopy__  ru  r1   c                    	 |
t               }t        ||      }| j                  rIt        | j                  |      }t        | j                               }|d   dk(  r|dz  }t        |||      S |d   ddg|j                     |d<   |d   dk(  r.t        | j                  | j                  | j                  dz         } |j                  }|d   }|i|d   dv r| j                  |d	z   |      } nL|d   d
v r| j                  | |      } n1|d   dv r*t        | j                        |kD  r| j                  ||      } | s(| j                  dkD  r|d   d
v r| j                  d|      } | s|d   r| j                  rd}	n| j                  }	| j                  t        | j                        z   }
|d   dv r| s|d	|z
  }n-d	}n*|d   d
v r|
}n |d   dv r| j                  dk  r|
dkD  r|
}nd	}dk  rd}d| z  | j                  z   }ne|t        | j                        kD  r+| j                  d|t        | j                        z
  z  z   }d}n"| j                  d | xs d}| j                  |d  }|
|z
  }t!        |	||||      S )N)_localeconvrs  %gGr   	precisioneEr2   zfF%gGr(   no_neg_0r  r   r   )r   _parse_format_specifierr   _format_signrD   r   r  _format_alignrg   rC   rE   r   r_   r  r&  r   _format_number)r6   	specifierr7   rz  specrQ   bodyr_   r~  adjusted_signr  r  r   r   r   s                  r/   
__format__zDecimal.__format__  s   	 ? lG&ykJ 

D1Dt}}'DF|s" tT22 <:g&6&67DL <3#DJJ		499Q;GD ##%	 F|t#{{9Q;9f&}}iZ:f%#dii.9*D{{9h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! mWhTJJr1   )r   N)NNr,   )FN)TN)r:   r;   r<   	__slots__r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r	  r  r  r  r   r#  r+  __radd__r-  r/  r4  __rmul__r;  r@  rB  rH  rJ  rL  rN  rR  rT  rV  r[  r]  	__trunc__propertyr_  rc  re  rh  rF   r  ry  r{  r~  r  r  r  r  r  dictro  r  r  r  r  r  r  r  r  r  r  r  r&  r  r  r  to_integralr  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  r0  r2  r6  r;  rB  rG  rI  rF  rM  rO  rT  rV  rY  r\  r_  rg  rk  r8  rp  rt  rx  r  r-   r1   r/   r   r     s   66I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k?Z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                 r    	 t         j                  t              }| |_        ||_        ||_        ||_        |S r,   )r   r   r   rD   rE   r   r   )rQ   coefficientr  specialr6   s        r/   rC   rC     s9     >>'"DDJDIDIDKr1   c                        e Zd Z	 d Zd Zd Zy)rv   c                 .    |j                         | _        y r,   )rr   r{   )r6   r{   s     r/   __init__z_ContextManager.__init__"  s    &++-r1   c                 b    t               | _        t        | j                         | j                  S r,   )r   saved_contextr   r{   r   s    r/   	__enter__z_ContextManager.__enter__$  s&    '\4##$r1   c                 .    t        | j                         y r,   )r   r  )r6   tvtbs       r/   __exit__z_ContextManager.__exit__(  s    4%%&r1   N)r:   r;   r<   r  r  r  r-   r1   r/   rv   rv     s    
. 'r1   rv   c                      e Zd Z	 	 	 	 dSdZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd ZeZdTdZd Zd Zd ZdZd Zd Zd ZdUdZd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3d1 Z4d2 Z5d3 Z6d4 Z7d5 Z8d6 Z9d7 Z:d8 Z;d9 Z<d: Z=d; Z>d< Z?d= Z@d> ZAd? ZBd@ ZCdA ZDdB ZEdC ZFdTdDZGdE ZHdF ZIdG ZJdH ZKdI ZLdJ ZMdK ZNdL ZOdM ZPdN ZQdO ZRdP ZSdQ ZTdR ZUeUZVy)Vr   Nc
                    	 t         }
||n
j                  | _        ||n
j                  | _        ||n
j                  | _        ||n
j
                  | _        ||n
j                  | _        ||n
j                  | _        |	g | _        n|	| _         
j                  j                         | _	        n8t        t              s!t        fdt        z   D              | _	        n| _	         t        j                  t        d      | _        y t        t              s!t        fdt        z   D              | _        y | _        y # t        $ r Y Pw xY w)Nc              3   <   K   | ]  }|t        |v       f  y wr,   r   ).0rZ  rj   s     r/   	<genexpr>z#Context.__init__.<locals>.<genexpr>W       Mqq#a5j/2M   r(   c              3   <   K   | ]  }|t        |v       f  y wr,   r  )r  rZ  ri   s     r/   r  z#Context.__init__.<locals>.<genexpr>^  r  r  )r   	NameErrorr`   r_   rf   ra   rg   rh   _ignored_flagsrj   rr   r   r  r  fromkeysri   )r6   r`   r_   rf   ra   rg   rh   ri   rj   r  dcs          ``  r/   r  zContext.__init__>  s"   
	B !,D"''	$,$8bkk ,D"''	 ,D"''	$,$8bkk#/URXX
!"$D"0D=DJE4(MHu<LMMDJDJ=x3DJE4(MHu<LMMDJDJ7  		s   E 	EEc                    t        |t              st        d|z        |dk(  r||kD  rJt        d||||fz        |dk(  r||k  r.t        d||||fz        ||k  s||kD  rt        d||||fz        t        j                  | ||      S )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   ry   r   r   __setattr__)r6   namer   vminvmaxs        r/   _set_integer_checkzContext._set_integer_checkb  s    %%3d:;;6>t| !BdDRVX]E^!^__U]t| !BdDRVX]E^!^__t|ut| !AT4QUW\D]!]^^!!$e44r1   c                     t        |t              st        d|z        |D ]  }|t        vst	        d|z         t        D ]  }||vst	        d|z         t
        j                  | ||      S )Nz%s must be a signal dictz%s is not a valid signal dict)r   r  ry   r  KeyErrorr   r  )r6   r  r   r   s       r/   _set_signal_dictzContext._set_signal_dictp  s    !T"6:;; 	DC(?>BCC	D  	DC!8>BCC	D !!$a00r1   c                    |dk(  r| j                  ||dd      S |dk(  r| j                  ||dd      S |dk(  r| j                  ||dd      S |dk(  r| j                  ||dd      S |d	k(  r| j                  ||dd      S |d
k(  r-|t        vrt        d|z        t        j	                  | ||      S |dk(  s|dk(  r| j                  ||      S |dk(  rt        j	                  | ||      S t        d|z        )Nr`   r2   r[  rf   r  r(   ra   rg   rh   r_   z%s: invalid rounding moderi   rj   r  z.'decimal.Context' object has no attribute '%s')r  _rounding_modesry   r   r  r  AttributeError)r6   r  r   s      r/   r  z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%%dD%88W_((u55%%%%dD%88 @4GI Ir1   c                     t        d|z        )Nz%s cannot be deleted)r  )r6   r  s     r/   __delattr__zContext.__delattr__  s    3d:;;r1   c           	      z   | j                   j                         D cg c]
  \  }}|s	| }}}| j                  j                         D cg c]
  \  }}|s	| }}}| j                  | j                  | j
                  | j                  | j                  | j                  | j                  ||ffS c c}}w c c}}w r,   )
ri   rw   rj   ro  r`   r_   rf   ra   rg   rh   )r6   sigr  ri   rj   s        r/   rp  zContext.__reduce__  s    #'::#3#3#5;a;;#'::#3#3#5;a;;DMM499dii

E5:; 	; <;s   
B1B1
B7B7c                    	 g }|j                  dt        |       z         | j                  j                         D cg c]  \  }}|s	|j                   }}}|j                  ddj                  |      z   dz          | j                  j                         D cg c]  \  }}|s	|j                   }}}|j                  ddj                  |      z   dz          dj                  |      dz   S c c}}w c c}}w )NzrContext(prec=%(prec)d, rounding=%(rounding)s, Emin=%(Emin)d, Emax=%(Emax)d, capitals=%(capitals)d, clamp=%(clamp)dzflags=[, ]ztraps=[))r   varsri   rw   r:   r   rj   )r6   rZ  r   r  namesr  s         r/   r	  zContext.__repr__  s    '	 # : 	 )-

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

(8(8(:@1a@@	TYYu--34yy|c!!	 A@s   
C3	C3
C9(C9c                 F    	 | j                   D ]  }d| j                   |<    y ra  )ri   r6   flags     r/   rs   zContext.clear_flags  &    %JJ 	!D DJJt	!r1   c                 F    	 | j                   D ]  }d| j                   |<    y ra  )rj   r  s     r/   clear_trapszContext.clear_traps  r  r1   c                     	 t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  	      }|S r,   )
r   r`   r_   rf   ra   rg   rh   ri   rj   r  r6   ncs     r/   r  zContext._shallow_copy  sP    /TYYtyy$))]]DJJ

DJJ((* 	r1   c                    	 t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  j                         | j                  j                         | j                  	      }|S r,   )r   r`   r_   rf   ra   rg   rh   ri   rr   rj   r  r  s     r/   rr   zContext.copy  s_    ,TYYtyy$))]]DJJZZ__&

(9((* 	r1   c                     	 t         j                  ||      }|| j                  v r  |       j                  | g| S d| j                  |<   | j
                  |   s  |       j                  | g| S  ||      r  )_condition_maprm   r  r8   ri   rj   )r6   	conditionexplanationr.   errors        r/   r   zContext._raise_error  s    	 ""9i8D'''!57>>$...

5zz% %9;%%d2T22 K  r1   c                 *    	  | j                   t         S r,   )_ignore_flagsr  r   s    r/   rQ  zContext._ignore_all_flags  s    2!t!!8,,r1   c                 T    	 | j                   t        |      z   | _         t        |      S r,   )r  r   )r6   ri   s     r/   r  zContext._ignore_flags  s(    2  $22T%[@E{r1   c                     	 |rt        |d   t        t        f      r|d   }|D ]  }| j                  j	                  |        y ra  )r   r   r   r  remove)r6   ri   r  s      r/   _regard_flagszContext._regard_flags  sE    9Za5,7!HE 	-D&&t,	-r1   c                 N    	 t        | j                  | j                  z
  dz         S r  )r   rf   r`   r   s    r/   r6  zContext.Etiny  s"    /499tyy(1,--r1   c                 N    	 t        | j                  | j                  z
  dz         S r  )r   ra   r`   r   s    r/   rn  zContext.Etop  s"    :499tyy(1,--r1   c                 .    	 | j                   }|| _         |S r,   )r_   )r6   rs  r_   s      r/   r  zContext._set_rounding  s    	 ==r1   c                 d   	 t        |t              r-||j                         k7  sd|v r| j                  t        d      S t        ||       }|j                         rEt        |j                        | j                  | j                  z
  kD  r| j                  t        d      S |j                  |       S )Nr   zAtrailing or leading whitespace and underscores are not permitted.rp   zdiagnostic info too long in NaN)r   r   r   r   r   r   r   r   rE   r`   rh   r  )r6   r"  r   s      r/   create_decimalzContext.create_decimal  s    	&
 c3SCIIK%73#:$$%5&FG G C&88:#aff+		DJJ(>>$$%5%FH Hvvd|r1   c                 P    	 t         j                  |      }|j                  |       S r,   )r   r   r  )r6   r   r   s      r/   create_decimal_from_floatz!Context.create_decimal_from_float  s'    	 q!vvd|r1   c                 B    	 t        |d      }|j                  |       S r  )r   r#  r6   r  s     r/   r   zContext.abs/  s&    	" 1d+yyy&&r1   c                 t    	 t        |d      }|j                  ||       }|t        u rt        d|z        |S NTr   rp   Unable to convert %s to Decimal)r   r+  r   ry   r6   r  rA  r?  s       r/   addzContext.addD  sE    	 1d+IIaI&=ABBHr1   c                 6    t        |j                  |             S r,   )r   r  r  s     r/   _applyzContext._applyY  s    166$<  r1   c                 Z    	 t        |t              st        d      |j                         S )Nz,canonical requires a Decimal as an argument.)r   r   ry   r  r  s     r/   r  zContext.canonical\  s+    	 !W%JKK{{}r1   c                 D    	 t        |d      }|j                  ||       S r  )r   r   r6   r  rA  s      r/   r   zContext.comparei  s)    	@ 1d+yyDy))r1   c                 D    	 t        |d      }|j                  ||       S r  )r   r  r  s      r/   r  zContext.compare_signal  s+    	> 1d+400r1   c                 @    	 t        |d      }|j                  |      S r   )r   r  r  s      r/   r  zContext.compare_total  s$    	2 1d+q!!r1   c                 @    	 t        |d      }|j                  |      S r   )r   r  r  s      r/   r  zContext.compare_total_mag  s&    	 1d+""1%%r1   c                 >    	 t        |d      }|j                         S r   )r   r  r  s     r/   r  zContext.copy_abs  s!    	 1d+zz|r1   c                 4    	 t        |d      }t        |      S r   )r   r   r  s     r/   copy_decimalzContext.copy_decimal  s    	 1d+qzr1   c                 >    	 t        |d      }|j                         S r   )r   r  r  s     r/   r  zContext.copy_negate  s!    	 1d+}}r1   c                 @    	 t        |d      }|j                  |      S r   )r   r  r  s      r/   r  zContext.copy_sign  s#    	( 1d+{{1~r1   c                 t    	 t        |d      }|j                  ||       }|t        u rt        d|z        |S r  )r   r;  r   ry   r  s       r/   dividezContext.divide  sE    	: 1d+MM!TM*=ABBHr1   c                 t    	 t        |d      }|j                  ||       }|t        u rt        d|z        |S r  )r   rT  r   ry   r  s       r/   
divide_intzContext.divide_int9  sE    	 1d+NN1dN+=ABBHr1   c                 t    	 t        |d      }|j                  ||       }|t        u rt        d|z        |S r  )r   rH  r   ry   r  s       r/   r7  zContext.divmodP  sE    	 1d+LLDL)=ABBHr1   c                 B    	 t        |d      }|j                  |       S r  )r   r   r  s     r/   r   zContext.expe  s&    	( !T*uuTu""r1   c                 F    	 t        |d      }|j                  |||       S r  )r   r  )r6   r  rA  r  s       r/   r  zContext.fma}  s*    	& 1d+uuQ4u((r1   c                 Z    	 t        |t              st        d      |j                         S )Nz/is_canonical requires a Decimal as an argument.)r   r   ry   r  r  s     r/   r  zContext.is_canonical  s,    	 !W%MNN~~r1   c                 >    	 t        |d      }|j                         S r   )r   r  r  s     r/   r  zContext.is_finite  s!    	$ 1d+{{}r1   c                 >    	 t        |d      }|j                         S r   )r   r  r  s     r/   r  zContext.is_infinite  s!    
	 1d+}}r1   c                 >    	 t        |d      }|j                         S r   )r   r   r  s     r/   r   zContext.is_nan  s!    	 1d+xxzr1   c                 B    	 t        |d      }|j                  |       S r  )r   r  r  s     r/   r  zContext.is_normal  s&    	& 1d+{{4{((r1   c                 >    	 t        |d      }|j                         S r   )r   r   r  s     r/   r   zContext.is_qnan  s!    
	 1d+yy{r1   c                 >    	 t        |d      }|j                         S r   )r   r  r  s     r/   r  zContext.is_signed  s!    	 1d+{{}r1   c                 >    	 t        |d      }|j                         S r   )r   r   r  s     r/   r   zContext.is_snan  s!    	 1d+yy{r1   c                 B    	 t        |d      }|j                  |       S r  )r   r  r  s     r/   r  zContext.is_subnormal  s&    	$ 1d+~~d~++r1   c                 >    	 t        |d      }|j                         S r   )r   r  r  s     r/   r  zContext.is_zero3  s!    	 1d+yy{r1   c                 B    	 t        |d      }|j                  |       S r  )r   r*  r  s     r/   r*  z
Context.lnD  s&    	$ 1d+ttDt!!r1   c                 B    	 t        |d      }|j                  |       S r  )r   r0  r  s     r/   r0  zContext.log10Z  s&    	0 1d+wwtw$$r1   c                 B    	 t        |d      }|j                  |       S r  )r   r2  r  s     r/   r2  zContext.logbv  s&    	, 1d+vvdv##r1   c                 D    	 t        |d      }|j                  ||       S r  )r   rB  r  s      r/   rB  zContext.logical_and  (    	. 1d+}}Q}--r1   c                 B    	 t        |d      }|j                  |       S r  )r   rG  r  s     r/   rG  zContext.logical_invert  s)    	 1d+--r1   c                 D    	 t        |d      }|j                  ||       S r  )r   rI  r  s      r/   rI  zContext.logical_or  s(    	. 1d+||At|,,r1   c                 D    	 t        |d      }|j                  ||       S r  )r   rF  r  s      r/   rF  zContext.logical_xor  r
  r1   c                 D    	 t        |d      }|j                  ||       S r  )r   r%  r  s      r/   r%  zContext.max  (    	. 1d+uuQu%%r1   c                 D    	 t        |d      }|j                  ||       S r  )r   rM  r  s      r/   rM  zContext.max_mag  (    	 1d+yyDy))r1   c                 D    	 t        |d      }|j                  ||       S r  )r   r  r  s      r/   r  zContext.min   r  r1   c                 D    	 t        |d      }|j                  ||       S r  )r   rO  r  s      r/   rO  zContext.min_mag;  r  r1   c                 B    	 t        |d      }|j                  |       S r  )r   r  r  s     r/   minuszContext.minusL  &    	 1d+yyy&&r1   c                 t    	 t        |d      }|j                  ||       }|t        u rt        d|z        |S r  )r   r4  r   ry   r  s       r/   multiplyzContext.multiply]  sE    	0 1d+IIaI&=ABBHr1   c                 B    	 t        |d      }|j                  |       S r  )r   rT  r  s     r/   rT  zContext.next_minus}  s&    	  1d+||D|))r1   c                 B    	 t        |d      }|j                  |       S r  )r   rV  r  s     r/   rV  zContext.next_plus  s&    	  1d+{{4{((r1   c                 D    	 t        |d      }|j                  ||       S r  )r   rY  r  s      r/   rY  zContext.next_toward  s(    	> 1d+}}Q}--r1   c                 B    	 t        |d      }|j                  |       S r  )r   r  r  s     r/   r  zContext.normalize  s&    	( 1d+{{4{((r1   c                 B    	 t        |d      }|j                  |       S r  )r   r\  r  s     r/   r\  zContext.number_class  s'    -	\ 1d+~~d~++r1   c                 B    	 t        |d      }|j                  |       S r  )r   r   r  s     r/   pluszContext.plus  r  r1   c                 v    	 t        |d      }|j                  |||       }|t        u rt        d|z        |S r  )r   r  r   ry   )r6   r  rA  r  r?  s        r/   powerzContext.power#  sI    G	P 1d+IIaI.=ABBHr1   c                 D    	 t        |d      }|j                  ||       S r  )r   r  r  s      r/   r  zContext.quantizes  s)    5	l 1d+zz!Tz**r1   c                     	 t        d      S r^  rb  r   s    r/   r_  zContext.radix  s    	
 r{r1   c                 t    	 t        |d      }|j                  ||       }|t        u rt        d|z        |S r  )r   rL  r   ry   r  s       r/   r9  zContext.remainder  sE    	< 1d+IIaI&=ABBHr1   c                 D    	 t        |d      }|j                  ||       S r  )r   rR  r  s      r/   rR  zContext.remainder_near  s+    	< 1d+400r1   c                 D    	 t        |d      }|j                  ||       S r  )r   rg  r  s      r/   rg  zContext.rotate  s(    	2 1d+xx4x((r1   c                 @    	 t        |d      }|j                  |      S r   )r   r  r  s      r/   r  zContext.same_quantum  s$    	( 1d+~~a  r1   c                 D    	 t        |d      }|j                  ||       S r  )r   rk  r  s      r/   rk  zContext.scaleb2  s(    	 1d+xx4x((r1   c                 D    	 t        |d      }|j                  ||       S r  )r   r8  r  s      r/   r8  zContext.shiftE  s(    	4 1d+wwq$w''r1   c                 B    	 t        |d      }|j                  |       S r  )r   r  r  s     r/   r  zContext.sqrtc  s&    	8 1d+vvdv##r1   c                 t    	 t        |d      }|j                  ||       }|t        u rt        d|z        |S r  )r   r-  r   ry   r  s       r/   subtractzContext.subtract  sE    	 1d+IIaI&=ABBHr1   c                 B    	 t        |d      }|j                  |       S r  )r   r  r  s     r/   r  zContext.to_eng_string  s&    	0 1d+t,,r1   c                 B    	 t        |d      }|j                  |       S r  )r   r  r  s     r/   to_sci_stringzContext.to_sci_string  s&    	 1d+yyy&&r1   c                 B    	 t        |d      }|j                  |       S r  )r   r  r  s     r/   r  zContext.to_integral_exact  s)    	4 1d+""4"00r1   c                 B    	 t        |d      }|j                  |       S r  )r   r  r  s     r/   r  zContext.to_integral_value  s)    	2 1d+""4"00r1   )	NNNNNNNNNr,   )r   )Wr:   r;   r<   r  r  r  r  r  rp  r	  rs   r  r  rr   rt  r   rQ  r  r  r   r6  rn  r  r  r  r   r  r  r  r   r  r  r  r  r  r  r  r  r  r7  r   r  r  r  r  r   r  r   r  r   r  r  r*  r0  r2  rB  rG  rI  rF  r%  rM  r  rO  r  r  rT  rV  rY  r  r\  r  r!  r  r_  r9  rR  rg  r  rk  r8  r  r,  r  r/  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                       e Zd ZdZddZd Zy)r   rQ   r   r   Nc                 
   |d | _         d| _        d | _        y t        |t              r=|j
                  | _         t        |j                        | _        |j                  | _        y |d   | _         |d   | _        |d   | _        y )Nr(   r2   r   )rQ   r   r   r   r   rD   rE   r   )r6   r   s     r/   r  z_WorkRep.__init__  sn    =DIDHDHw'DI5::DHzzDH aDIQxDHQxDHr1   c                 V    d| j                   d| j                  d| j                  dS )N(r  r  r3  r   s    r/   r	  z_WorkRep.__repr__  s    !%DHHdhh??r1   r,   )r:   r;   r<   r  r  r	  r-   r1   r/   r   r     s    $I
 @r1   r   c                    	 | j                   |j                   k  r|}| }n| }|}t        t        |j                              }t        t        |j                              }|j                   t	        d||z
  dz
        z   }||j                   z   dz
  |k  rd|_        ||_         |xj                  d|j                   |j                   z
  z  z  c_        |j                   |_         | |fS )Nr   r   r2   r   )r   r   r   r   r  )r)  r*  r`   tmpr   tmp_len	other_lenr   s           r/   r'  r'    s     ww #cgg,GC		N#I
''CGdNQ./
/C599q 3&		GGrcgg		)**GiiCG8Or1   c                     	 | dk(  ry|dk\  r| d|z  z  S t        t        |             }t        |      t        |j                  d            z
  }|| k  rd S | d| z  z  S )Nr(   r   r   )r   r   r   rstrip)rB   r  str_nval_ns       r/   r  r  6  sp    	 	Av	
a2q5y CFE
Sc!233rzt2qBF{2r1   c                 h    	 | dk  s|dk  rt        d      d}||k7  r|||  |z  z
  dz	  }}||k7  r|S )Nr(   z3Both arguments to _sqrt_nearest should be positive.r2   )r   )rB   r  rA  s      r/   _sqrt_nearestr@  K  sS     	AvaNOOA
q&!QBE'1*1 q&Hr1   c                 F    	 d|z  | |z	  }}|d| |dz
  z  z  |dz  z   |kD  z   S )Nr2   r   r-   )r  r8  rA  r>  s       r/   _rshift_nearestrB  Z  s?     :qEzqA1!91%)**r1   c                 D    	 t        | |      \  }}|d|z  |dz  z   |kD  z   S )Nr   r2   )r7  )r  rA  r>  r?  s       r/   _div_nearestrD  b  s3     !Q<DAq!qsa  r1   c                 D   	 | |z
  }d}||k  rt        |      ||z
  z  |k\  s||kD  r|t        |      ||z
  z	  |k\  rht        ||z  dz  |t        ||t        ||      z   z  |      z         }|dz  }||k  rt        |      ||z
  z  |k\  rN||kD  rt        |      ||z
  z	  |k\  rht	        dt        t        |            z  d|z  z         }t        ||      }t        ||      }t        |dz
  dd      D ]  }t        ||      t        ||z  |      z
  }  t        ||z  |      S )Nr(   r2   r   r   )r   rD  r@  rB  r   r   r   r  )	r  MLr  RTyshiftwr   s	            r/   _ilogrM  j  sF   : 	
!A	A6c!f!mq(q5SVqs]a'!A#!]1a10E.E+FJJL	Q	 6c!f!mq(q5SVqs]a' 
SSV_qs#	$$AQ"FQA1Q32 ;AfQh!::; !Qr1   c                 L   	 |dz  }t        t        |             }||z   ||z   dk\  z
  }|dkD  rWd|z  }||z   |z
  }|dk\  r	| d|z  z  } nt        | d| z        } t        | |      }t	        |      }t        ||z  |      }||z  }	nd}t        |d| z        }	t        |	|z   d      S Nr   r2   r(   r   r  )r   r   rD  rM  _log10_digits)
r  r  r  r  r   rG  r   log_dlog_10log_tenpowers
             r/   r/  r/    s    : FA 	CFA	!qsaxA1uEaCE6QJAQQB'Aaq!U1Wf-s#ArA2v.U*C00r1   c                    	 |dz  }t        t        |             }||z   ||z   dk\  z
  }|dkD  r6||z   |z
  }|dk\  r	| d|z  z  } nt        | d| z        } t        | d|z        }nd}|rJt        t        t	        |                  dz
  }||z   dk\  rt        |t        ||z         z  d|z        }nd}nd}t        ||z   d      S rO  )r   r   rD  rM  r   rP  )	r  r  r  r  r   r   rQ  r  	f_log_tens	            r/   r(  r(    s    : FA
 	CFA	!qsaxA 	1uaCE6QJAQQB'A aQ  	CAK "u9> %Q}QuW'=%=r5yIII	 	E)3//r1   c                       e Zd Z	 d Zd Zy)_Log10Memoizec                     d| _         y )N/23025850929940456840179914546843642076011014886)r   r   s    r/   r  z_Log10Memoize.__init__  s	    Gr1   c                 B   	 |dk  rt        d      |t        | j                        k\  r\d}	 d||z   dz   z  }t        t	        t        d|z  |      d            }|| d  d|z  k7  rn|dz  }@|j                  d      d d | _        t        | j                  d |d	z          S )
Nr(   zp should be nonnegativer   r   r   r  r   r   r2   )r   r   r   r   rD  rM  r<  r   )r6   r  r  rG  r   s        r/   	getdigitsz_Log10Memoize.getdigits  s    	 q5677DKK   E5O\%1a.#>?5&'?c%i/
  !--,Sb1DK4;;t!$%%r1   N)r:   r;   r<   r  r[  r-   r1   r/   rW  rW    s    CH&r1   rW  c                 R   	 t        | |z  |z        }t        dt        t        |            z  d|z  z         }t	        | |      }||z  }t        |dz
  dd      D ]  }t	        | ||z   z  ||z        } t        |dz
  dd      D ]  }||dz   z  }t	        |||z   z  |      } ||z   S )NrF  r   r2   r(   r   r   )r  r   r   r   rD  r  )	r  rG  rH  rI  rJ  r  Mshiftr  r   s	            r/   _iexpr^    s    !( 	1qyA 
SSV_qs#	$$AQATF1Q32 5FQJ!45 1Q3B /QqSAfHv./ Q3Jr1   c           	      (   	 |dz  }t        d|t        t        |             z   dz
        }||z   }||z   }|dk\  r	| d|z  z  }n	| d| z  z  }t        |t	        |            \  }}t        |d|z        }t        t        |d|z        d      ||z
  dz   fS )Nr   r(   r2   r   i  r   )r%  r   r   r7  rP  rD  r^  )	r  r  r  r  r>  r8  cshiftquotr  s	            r/   r	  r	  2  s    4 FA 1s3q6{?Q&'E	E	A aCEz2u9BJv}Q/0ID# sBI
&C c2q5)40$(Q,>>r1   c                    	 t        t        t        |                  |z   }t        | |||z   dz         }||z
  }|dk\  r||z  d|z  z  }nt	        ||z  d| z        }|dk(  rCt        t        |             |z   dk\  |dkD  k(  rd|dz
  z  dz   d|z
  }
}	|	|
fS d|z  dz
  | }
}	|	|
fS t        ||dz    |dz         \  }	}
t	        |	d      }	|
dz  }
|	|
fS )Nr2   r(   r   )r   r   r   r(  rD  r	  )r  r  r  r  r  rA  lxcr8  pcr   r   s              r/   r  r  V  s    	CBLBA B!A
C qDEzVBI#b&"uf*-	Qw R\B!#a0ac1ac3E #: Qq1"3E #:	 21vqs+
sUB'q#:r1   r  F   5   (      r     r   r   )	r1  2345678r^   c                 h    	 | dk  rt        d      t        |       }dt        |      z  ||d      z
  S )Nr(   z0The argument to _log10_lb should be nonnegative.r  )r   r   r   )r  
correctionstr_cs      r/   r  r    s@     KAvKLLFEs5z>JuQx000r1   c                     	 t        | t              r| S t        | t              rt        |       S |r%t        | t              rt        j	                  |       S |rt        d| z        t        S )Nr  )r   r   r   r   r   ry   r   )r   r   allow_floats      r/   r   r     sc     %!%u~z%/!!%((9EABBr1   c                 z   	 t        |t              r| |fS t        |t        j                        rm| j                  sJt        | j                  t        t        | j                        |j                  z        | j                        } | t        |j                        fS |r5t        |t        j                        r|j                  dk(  r|j                  }t        |t               rMt#               }|rd|j$                  t&        <   n|j)                  t&        d       | t        j+                  |      fS t,        t,        fS )Nr(   r2   r   )r   r   _numbersRationalr   rC   rD   r   r   rE   denominatorr   	numeratorComplexrc  r_  r   r   ri   r   r   r   r   )r6   r   r   r7   s       r/   r   r     s     %!U{ %**+#DJJ$'DII9J9J(J$K$(II/D WU__---
 z%)9)9:uzzQ

%,,-GMM.)  MOW''...>))r1   r  i?B i)r`   r_   rj   ri   ra   rf   rg   rh   r   )r`   r_   rj   ri   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                 p   	 t         j                  |       }|t        d| z         |j                         }|d   }|d   }|d   d u|d<   |d   r |t        d| z         |t        d| z         |xs d|d<   |xs d|d<   |d	   d
|d	<   t	        |d   xs d      |d<   |d   t	        |d         |d<   |d   dk(  r|d   |d   dv rd|d<   |d   dk(  rHd|d<   |t        j                         }|d   t        d| z         |d   |d<   |d   |d<   |d   |d<   |S |d   d|d<   ddg|d<   d|d<   |S )NzInvalid format specifier: fillalignzeropadz7Fill character conflicts with '0' in format specifier: z2Alignment conflicts with '0' in format specifier:  >rQ   r   minimumwidthr   r~  r(   rs  gGnr2   rB   r|  thousands_sepzJExplicit thousands separator conflicts with 'n' type in format specifier: groupingdecimal_pointr   r   r  )_parse_format_specifier_regexmatchr   	groupdictr   _locale
localeconv)format_specrz  r   format_dictr}  r~  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                    	 |d   }|d   }||t        |       z
  t        |      z
  z  }|d   }|dk(  r
| |z   |z   }|S |dk(  r
|| z   |z   }|S |dk(  r
| |z   |z   }|S |dk(  r!t        |      dz  }|d | | z   |z   ||d  z   }|S t        d	      )
Nr  r}  r~  <r  =^r   zUnrecognised alignment field)r   r   )	rQ   r  r  r  r}  paddingr~  r   halfs	            r/   r  r  |  s     'L<DL3t9,s4y89GME|w& M 
#4$& M 
#$& M 
#7|Q$$&-> M 788r1   c                     	 ddl m}m} | sg S | d   dk(  r#t        |       dk\  r || d d  || d               S | d   t        j
                  k(  r| d d S t        d      )Nr(   )chainrepeatr   r   r   z unrecognised format for grouping)	itertoolsr  r  r   r  CHAR_MAXr   )r  r  r  s      r/   _group_lengthsr    sq     (		"	s8}1Xcr]F8B<$899	"))	)};<<r1   c                    	 |d   }|d   }g }t        |      D ]{  }|dk  rt        d      t        t        t	        |       |d      |      }|j                  d|t	        |       z
  z  | | d  z          | d |  } ||z  }| s|dk  r nM|t	        |      z  }} t        t	        |       |d      }|j                  d|t	        |       z
  z  | | d  z          |j                  t        |            S )Nr  r  r(   zgroup length should be positiver2   r   )r  r   r  r%  r   r   r   reversed)r   r  	min_widthsepr  groupsr  s          r/   _insert_thousands_sepr    s     
CJHFH% ;6>??CKA.2c1s6{?+faRSk9:!Q	)q.SX	; FY*c1s6{?+faRSk9:88HV$%%r1   c                 $    	 | ry|d   dv r|d   S y)Nr   rQ   z +r   r-   )is_negativer  s     r/   r  r    s$    #	f	F|r1   c                 4   	 t        | |      }|s|d   r|d   |z   }|dk7  s|d   dv r"ddddd|d      }|d	j                  ||      z  }|d   d
k(  r|d
z  }|d   r|d   t        |      z
  t        |      z
  }nd}t        |||      }t	        |||z   |      S )Naltr  r(   rs  r  r  r  )r  r  r}  r|  z{0}{1:+}r{  r  r  )r  formatr   r  r  )r  r   r   r   r  rQ   echarr  s           r/   r  r    s    " T*D4;(83
ax4<4'#C8fFJ%%eS11F|sCI(3x=83t9D		#GT9=Gwx/66r1   Infz-Infr  r   r   r,   )F)r(   )r  )FF)r2   ){__all__r:   	__xname____version____libmpdec_version__mathr   numbersrw  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   ry   r   r  r  r  contextvars
ContextVarrl   	frozensetrx   r   r   r    r   r   rC   Numberregisterrv   r   r   r'  r   r   r  r  r@  rB  rD  rM  r/  r(  rW  r[  rP  r^  r	  r  r  r   r   r   r   r   recompileVERBOSE
IGNORECASEr  r   rw  r  DOTALLr  localer  r  r  r  r  r  r  r'  r&  rG   r  r  r  rO   	hash_infomodulusr   r[  r   rX  _PyHASH_NANr   r   r-   r1   r/   <module>r     s   aF!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w3Kf w3Krg& 	   !
'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"--#!" "'# & RZZ$$
bjj && !+

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