
    =OgR             
       
   	 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          Zn# e$ r d	 ZY nw xY wd
ZdZdZdZdZdZdZdZdZdZe	j        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 d/ d0e'e)          Z+ G d1 d2e'e)e*          Z, G d3 d4e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 e2j3        d5          Z4 e5g d6          Z6d7 Z7d8 Z8[2dtd9Z9 G d: d;e:          Z;dud=Z<ej=        >                    e;            G d> d?e:          Z? G d@ dAe:          Z@ G dB dCe:          ZAdvdDZBeCjD        ZEdE ZFdF ZGdG ZHdH ZIdwdJZJdK ZKdL ZL G dM dNe:          ZM eM            jN        ZOdwdOZPdP ZQdQ ZRdRdSdTdUdVdWdXdYdZd[	fd\ZSdxd]ZTdud^ZU e@d_ee$e+e!gg d`daddb          ZV e@dcee$e+e!e e,gg d          ZW e@dceg g d          ZXddlYZY eYjZ        deeYj[        eYj\        z            j]        Z^ eYjZ        df          j]        Z_ eYjZ        dg          j]        Z` eYjZ        dheYj[        eYja        z            Zb[Y	 ddlcZdn# e$ r Y nw xY wdtdiZedj Zfdk ZgdydlZhdm Zidn Zj e;do          Zk e;dp          Zl e;dq          Zm e;d          Zn e;d          Zo e;dr          ZpekelfZqe	jr        js        Zte	jr        ju        Zve	jr        jw        Zx eydYetdsz
  et          Zz[	dS )z)%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 exponentc                      | S N )argss    #/usr/lib64/python3.11/_pydecimal.py<lambda>r/      s         r   r   r   r   r   r   r   r   Tl    l   NZolNZoi@Ti   c                       e Zd Z	 d ZdS )r   c                     d S r+   r,   selfcontextr-   s      r.   handlezDecimalException.handle   s    r0   N__name__
__module____qualname__r7   r,   r0   r.   r   r      s(        $    r0   r   c                       e Zd ZdS )r	   Nr9   r:   r;   r,   r0   r.   r	   r	              	 	r0   r	   c                       e Zd Z	 d ZdS )r
   c                     |r=t          |d         j        |d         j        dd          }|                    |          S t          S )Nr(   nT)_dec_from_triple_sign_int_fix_nan_NaN)r5   r6   r-   anss       r.   r7   zInvalidOperation.handle   s@     	)"47=$q',TJJC<<(((r0   Nr8   r,   r0   r.   r
   r
      s(        ,    r0   r
   c                       e Zd Z	 d ZdS )r   c                     t           S r+   rF   r4   s      r.   r7   zConversionSyntax.handle      r0   Nr8   r,   r0   r.   r   r      s(            r0   r   c                       e Zd Z	 d ZdS )r   c                     t           |         S r+   )_SignedInfinityr5   r6   signr-   s       r.   r7   zDivisionByZero.handle  s    t$$r0   Nr8   r,   r0   r.   r   r   
  s(        
% % % % %r0   r   c                       e Zd Z	 d ZdS )r   c                     t           S r+   rJ   r4   s      r.   r7   zDivisionImpossible.handle"  rK   r0   Nr8   r,   r0   r.   r   r     (            r0   r   c                       e Zd Z	 d ZdS )r   c                     t           S r+   rJ   r4   s      r.   r7   zDivisionUndefined.handle-  rK   r0   Nr8   r,   r0   r.   r   r   %  rS   r0   r   c                       e Zd ZdS )r   Nr=   r,   r0   r.   r   r   0  r>   r0   r   c                       e Zd Z	 d ZdS )r   c                     t           S r+   rJ   r4   s      r.   r7   zInvalidContext.handleG  rK   r0   Nr8   r,   r0   r.   r   r   <  s(            r0   r   c                       e Zd ZdS )r   Nr=   r,   r0   r.   r   r   J  r>   r0   r   c                       e Zd ZdS )r   Nr=   r,   r0   r.   r   r   V  s         r0   r   c                       e Zd Z	 d ZdS )r   c                    |j         t          t          t          t          fv rt
          |         S |dk    rF|j         t          k    rt
          |         S t          |d|j        z  |j	        |j        z
  dz             S |dk    rF|j         t          k    rt
          |         S t          |d|j        z  |j	        |j        z
  dz             S d S )Nr(   9r1   )roundingr   r   r   r   rN   r   rB   precEmaxr   rO   s       r.   r7   zOverflow.handlew  s     / ; ; ;"4((199=00&t,,#D#gl*:#L5a79 9 9199;..&t,,#D#gl*:$\',6q8: : : 9r0   Nr8   r,   r0   r.   r   r   a  s(        *: : : : :r0   r   c                       e Zd ZdS )r   Nr=   r,   r0   r.   r   r              r0   r   c                       e Zd ZdS )r   Nr=   r,   r0   r.   r   r     rb   r0   r   decimal_context)r_   Eminr`   capitalsclampr^   flagstrapsc                      	 	 t                                           S # t          $ r- t                      } t                               |            | cY S w xY wr+   )_current_context_vargetLookupErrorr   setr6   s    r.   r   r     s_    #'')))   ))  )))s    4AAc                     	 | t           t          t          fv r(|                                 } |                                  t
                              |            d S r+   )r   r   r   copyclear_flagsrk   rn   ro   s    r.   r   r     sP    /><AAA,,..W%%%%%r0   c                     	 | t                      } t          |           }|                                D ]7\  }}|t          vrt	          d| d          t          |j        ||           8|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      s    "F {ll!#&&Kllnn 5 5
U)))WWWWXXX'e4444r0   c            
          e Zd Z	 dZd|dZed             Zd Zd Zd}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d Zd Zd Zd ZddZd~dZd~dZd~dZdd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/ Z2d0 Z3d1 Z4d2 Z5d3 Z6d4 Z7d5 Z8d6 Z9d7 Z:d8 Z;d9 Z<d: Z= e>e6e7e8e9e:e;e<e=;          Z?d~d<Z@d= ZAd> ZBd~d?ZCd~d@ZDdA ZEd}dBZFd~dCZGd~dDZHd}dEZId~dFZJdG ZKdH ZLd}dIZMd}dJZNeNZOd~dKZPd~dLZQd~dMZRdN ZSdO ZTdP ZUdQ ZVd~dRZWd~dSZXd~dTZYdU ZZdV Z[d~dWZ\d~dXZ]dY Z^dZ Z_d[ Z`d\ Zad~d]Zbd^ Zcd_ Zdd` Zed~daZfdb Zgdc Zhd~ddZide Zjd~dfZkd~dgZldh Zmdi Znd~djZod~dkZpd~dlZqd~dmZrd~dnZsd~doZtd~dpZud~dqZvd~drZwd~dsZxdt Zyd~duZzd~dvZ{d~dwZ|dx Z}dy Z~dz Zd}d{ZdS )r   )_exprD   rC   _is_special0Nc                 z
   	 t                               |           }t          |t                    rt	          |                                                    dd                    }|.|t                      }|                    t          d|z            S |
                    d          dk    rd|_        nd|_        |
                    d          }|~|
                    d	          pd}t          |
                    d
          pd          }t          t          ||z                       |_        |t          |          z
  |_        d|_        n|
                    d          }|[t          t          |pd                                        d          |_        |
                    d          rd|_        nd|_        nd|_        d|_        d|_        |S t          |t                    rF|dk    rd|_        nd|_        d|_        t          t%          |                    |_        d|_        |S t          |t&                    r2|j        |_        |j        |_        |j        |_        |j        |_        |S t          |t(                    rG|j        |_        t          |j                  |_        t          |j                  |_        d|_        |S t          |t.          t0          f          rt          |          dk    rt3          d          t          |d         t                    r
|d         dv st3          d          |d         |_        |d         dk    rd|_        |d         |_        d|_        ng }	|d         D ]S}
t          |
t                    r.d|
cxk    rdk    r!n n|	s|
dk    r|	                    |
           Et3          d          |d         dv rBd                    t9          t          |	                    |_        |d         |_        d|_        not          |d         t                    rEd                    t9          t          |	pdg                    |_        |d         |_        d|_        nt3          d          |S t          |t:                    rw|t                      }|                    t<          d           t&                              |          }|j        |_        |j        |_        |j        |_        |j        |_        |S tA          d|z            )N_ zInvalid literal for Decimal: %rrP   -r1   r(   intfracexpr   FdiagsignalNrA   FT   ztInvalid tuple size in creation of Decimal from list or tuple.  The list or tuple should have exactly three elements.r(   r1   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.rA   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   grouprC   r   rD   lenr   r   lstripabsr   _WorkReprP   r   listtuple
ValueErrorappendjoinmapfloatr   
from_floatrx   )clsr   r6   r5   mintpartfracpartr   r   digitsdigits              r.   r   zDecimal.__new__  s
   	, ~~c"" eS!! "	--c26677Ay?(llG++,< AE IK K K wwv#%%


ggennG"776??0b!''%../C00GH$4 5 566	#h--/	#(  wwv# #C$4$4 5 5 < <S A ADIwwx(( ($'		$'		 !$DI #DI#' K eS!! 	zz


DICJJDI$DK eW%% 	DIDJDI % 1DK eX&& 	DJEIDIEIDI$DK ed5\** *	5zzQ  "G H H H uQx-- P%(e2C2C  "O P P P qDJQx3	!!H	#'   "1X 9 9E!%-- 9!u/////////! 1UaZZ"MM%000( *8 9 9 9 8z)) "C(8(8 9 9DI %aDI'+D$$a#.. ? "CA3(?(? @ @DI %aDI',D$$$ &> ? ? ? KeU## 	$,,     &&u--EDIDJDI % 1DK6>???r0   c                 v   	 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          |          
                                \  }}|                                dz
  }t          |d|z  z            }nt          d          t          |||           }| t          u r|S  | |          S )Nr(   r1   g      ?   zargument must be int or float.)r   r   r   r   r   _mathisinfisnanreprcopysignas_integer_ratio
bit_lengthrx   rB   r   )r   frP   kcoeffrA   dresults           r.   r   zDecimal.from_float  s,   	( a 	>Q11ADAAKKEE5!! 	>{1~~ $Q $s477||#~c1%%,,q66**,,DAq"A!Q$KKEE<===!$r22'>>M3v;;r0   c                 D    	 | j         r| j        }|dk    rdS |dk    rdS dS )NrA   r1   r   r   r(   )r   r   )r5   r   s     r.   _isnanzDecimal._isnan  s<    	  	)Cczzqqqr0   c                 4    	 | j         dk    r| j        rdS dS dS )Nr   r1   r(   )r   rC   r5   s    r.   _isinfinityzDecimal._isinfinity  s/    	 9z r1qr0   c                 j   	 |                                  }|d}n|                                 }|s|r|t                      }|dk    r|                    t          d|           S |dk    r|                    t          d|          S |r|                     |          S |                    |          S dS )NFr   sNaNr(   )r   r   r   r
   rE   )r5   otherr6   self_is_nanother_is_nans        r.   _check_nanszDecimal._check_nans  s    	 kkmm= LL <<>>L 	+, 	+$,,a++,<f(,. . .q  ++,<f(-/ / / .}}W--->>'***qr0   c                    	 |t                      }| j        s|j        r|                                 r|                    t          d|           S |                                r|                    t          d|          S |                                 r|                    t          d|           S |                                r|                    t          d|          S dS )Nzcomparison involving sNaNzcomparison involving NaNr(   )r   r   is_snanr   r
   is_qnanr5   r   r6   s      r.   _compare_check_nanszDecimal._compare_check_nans  s    		 ? llG 	3u0 	3||~~ 3++,<,G,02 2 2  3++,<,G,13 3 3  3++,<,F,02 2 2  3++,<,F,13 3 3 qr0   c                 (    	 | j         p
| j        dk    S Nr   r   rD   r   s    r.   __bool__zDecimal.__bool__4  s    	 349#33r0   c                 V   	 | j         s|j         r:|                                 }|                                }||k    rdS ||k     rdS dS | s|sdS d|j        z   S |s
d| j        z  S |j        | j        k     rdS | j        |j        k     rdS |                                 }|                                }||k    rW| j        d| j        |j        z
  z  z   }|j        d|j        | j        z
  z  z   }||k    rdS ||k     rd| j        z   S d| j        z  S ||k    r
d| j        z  S d| j        z   S )Nr(   r   r1   r   )r   r   rC   adjustedrD   r   )r5   r   self_inf	other_infself_adjustedother_adjustedself_paddedother_paddeds           r.   _cmpzDecimal._cmp;  s   	D
  	u0 	''))H))++I9$$qI%%rq  	, ,qu{*++ 	$## ;##2:##1))N**)c49uz+A&BBK :UZ$)-C(DDLl**q|++dj(((TZ''^++##4:%&&r0   c                     t          | |d          \  } }|t          u r|S |                     ||          rdS |                     |          dk    S )NT)equality_opFr(   )_convert_for_comparisonNotImplementedr   r   r   s      r.   __eq__zDecimal.__eq__{  s^    -dEtLLLeN""LE7++ 	5yy1$$r0   c                     t          | |          \  } }|t          u r|S |                     ||          }|rdS |                     |          dk     S NFr(   r   r   r   r   r5   r   r6   rG   s       r.   __lt__zDecimal.__lt__  ^    -dE::eN""L&&ug66 	5yy!##r0   c                     t          | |          \  } }|t          u r|S |                     ||          }|rdS |                     |          dk    S r   r   r   s       r.   __le__zDecimal.__le__  ^    -dE::eN""L&&ug66 	5yy1$$r0   c                     t          | |          \  } }|t          u r|S |                     ||          }|rdS |                     |          dk    S r   r   r   s       r.   __gt__zDecimal.__gt__  r   r0   c                     t          | |          \  } }|t          u r|S |                     ||          }|rdS |                     |          dk    S r   r   r   s       r.   __ge__zDecimal.__ge__  r   r0   c                     	 t          |d          }| j        s	|r!|j        r|                     ||          }|r|S t          |                     |                    S NTraiseit)_convert_otherr   r   r   r   r   s       r.   comparezDecimal.compare  su    	 ud333  	 	%*; 	""5'22C 
tyy''(((r0   c                    	 | j         rg|                                 rt          d          |                                 rt                              |           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n|S )Nz"Cannot hash a signaling NaN value.r(   
   r   )r   r   rx   is_nanr   __hash__rC   _PyHASH_INFr   pow_PyHASH_MODULUS_PyHASH_10INVr   rD   )r5   exp_hashhash_rG   s       r.   r   zDecimal.__hash__  s    '  		'||~~ ' DEEE 't,,,: ''<'&&9>>2ty/::HH=49*oFFHDI)O;qyyeeufBYYrrC'r0   c           	          	 t          | j        t          t          t          | j                            | j                  S r+   )r   rC   r   r   r   rD   r   r   s    r.   as_tuplezDecimal.as_tuple  s3    	 DJc#ty.A.A(B(BDINNNr0   c                    	 | j         r2|                                 rt          d          t          d          | sdS t	          | j                  }| j        dk    r|d| j        z  z  d}}nu| j         }|dk    r"|dz  dk    r|dz  }|dz  }|dk    r	|dz  dk    | j         }t          || z                                  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   r1   r   )
r   r   r   OverflowErrorr   rD   r   minr   rC   )r5   rA   r   d5d2shift2s         r.   r   zDecimal.as_integer_ratio  s<   	  	P{{}} P !FGGG#$NOOO 	4 	NN9>>r49}$aqAA )Bq&&QUaZZaa q&&QUaZZ )B!qb&,,..2B77F ff2A: 	A!tr0   c                 (    	 dt          |           z  S )NzDecimal('%s'))r   r   s    r.   __repr__zDecimal.__repr__  s    >T**r0   Fc                    	 ddg| j                  }| j        r5| 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	k    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   }n^|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   InfinityrA   NaNr   r(   r1   r   r   .eEz%+d)rC   r   r   rD   r   r   rf   )	r5   engr6   rP   
leftdigitsdotplacer   r   r   s	            r.   __str__zDecimal.__str__  s   	
 Cy$ 	1yCj((c!!e|di//f}ty00 YTY/

 9>>j2oo!HH 	0HHY#"Q!+a/HH #Q!+a/Hq==GS8)_,ty8HHTY''iXc$)nn%< ==GHHi		*GTYxyy11H!!CC$,,*W-.*X:M1NNCg~(3..r0   c                 2    	 |                      d|          S )NT)r  r6   )r  r5   r6   s     r.   to_eng_stringzDecimal.to_eng_stringE  s    	 ||g|666r0   c                    	 | j         r|                     |          }|r|S |t                      }| s%|j        t          k    r|                                 }n|                                 }|                    |          S Nro   )r   r   r   r^   r   copy_abscopy_negate_fixr5   r6   rG   s      r.   __neg__zDecimal.__neg__N  s    	  	""7"33C 
? llG 	%(K77 --//CC""$$Cxx   r0   c                     	 | j         r|                     |          }|r|S |t                      }| s%|j        t          k    r|                                 }nt          |           }|                    |          S r  )r   r   r   r^   r   r  r   r  r  s      r.   __pos__zDecimal.__pos__d  s    	  	""7"33C 
? llG 	 (K77--//CC$--Cxx   r0   Tc                     	 |s|                                  S | j        r|                     |          }|r|S | j        r|                     |          }n|                     |          }|S r  )r  r   r   rC   r  r  )r5   roundr6   rG   s       r.   __abs__zDecimal.__abs__y  s    	  	#==??" 	""7"33C 
: 	0,,w,//CC,,w,//C
r0   c                    	 t          |          }|t          u r|S |t                      }| j        s|j        r|                     ||          }|r|S |                                 rN| j        |j        k    r/|                                r|                    t          d          S t          |           S |                                rt          |          S t          | j        |j                  }d}|j        t          k    r| j        |j        k    rd}| sH|sFt          | j        |j                  }|rd}t          |d|          }|                    |          }|S | sRt!          ||j        |j        z
  dz
            }|                    ||j                  }|                    |          }|S |sRt!          || j        |j        z
  dz
            }|                     ||j                  }|                    |          }|S t'          |           }t'          |          }t)          |||j                  \  }}t'                      }	|j        |j        k    r|j        |j        k    r(t          |d|          }|                    |          }|S |j        |j        k     r||}}|j        dk    r!d|	_        |j        |j        c|_        |_        n1d|	_        n)|j        dk    rd|	_        d\  |_        |_        nd|	_        |j        dk    r|j        |j        z   |	_        n|j        |j        z
  |	_        |j        |	_        t          |	          }|                    |          }|S )Nz
-INF + INFr(   r1   r   )r(   r(   )r   r   r   r   r   r   rC   r   r
   r   r  r   r^   r   rB   r  maxr_   _rescaler   
_normalizerP   r   r   )
r5   r   r6   rG   r   negativezerorP   op1op2r   s
             r.   __add__zDecimal.__add__  sY   	 u%%N""L? llG 	&u0 	&""5'22C 
!! %:,,1B1B1D1D,"//0@,OOOt}}$  "" &u~~%$)UZ(({**tzU[/H/HL 	E 	tz5;//D "4c22C((7##CJ 	c5:4Q677C..g&677C((7##CJ 	c49w|3A566C--W%566C((7##CJtnnuooc355S8sxw#'!!&|S#>>hhw''
w  Sx1}}%(Xsx"#((X]]FK!'CHchhFK 8q==37*FJJ37*FJW
foohhw
r0   c                     	 t          |          }|t          u r|S | j        s|j        r|                     ||          }|r|S |                     |                                |          S r  )r   r   r   r   r*  r  r   s       r.   __sub__zDecimal.__sub__  s    !u%%N""L 	u0 	""5'"::C 
 ||E--//|AAAr0   c                 f    	 t          |          }|t          u r|S |                    | |          S r  )r   r   r,  r   s      r.   __rsub__zDecimal.__rsub__  s8    !u%%N""L}}T7}333r0   c                    	 t          |          }|t          u r|S |t                      }| j        |j        z  }| j        s|j        r|                     ||          }|r|S |                                 r*|s|                    t          d          S t          |         S |                                r*| s|                    t          d          S t          |         S | j
        |j
        z   }| r|s(t          |d|          }|                    |          }|S | j        dk    r-t          ||j        |          }|                    |          }|S |j        dk    r-t          || j        |          }|                    |          }|S t          |           }t          |          }t          |t          |j        |j        z            |          }|                    |          }|S )Nz(+-)INF * 0z0 * (+-)INFr   1)r   r   r   rC   r   r   r   r   r
   rN   r   rB   r  rD   r   r   r   )r5   r   r6   
resultsignrG   	resultexpr(  r)  s           r.   __mul__zDecimal.__mul__  s   	 u%%N""L? llGZ%+-
 	3u0 	3""5'22C 
!! 3 Q"//0@-PPP&z22  "" 3 Q"//0@-PPP&z22I
*	  	5 	":sI>>C((7##CJ 9":uz9EEC((7##CJ:":ty)DDC((7##CJtnnuooz3sw/@+A+A9MMhhw
r0   c                 4   	 t          |          }|t          u rt          S |t                      }| j        |j        z  }| j        s|j        r|                     ||          }|r|S |                                 r/|                                r|                    t          d          S |                                 rt          |         S |                                r>|                    t          d           t          |d|                                          S |s9| s|                    t          d          S |                    t          d|          S | s| j        |j        z
  }d}nt!          |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    r|dz  }n7| j        |j        z
  }||k     r"|dz  dk    r|dz  }|dz  }||k     r	|dz  dk    t          |t-          |          |          }|                    |          S )
Nz(+-)INF/(+-)INFzDivision by infinityr   z0 / 0zx / 0r(   r1   r   r   )r   r   r   rC   r   r   r   r   r
   rN   r	   rB   Etinyr   r   r   r   rD   r_   r   divmodr   r   r  )r5   r   r6   rP   rG   r   r   shiftr(  r)  	remainder	ideal_exps               r.   __truediv__zDecimal.__truediv__6  s   "u%%N""!!? llGzEK' 	Du0 	D""5'22C 
!! Qe&7&7&9&9 Q++,<>OPPP!! -&t,,  "" D$$W.DEEE'c7==??CCC  	G H++,=wGGG''FFF 	)ej(CEE 
OOc$)nn4w|CaGE)ej(50C4..C5//Czz#)#'BI*=sw#G#G yy#)#'37R%Z3G#H#H y 	19>>QJE !I
2	Ioo%"*//bLE1HC Ioo%"*// tSZZ55xx   r0   c                 z   	 | j         |j         z  }|                                r| j        }nt          | j        |j                  }|                                 |                                z
  }| r|                                s|dk    r,t          |dd          |                     ||j                  fS ||j        k    rt          |           }t          |          }|j
        |j
        k    r!|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     rAt          |t          |          d          t          | j         t          |	          |          fS |                    t          d          }
|
|
fS )Nr   r   r(   r   z%quotient too large in //, % or divmod)rC   r   r   r  r   rB   r%  r^   r_   r   r   r   r6  r   r   r   )r5   r   r6   rP   r9  expdiffr(  r)  qrrG   s              r.   _dividezDecimal._divideq  s   	
 zEK' 	3	IIDIuz22I--//ENN$4$44 	@u((** 	@gmm$T322MM)W-=>>@ @gl""4..C5//Cw#'!!2#' 1222#' 122#'37++DAq2w|###(s1vvq99(SVVYGGI I ""#5#JL LCxr0   c                 f    	 t          |          }|t          u r|S |                    | |          S r  )r   r   r:  r   s      r.   __rtruediv__zDecimal.__rtruediv__  s;    7u%%N""L  w 777r0   c                    	 t          |          }|t          u r|S |t                      }|                     ||          }|r||fS | j        |j        z  }|                                 r[|                                r|                    t          d          }||fS t          |         |                    t          d          fS |sX| s|                    t          d          }||fS |                    t          d|          |                    t          d          fS |                     ||          \  }}|                    |          }||fS )Nzdivmod(INF, INF)INF % xzdivmod(0, 0)x // 0x % 0)r   r   r   r   rC   r   r   r
   rN   r   r   r?  r  )r5   r   r6   rG   rP   quotientr8  s          r.   
__divmod__zDecimal.__divmod__  sy   	 u%%N""L? llGug.. 	:zEK' 	K  "" K**+;=OPPCx'-,,-=yIIK K  	I I**+<nMMCx,,^XtLL,,-=wGGI I #ll5'::)NN7++	""r0   c                 f    	 t          |          }|t          u r|S |                    | |          S r  )r   r   rG  r   s      r.   __rdivmod__zDecimal.__rdivmod__  s;    6u%%N""Lg666r0   c                    	 t          |          }|t          u r|S |t                      }|                     ||          }|r|S |                                 r|                    t          d          S |s8| r|                    t          d          S |                    t          d          S |                     ||          d         }|	                    |          }|S )NrC  rE  z0 % 0r1   )
r   r   r   r   r   r   r
   r   r?  r  )r5   r   r6   rG   r8  s        r.   __mod__zDecimal.__mod__  s    	 u%%N""L? llGug.. 	J 	H''(8)DDD 	H H++,<gFFF++,=wGGGLL003	NN7++	r0   c                 f    	 t          |          }|t          u r|S |                    | |          S r  )r   r   rK  r   s      r.   __rmod__zDecimal.__rmod__  8    3u%%N""L}}T7}333r0   c                    	 |t                      }t          |d          }|                     ||          }|r|S |                                 r|                    t
          d          S |s8| r|                    t
          d          S |                    t          d          S |                                r$t          |           }|                    |          S t          | j
        |j
                  }| s+t          | j        d|          }|                    |          S |                                 |                                z
  }||j        dz   k    r|                    t                    S |dk    r0|                     ||j                  }|                    |          S t%          |           }t%          |          }|j        |j        k    r!|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        k    r|	|j        z  }	|dz  }|d	|j        z  k    r|                    t                    S | j        }
|	dk     rd|
z
  }
|	 }	t          |
t-          |	          |          }|                    |          S )NTr   zremainder_near(infinity, x)zremainder_near(x, 0)zremainder_near(0, 0)r   r1   r   r   r   r(   )r   r   r   r   r   r
   r   r   r  r  r   rB   rC   r   r_   r   r%  r^   r   r   r   r6  r   )r5   r   r6   rG   ideal_exponentr<  r(  r)  r=  r>  rP   s              r.   remainder_nearzDecimal.remainder_near  s   	 ? llGud333ug.. 	J  	G''(8(EG G G  	D D++,<,BD D D ++,=,BD D D  	%$--C88G$$$ TY
33 	%"4:sNCCC88G$$$ --//ENN$4$44glQ&&&''(:;;;b==--0@AAC88G$$$ tnnuoo7cgGGrCGcg-..GGGGGrCGcg-..GGcgsw''1 Q3!A#;  LAFAGL   ''(:;;; zq55T6DAtSVV^<<xx   r0   c                    	 t          |          }|t          u r|S |t                      }|                     ||          }|r|S |                                 rI|                                r|                    t          d          S t          | j        |j        z           S |sF| r)|                    t          d| j        |j        z            S |                    t          d          S |                     ||          d         S )Nz
INF // INFrD  z0 // 0r(   )r   r   r   r   r   r   r
   rN   rC   r   r   r?  r   s       r.   __floordiv__zDecimal.__floordiv__1  s   u%%N""L? llGug.. 	J 	A  "" A++,<lKKK&tzEK'?@@ 	I I++NH,0J,DF F F ++,=xHHH||E7++A..r0   c                 f    	 t          |          }|t          u r|S |                    | |          S r  )r   r   rS  r   s      r.   __rfloordiv__zDecimal.__rfloordiv__M  s;    8u%%N""L!!$!888r0   c                     	 |                                  r/|                                 rt          d          | j        rdnd}nt	          |           }t          |          S )Nz%Cannot convert signaling NaN to floatz-nannan)r   r   r   rC   r   r   r5   ss     r.   	__float__zDecimal.__float__T  s]    #;;== 	||~~ J !HIII*/%AAD		AQxxr0   c                 X   	 | j         rF|                                 rt          d          |                                 rt	          d          d| j        z  }| j        dk    r"|t          | j                  z  d| j        z  z  S |t          | j        d | j                 pd          z  S )NzCannot convert NaN to integerz"Cannot convert infinity to integerr   r(   r   r   )	r   r   r   r   r  rC   r   r   rD   rX  s     r.   __int__zDecimal.__int__^  s    ? 	J{{}} J !@AAA!!## J#$HIII$*9>>S^^#B	M11S:DI:.5#6666r0   c                     | S r+   r,   r   s    r.   realzDecimal.realm  s    r0   c                      t          d          S Nr(   r   r   s    r.   imagzDecimal.imagq  s    qzzr0   c                     | S r+   r,   r   s    r.   	conjugatezDecimal.conjugateu  s    r0   c                 :    t          t          |                     S r+   )complexr   r   s    r.   __complex__zDecimal.__complex__x  s    uT{{###r0   c                    	 | j         }|j        |j        z
  }t          |          |k    rI|t          |          |z
  d                              d          }t          | j        || j        d          S t          |           S )Nr   T)	rD   r_   rg   r   r   rB   rC   r   r   )r5   r6   payloadmax_payload_lens       r.   rE   zDecimal._fix_nan{  sz    @) ",6w<</))c'll?:;;<CCCHHG#DJDIIIt}}r0   c                     	 | j         r8|                                 r|                     |          S t          |           S |                                }|                                }| s|j        |g|j                 }t          t          | j
        |          |          }|| j
        k    r0|                    t                     t          | j        d|          S t          |           S t          | j                  | j
        z   |j        z
  }||k    rW|                    t$          d| j                  }|                    t&                     |                    t(                     |S ||k     }|r|}| j
        |k     rt          | j                  | j
        z   |z
  }	|	dk     rt          | j        d|dz
            } d}	| j        |j                 }
 |
| |	          }| j        d |	         pd}|dk    rFt/          t1          |          dz             }t          |          |j        k    r|d d         }|dz  }||k    r"|                    t$          d| j                  }nt          | j        ||          }|r|r|                    t2                     |r|                    t4                     |r|                    t&                     |                    t(                     |s|                    t                     |S |r|                    t4                     |j        dk    rP| j
        |k    rE|                    t                     | j        d| j
        |z
  z  z   }t          | j        ||          S t          |           S )Nr   
above Emaxr(   r0  r1   r   )r   r   rE   r   r5  Etopr`   rg   r  r$  r   r   r	   rB   rC   r   rD   r_   r   r   r   _pick_rounding_functionr^   r   r   r   r   )r5   r6   r5  rm  exp_maxnew_expexp_minrG   self_is_subnormalr   rounding_methodchangedr   r   s                 r.   r  zDecimal._fix  sw   	  	%{{}} %}}W--- t}}$ ||~~ 	%|T*7=9G#di//99G$)##$$W---'
CAAAt}}$ di..49,w|;T>>&&xtzJJC  )))  )))J#eO 	G 9w^^di/'9Fzz'
CCC":7;KLO%odF33GIgvg&-#E{{CJJqL))u::,,!#2#JEqLG ~~**8\4:NN&tz5'BB  0, 0$$Y///  0$$Y/// .$$W---  ))) .$$W---J 	,  +++ =A$)d"2"2  ))))c49t+;&<<K#DJTBBB t}}r0   c                 6    	 t          | j        |          rdS dS )Nr(   r   )
_all_zerosrD   r5   r_   s     r.   _round_downzDecimal._round_down  s#    6di&& 	12r0   c                 0    	 |                      |           S r+   )rx  rw  s     r.   	_round_upzDecimal._round_up  s    !  &&&&r0   c                 X    	 | j         |         dv rdS t          | j         |          rdS dS )N56789r1   r(   r   )rD   rv  rw  s     r.   _round_half_upzDecimal._round_half_up  s9    '9T?g%%1	4(( 	12r0   c                 \    	 t          | j        |          rdS |                     |          S )Nr   _exact_halfrD   r}  rw  s     r.   _round_half_downzDecimal._round_half_down  s2    ty$'' 	-2&&t,,,r0   c                     	 t          | j        |          r|dk    s| j        |dz
           dv rdS |                     |          S )Nr(   r1   02468r   r  rw  s     r.   _round_half_evenzDecimal._round_half_even  sP    /ty$'' 	-diQ/7::2&&t,,,r0   c                 h    	 | j         r|                     |          S |                     |           S r+   rC   rx  rw  s     r.   _round_ceilingzDecimal._round_ceiling  s:    6: 	+##D)))$$T****r0   c                 h    	 | j         s|                     |          S |                     |           S r+   r  rw  s     r.   _round_floorzDecimal._round_floor  s:    5z 	+##D)))$$T****r0   c                     	 |r'| j         |dz
           dvr|                     |          S |                     |           S )Nr1   05)rD   rx  rw  s     r.   _round_05upzDecimal._round_05up  sM    7 	+DId1f%T11##D)))$$T****r0   )r   r   r   r   r   r   r   r   c                 `   	 |Kt          |t                    st          d          t          dd|           }|                     |          S | j        r2|                                 rt          d          t          d          t          | 	                    dt                              S )Nz+Second argument to round should be integralr(   r0  cannot round a NaNcannot round an infinity)r   r   rx   rB   quantizer   r   r   r  r%  r   )r5   rA   r   s      r.   	__round__zDecimal.__round__0  s    -	\ =a%% O MNNN"1cA2..C==%%%  	@{{}} @ !5666#$>???4==O44555r0   c                     	 | j         r2|                                 rt          d          t          d          t	          |                     dt                              S Nr  r  r(   )r   r   r   r  r   r%  r   r   s    r.   	__floor__zDecimal.__floor__n  s`    	  	@{{}} @ !5666#$>???4==K00111r0   c                     	 | j         r2|                                 rt          d          t          d          t	          |                     dt                              S r  )r   r   r   r  r   r%  r   r   s    r.   __ceil__zDecimal.__ceil__}  s`    	  	@{{}} @ !5666#$>???4==M22333r0   c           	      P   	 t          |d          }t          |d          }| j        s|j        r |t                      }| j        dk    r|                    t
          d|           S |j        dk    r|                    t
          d|          S | j        dk    r| }n|j        dk    r|}n| j        dk    r8|s|                    t
          d          S t          | j        |j        z           }n|j        dk    r7| s|                    t
          d          S t          | j        |j        z           }n_t          | j        |j        z  t          t          | j                  t          |j                  z            | j        |j        z             }|                    ||          S )	NTr   r   r   rA   r   zINF * 0 in fmaz0 * INF in fma)r   r   r   r   r   r
   rN   rC   rB   r   r   rD   r*  )r5   r   thirdr6   products        r.   fmazDecimal.fma  s   	 ud333ud333  	?u0 	?$,,yC++,<fdKKKzS  ++,<feLLLyCs""c!! B"//0@0@B B B)$*u{*BCs"" B"//0@0@B B B)$*u{*BC&tzEK'?'*3ty>>C
OO+K'L'L'+y5:'=? ?G ug...r0   c                 2   	 t          |          }|t          u r|S t          |          }|t          u r|S |t                      }|                                 }|                                }|                                }|s|s|r|dk    r|                    t
          d|           S |dk    r|                    t
          d|          S |dk    r|                    t
          d|          S |r|                     |          S |r|                    |          S |                    |          S |                                 r(|                                r|                                s|                    t
          d          S |dk     r|                    t
          d          S |s|                    t
          d          S |                                |j	        k    r|                    t
          d          S |s| s|                    t
          d          S |
                                rd}n| j        }t          t          |                    }t          |                                           }t          |                                          }	|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
   rE   
_isintegerr   r_   _isevenrC   r   r   r   to_integral_valuer   r   rangerB   r   )r5   r   modulor6   r   r   modulo_is_nanrP   baseexponentis              r.   _power_modulozDecimal._power_modulo  sa   /u%%N""L''^##M? llG kkmm||~~ 	,, 	,- 	,a++,<f(,. . .q  ++,<f(-/ / /!!++,<f(.0 0 0 .}}W--- /~~g...??7+++ !! 	M  ""	M!!##	M ''(8)LM M M 199''(8)OP P P  	J''(8(HJ J J
 ??,,''(8);< < <  	?T 	?''(8)>? ? ? ==?? 	DD:D S[[!!..0011E335566 6!CDHf$=$==Gx|$$ 	) 	)AtR((DD4v..c$ii333r0   c                 	   	 t          |           }|j        |j        }}|dz  dk    r|dz  }|dz  }|dz  dk    t          |          }|j        |j        }}|dz  dk    r|dz  }|dz  }|dz  dk    |dk    r||z  }|dz  dk    r|dz  }|dz  }|dz  dk    |dk     rd S |d|z  z  }	|j        dk    r|	 }	|                                r9|j        dk    r.| j        t          |          z  }
t          |	|
z
  |dz
            }nd}t          ddd|z  z   |	|z
            S |j        dk    rq|dz  }|dv r|| z  |k    rd S t          |          dz
  }|dz  dz  }|t          t          |                    k    rd S t          ||z  |          }t          ||z  |          }||d S ||k    rd S d	|z  }n|d	k    rt          |          d
z  dz  }t          d	|z  |          \  }}|rd S |d	z  dk    r|d	z  }|dz  }|d	z  dk    |dz  dz  }|t          t          |                    k    rd S t          ||z  |          }t          ||z  |          }||d S ||k    rd S d|z  }nd S |d|z  k    rd S | |z
  }t          dt          |          |          S |dk    r|d|z  z  d}}n|dk    r3t          t          t          ||z                                | k    rd S t          |          }t          t          t          |          |z                      | k    rd S |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    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    n |dk    rz||k    rd S t          ||          \  }}|dk    rd S dt          |           |z   z  }	 t          |||dz
  z            \  }}||k    rn||dz
  z  |z   |z  }/||k    r|dk    sd S |}|dk    r||dz  t          |          z  k    rd S ||z  }||z  }|d|z  k    rd S t          |          }|                                rF|j        dk    r;| j        t          |          z  }
t          ||
z
  |t          |          z
            }nd}t          d|d|z  z   ||z
            S )Nr   r(   r1   r0  r   )r            ]   A   r      r   r   Td   )r   r   r   rP   r  rC   r   r  rB   _nbitsr   r   _decimal_lshift_exactr6  r   	_log10_lb)r5   r   pxxcxeyycyer  rP  zeros
last_digitr  emaxr8  r   rA   xc_bitsremar=  r>  str_xcs                           r.   _power_exactzDecimal._power_exact  sC   	Br TNNB2gll2IB!GB 2gll UOOB2gll2IB!GB 2gll 77"HBr'Q,,r	a r'Q,, AvvtBF{Hv{{$9!! ekQ&6&6!%3u::!5H^3QqS99#AsSYGGG 6Q;;bJY&&8r>>42JJqL6 tRxSYY''4 *!b&"55*27B779
4t884Tq 2JJrM2% &q!tR 0 0I  41fkk1HBFA 1fkk tQwSYY''4)!b&"55*27B779
4t884TtRU{{tBB#As2ww333 77b"f9aqAAQww3s3r"u:://B366tRjjG3s2www''((RC//trRCyqAa%1q5%%%%A%%%%%aa a%1q5%%%%A%%%% a%1q5%%%%A%%%%%aa a%1q5%%%%A%%%%
 q55!||tRmmGBaxxt r

{A~&&A)b!ac(++166AaC1q(A) FFqAvvtB 66a!C%2...4U
aA::4
 R 	%+"2"2!Ys5zz1N>)1S[[=99EEE6#e)#3RX>>>r0   c                    	 ||                      |||          S t          |          }|t          u r|S |t                      }|                     ||          }|r|S |s$| s|                    t          d          S t          S d}| j        dk    r\|	                                r|
                                sd}n| r|                    t          d          S |                                 } | s)|j        dk    rt          |dd          S t          |         S |                                 r)|j        dk    rt          |         S t          |dd          S | t          k    r|	                                rm|j        dk    rd}n"||j        k    r|j        }nt!          |          }| j        |z  }|d|j        z
  k     r$d|j        z
  }|                    t$                     n>|                    t&                     |                    t$                     d|j        z
  }t          |dd| z  z   |          S |                                 }|                                r1|j        dk    |dk     k    rt          |dd          S t          |         S d }d}	|                                 |                                z   }
|dk    |j        dk    k    r?|
t-          t/          |j                            k    rt          |d|j        dz             }nI|                                }|
t-          t/          |                     k    rt          |d|dz
            }|C|                     ||j        dz             }|#|dk    rt          d|j        |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  }Kt          |t/          |          |          }|	r|	                                sut-          |j                  |j        k    rH|j        dz   t-          |j                  z
  }t          |j        |j        d|z  z   |j        |z
            }|                                 }|!                                 tD          D ]}d|j#        |<   |$                    |          }|                    t&                     |j%        tL                   r|                    tN                     |j%        tP                   r!|                    tP          d|j                   tN          tL          t&          t$          tR          fD ]$}|j%        |         r|                    |           %n|$                    |          }|S )Nz0 ** 0r(   r1   z+x ** y with x negative and y not an integerr   r0  FTr   r   r   rl  )*r  r   r   r   r   r   r
   _OnerC   r  r  r  rB   rN   r   r_   r   r   r   r   r   _log10_exp_boundr   r   r`   r5  r  rD   r   r   rP   _dpowerrq   rr   _signalsri   r  rh   r   r   r   r	   )r5   r   r  r6   rG   result_sign
multiplierr   self_adjexactboundr5  r  r  r  r  r  r  r  extrar   r<  
newcontext	exceptions                           r.   __pow__zDecimal.__pow__  s2   	. %%eVW===u%%N""L? llG ug.. 	J  	 ++,<hGGG :??!! G}} $"#K  G"//0@EG G G ##%%D  	4{a'S!<<<&{33  	={a&{33'S!<<<
 4<<!! %
 ;!##!"JJW\))!(JJ!$UJi*,7<''GL.C((111$$W---$$W---n#KS#XsCCC ==??  	4q hl33'S!<<<&{33  %%''%..*:*::Mu{a/00 C--....&{CaHH MMOOECKK((((&{CqAA ;##E7<!+;<<C!##*1chAAC ;AAUAEBAUAEBv{{S E$RRQuW==
sAb3s5zz??1#4Q#6778 
	 #;E

C@@C  "	$))++ "	$ 38}},,!,*S]]:&sy#(3w;2F'*x'79 9 !J""$$$% 0 0	./
 ++ ((:&&C ##G,,,	* 3''	222 ) H$$X|SYGGG&	7GWL 4 4	#I. 4((3334
 ((7##C
r0   c                 f    	 t          |          }|t          u r|S |                    | |          S r  )r   r   r  r   s      r.   __rpow__zDecimal.__rpow__	  rN  r0   c                 0   	 |t                      }| j        r|                     |          }|r|S |                     |          }|                                r|S |st          |j        dd          S |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     $t          |j        |j        d |         |          S )Nro   r   r(   r1   )r   r   r   r  r   rB   rC   r`   rm  rg   r   rD   r   )r5   r6   rG   dupro  endr   s          r.   	normalizezDecimal.normalize	  s"   M? llG 	""7"33C 
ii  ?? 	J 	7#CIsA666<0?#(mmhhs1uo$$w1HC1HC hs1uo$$w  	38DSD>3???r0   c                    	 t          |d          }|t                      }||j        }| j        s|j        r|                     ||          }|r|S |                                s|                                 rR|                                r#|                                 rt          |           S |                    t          d          S |	                                |j
        cxk    r|j        k    sn |                    t          d          S | s0t          | j        d|j
                  }|                    |          S |                                 }||j        k    r|                    t          d          S ||j
        z
  dz   |j        k    r|                    t          d          S |                     |j
        |          }|                                |j        k    r|                    t          d          S t%          |j                  |j        k    r|                    t          d          S |r7|                                |j        k     r|                    t*                     |j
        | j
        k    r:|| k    r|                    t,                     |                    t.                     |                    |          }|S )	NTr   zquantize with one INFz)target exponent out of bounds in quantizer   z9exponent of quantize result too large for current contextr1   z7quantize result has too many digits for current context)r   r   r^   r   r   r   r   r   r
   r5  r   r`   rB   rC   r  r   r_   r%  r   rD   re   r   r   r   )r5   r   r^   r6   rG   r   s         r.   r  zDecimal.quantize	  s   	 S$///? llG'H 		As 		A""300C 
   AD$4$4$6$6 A??$$ ))9)9);); )"4==(++,<(?A A A 38;;;;w|;;;;''(8>@ @ @  	%"4:sCH==C88G$$$7<''''(8(ce e e38#a'',66''(8(ac c c mmCHh//<<>>GL((''(8(ce e esx==7<''''(8(ac c c  	,3<<>>GL00  +++8did{{$$W---  ))) hhw
r0   c                    	 t          |d          }| j        s|j        rP|                                 r|                                p'|                                 o|                                S | j        |j        k    S r   )r   r   r   is_infiniter   r   s      r.   same_quantumzDecimal.same_quantum/
  s    	 ud333 	@u0 	@KKMM4ellnn ?$$&&>5+<+<+>+>@yEJ&&r0   c                    	 | j         rt          |           S | st          | j        d|          S | j        |k    r)t          | 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 |         pd}|dk    rt          t          |          dz             }t          | j        ||          S )Nr   r(   r0  r1   )
r   r   rB   rC   r   rD   r   rn  r   r   )r5   r   r^   r   this_functionrt  r   s          r.   r%  zDecimal._rescale>
  s    		  	!4==  	:#DJS9999#DJ(,	CS4I(I3P P P
 TY$)+c1A::#DJSU;;DF4X>-f--	'6'")ca<<E

1%%E
E3777r0   c                 n   	 |dk    rt          d          | j        s| st          |           S |                     |                                 dz   |z
  |          }|                                |                                 k    r.|                    |                                dz   |z
  |          }|S )Nr(   z'argument should be at least 1 in _roundr1   )r   r   r   r%  r   )r5   placesr^   rG   s       r.   _roundzDecimal._round`
  s    	 Q;;FGGG 	!4 	!4== mmDMMOOA-f4h??
 <<>>T]]__,,,,s||~~a/6AAC
r0   c                    	 | j         r)|                     |          }|r|S t          |           S | j        dk    rt          |           S | st	          | j        dd          S |t                      }||j        }|                     d|          }|| k    r|	                    t                     |	                    t                     |S )Nro   r(   r   )r   r   r   r   rB   rC   r   r^   r%  r   r   r   r5   r^   r6   rG   s       r.   to_integral_exactzDecimal.to_integral_exactw
  s    	  	!""7"33C 
4== 9>>4==  	8#DJQ777? llG'HmmAx(($;;  )))W%%%
r0   c                     	 |t                      }||j        }| j        r)|                     |          }|r|S t	          |           S | j        dk    rt	          |           S |                     d|          S )Nro   r(   )r   r^   r   r   r   r   r%  r  s       r.   r  zDecimal.to_integral_value
  s    N? llG'H 	!""7"33C 
4== 9>>4== ==H---r0   c                 D   	 |t                      }| j        rH|                     |          }|r|S |                                 r| j        dk    rt          |           S | s3t          | j        d| j        dz            }|                    |          S | j        dk    r|	                    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	  }|	o||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%          |          |          }|                                }|                    t*                    }|                    |          }||_        |S )Nro   r(   r   r   r1   zsqrt(-x), x > 0r   r  Tr   )r   r   r   r   rC   r   rB   r   r  r   r
   r_   r   r   r   r   rD   r6  r   _shallow_copy_set_roundingr   r^   )r5   r6   rG   r_   opr  clr7  r  r8  rA   r=  r^   s                 r.   sqrtzDecimal.sqrt
  s   -? llG 	%""7"33C 
!! %djAoot}}$ 	%"4:sDINCCC88G$$$:??''(8:KLLL, |A~ d^^FaK6A: 	&ATY1$)AAADIq A%A QA::eOAEE!!S5&[11LAy!ME	U
 H	1AAvvEQJ	 "!A#( 	zzb%iR%ZJAA 1uzzQq#a&&!,, ''))((99hhw#
r0   c                 
   	 t          |d          }|t                      }| j        s|j        r|                                 }|                                }|s|rX|dk    r|dk    r|                     |          S |dk    r|dk    r|                    |          S |                     ||          S |                     |          }|dk    r|                     |          }|dk    r|}n| }|                    |          S NTr   r1   r(   r   r   r   r   r   r  r   r   compare_totalr5   r   r6   snonr  rG   s          r.   r$  zDecimal.max
  s   	
 ud333? llG 
	8u0 
	8 BB 8R 877rQww99W---77rQww ::g...''w777IIe66 ""5))A77CCCxx   r0   c                 
   	 t          |d          }|t                      }| j        s|j        r|                                 }|                                }|s|rX|dk    r|dk    r|                     |          S |dk    r|dk    r|                    |          S |                     ||          S |                     |          }|dk    r|                     |          }|dk    r| }n|}|                    |          S r  r  r  s          r.   r  zDecimal.min4  s   	
 ud333? llG 
	8u0 
	8 BB 8R 877rQww99W---77rQww ::g...''w777IIe66""5))A77CCCxx   r0   c                     	 | j         rdS | j        dk    rdS | j        | j        d          }|dt          |          z  k    S )NFr(   Tr   )r   r   rD   r   )r5   rests     r.   r  zDecimal._isintegerV  sL    0 	59>>4y$s3t99}$$r0   c                 P    	 | r| j         dk    rdS | j        d| j         z            dv S )Nr(   Tr   r  )r   rD   r   s    r.   r  zDecimal._iseven_  s4    H 	ty1}}4yDI&'11r0   c                 f    	 	 | j         t          | j                  z   dz
  S # t          $ r Y dS w xY w)Nr1   r(   )r   r   rD   rx   r   s    r.   r   zDecimal.adjustede  sF    2	9s49~~-11 	 	 	11	s   " 
00c                     	 | S r+   r,   r   s    r.   	canonicalzDecimal.canonicalm  s    	
 r0   c                     	 t          |d          }|                     ||          }|r|S |                     ||          S NTr   ro   )r   r   r   r   s       r.   compare_signalzDecimal.compare_signalu  sS    	
 u555&&ug66 	J||E7|333r0   c                 V   	 t          |d          }| j        r|j        st          S | j        s|j        rt          S | j        }|                                 }|                                }|s|r||k    rit          | j                  | j        f}t          |j                  |j        f}||k     r|rt          S t          S ||k    r|rt          S t          S t          S |r5|dk    rt          S |dk    rt          S |dk    rt          S |dk    rt          S n4|dk    rt          S |dk    rt          S |dk    rt          S |dk    rt          S | |k     rt          S | |k    rt          S | j        |j        k     r|rt          S t          S | j        |j        k    r|rt          S t          S t          S )NTr   r1   r   )	r   rC   _NegativeOner  r   r   rD   _Zeror   )r5   r   r6   rP   self_nan	other_nanself_key	other_keys           r.   r  zDecimal.compare_total  s   	 ud333 : 	 ek 	 z 	ek 	Kz ;;==LLNN	 "	(y "	(9$$ty>>494
OOUZ7	i'' ,#++i'' $++# (q==''>>Kq==''>>K " q==K>>''q==K>>''%<<%<<K9uz!! $##9uz!! ##r0   c                     	 t          |d          }|                                 }|                                }|                    |          S r   )r   r  r  )r5   r   r6   rY  os        r.   compare_total_magzDecimal.compare_total_mag  sI    	 ud333MMOONNq!!!r0   c                 F    	 t          d| j        | j        | j                  S r`  )rB   rD   r   r   r   s    r.   r  zDecimal.copy_abs  s     549di9IJJJr0   c                     	 | j         r!t          d| j        | j        | j                  S t          d| j        | j        | j                  S )Nr(   r1   )rC   rB   rD   r   r   r   s    r.   r  zDecimal.copy_negate  sF    4: 	O#Aty$)T=MNNN#Aty$)T=MNNNr0   c                 r    	 t          |d          }t          |j        | j        | j        | j                  S r   )r   rB   rC   rD   r   r   r   s      r.   	copy_signzDecimal.copy_sign  s;    2ud333TY $	4+;= = 	=r0   c                 *   	 |t                      }|                     |          }|r|S |                                 dk    rt          S | st          S |                                 dk    rt          |           S |j        }|                                 }| j        dk    rF|t          t          |j        dz   dz                      k    rt          dd|j        dz             }nb| j        dk    r`|t          t          |                                 dz   dz                      k    r't          dd|                                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  }It          dt          |	          |
          }|                                }|                    t*                    }|                    |          }||_        |S )Nro   r   r1   r(   r   r0  r   r]   Tr   r   )r   r   r   r  r  r   r_   r   rC   r   r   r`   rB   r5  r   r   r   rP   _dexpr  r  r   r  r^   )r5   r6   rG   r  adjr  r  r  r  r   r   r^   s               r.   r   zDecimal.exp  s    ? llG w// 	J ##L  	K ""4==  Lmmoo :??sSgl1na-?)@)@%A%AAA"1c7<>::CCZ1__s30@0BA/E+F+F'G'G!G!G"1c7==??1+<==CCZ1__r"1cC1Io&;aR@@CCZ1__r!t"1c1Q3i!A66CC $B626qAw!||B
 E"1a511
sAb3s5zz??1#4Q#6778 
	 #1c%jj#66C ''))((99hhw#
r0   c                     	 dS )NTr,   r   s    r.   is_canonicalzDecimal.is_canonical1  s    	
 tr0   c                     	 | j          S r+   )r   r   s    r.   	is_finitezDecimal.is_finite9  s    	
 ###r0   c                     	 | j         dk    S )Nr   r   r   s    r.   r  zDecimal.is_infiniteA  s    FyCr0   c                     	 | j         dv S )Nr   r  r   s    r.   r   zDecimal.is_nanE  s    LyJ&&r0   c                 t    	 | j         s| sdS |t                      }|j        |                                 k    S NF)r   r   re   r   r  s     r.   	is_normalzDecimal.is_normalI  s?    M 	4 	5? llG|t}}..r0   c                     	 | j         dk    S )NrA   r  r   s    r.   r   zDecimal.is_qnanQ  s    IyCr0   c                     	 | j         dk    S Nr1   )rC   r   s    r.   	is_signedzDecimal.is_signedU  s    FzQr0   c                     	 | j         dk    S )Nr   r  r   s    r.   r   zDecimal.is_snanY  s    MyCr0   c                 t    	 | j         s| sdS |t                      }|                                 |j        k     S r  )r   r   r   re   r  s     r.   is_subnormalzDecimal.is_subnormal]  s?    G 	4 	5? llG}}--r0   c                 *    	 | j          o
| j        dk    S r   r   r   s    r.   is_zerozDecimal.is_zeroe  s    D##8	S(88r0   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    rKt          |d| z  z
            }t          |          }t          |          t          |          z
  ||k     z
  S |t          t          d| z  |z
                      z   dz
  S )Nr1      r   r   r   r(   r   r   rD   r   r   r   r   r5   r	  r  r  r  numdens          r.   _ln_exp_boundzDecimal._ln_exp_boundi  s   	 i#di..(1,!88s3r62:''!++"99sBsFB;?++,,q00d^^vrv1!88aQBh--Ca&&Cs88c#hh&#)443s2r6A:'''!++r0   c           
      H   	 |t                      }|                     |          }|r|S | st          S |                                 dk    rt          S | t
          k    rt          S | j        dk    r|                    t          d          S t          |           }|j        |j        }}|j        }||                                 z
  dz   }	 t          |||          }|ddt!          t#          t%          |                              |z
  dz
  z  z  z  rn|dz  }Pt'          t          |d	k               t#          t%          |                    |           }|                                }|                    t,                    }	|                    |          }|	|_        |S )
Nro   r1   zln of a negative valuer   Tr   r   r   r(   )r   r   _NegativeInfinityr   	_Infinityr  r  rC   r   r
   r   r   r   r_   r#  _dlogr   r   r   rB   r  r  r   r  r^   
r5   r6   rG   r  r  r  r  r  r   r^   s
             r.   lnz
Decimal.ln  s   =? llG w// 	J  	%$$ "" 4<<L :??''(8(@B B B d^^vrv1L T'')))A-	!Q''E"s3s5zz??33A5a7889 aKF	 s57||SU__vgFF''))((99hhw#
r0   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    rQt          |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 )	Nr1   r   r   r(   r      r   231r  r   s          r.   r  zDecimal._log10_exp_bound  s   	 i#di..(1,!88s3xx==?""99s2c6{{##A%%d^^vrv1!88aQBh--Cc!e**Cs88c#hh&#)4q88"qb&(mm3xx!|sU{+a//r0   c           
         	 |t                      }|                     |          }|r|S | st          S |                                 dk    rt          S | j        dk    r|                    t          d          S | j        d         dk    rX| j        dd          dt          | j                  dz
  z  k    r-t          | j        t          | j                  z   dz
            }nt          |           }|j        |j        }}|j        }||                                 z
  dz   }	 t#          |||          }|d	d
t          t%          t'          |                              |z
  dz
  z  z  z  rn|dz  }Pt)          t          |dk               t%          t'          |                    |           }|                                }|                    t.                    }	|                    |          }|	|_        |S )Nro   r1   zlog10 of a negative valuer(   r0  r   r   Tr   r   r   )r   r   r%  r   r&  rC   r   r
   rD   r   r   r   r   r   r   r_   r  _dlog10r   r   rB   r  r  r   r  r^   r(  s
             r.   log10zDecimal.log10  s   4? llG w// 	J  	%$$ "" :??''(8(CE E E 9Q<349QRR=CTY!9K4L#L#L$)c$)nn4q899CC $B626qAA t,,...q0F1f--Ab3s3u::#7#7#9!#;<<= ! #3uQw<<SZZ6'JJC''))((99hhw#
r0   c                 6   	 |                      |          }|r|S |t                      }|                                 rt          S | s|                    t
          dd          S t          |                                           }|                    |          S )Nro   zlogb(0)r1   )	r   r   r   r&  r   r   r   r   r  r  s      r.   logbzDecimal.logb  s    	 w// 	J? llG  	  	F''	1EEE
 dmmoo&&xx   r0   c                 Z    	 | j         dk    s| j        dk    rdS | j        D ]	}|dvr dS 
dS )Nr(   F01T)rC   r   rD   )r5   digs     r.   
_islogicalzDecimal._islogical#  sN    	 :??di1nn59 	 	C$uu tr0   c                     |j         t          |          z
  }|dk    r	d|z  |z   }n|dk     r||j          d          }|j         t          |          z
  }|dk    r	d|z  |z   }n|dk     r||j          d          }||fS )Nr(   r   )r_   r   )r5   r6   opaopbdifs        r.   _fill_logicalzDecimal._fill_logical1  s    lSXX%77c'C-CC1WWw|mnn%ClSXX%77c'C-CC1WWw|mnn%CCxr0   c                    	 |t                      }t          |d          }|                                 r|                                s|                    t                    S |                     || j        |j                  \  }}d                    d t          ||          D                       }t          d|
                    d          pdd          S )NTr   r   c                 l    g | ]1\  }}t          t          |          t          |          z            2S r,   r   r   .0r  bs      r.   
<listcomp>z'Decimal.logical_and.<locals>.<listcomp>L  4    EEE1#c!ffSVVm,,EEEr0   r(   r   r   r   r5  r   r
   r:  rD   r   ziprB   r   r5   r   r6   r7  r8  r   s         r.   logical_andzDecimal.logical_and>      I? llGud333   	:(8(8(:(: 	:''(8999 ''EJGG
c EECEEEFF6==#5#5#<a@@@r0   c                 ~    	 |t                      }|                     t          dd|j        z  d          |          S )Nr(   r0  )r   logical_xorrB   r_   r  s     r.   logical_invertzDecimal.logical_invertO  sD    $? llG 03w|3CA F F ') ) 	)r0   c                    	 |t                      }t          |d          }|                                 r|                                s|                    t                    S |                     || j        |j                  \  }}d                    d t          ||          D                       }t          d|
                    d          pdd          S )NTr   r   c                 l    g | ]1\  }}t          t          |          t          |          z            2S r,   r=  r>  s      r.   rA  z&Decimal.logical_or.<locals>.<listcomp>d  rB  r0   r(   r   rC  rE  s         r.   
logical_orzDecimal.logical_orV  s    H? llGud333   	:(8(8(:(: 	:''(8999 ''EJGG
c EECEEEFF6==#5#5#<a@@@r0   c                    	 |t                      }t          |d          }|                                 r|                                s|                    t                    S |                     || j        |j                  \  }}d                    d t          ||          D                       }t          d|
                    d          pdd          S )NTr   r   c                 l    g | ]1\  }}t          t          |          t          |          z            2S r,   r=  r>  s      r.   rA  z'Decimal.logical_xor.<locals>.<listcomp>u  rB  r0   r(   r   rC  rE  s         r.   rI  zDecimal.logical_xorg  rG  r0   c                 R   	 t          |d          }|t                      }| j        s|j        r|                                 }|                                }|s|rX|dk    r|dk    r|                     |          S |dk    r|dk    r|                    |          S |                     ||          S |                                                     |                                          }|dk    r|                     |          }|dk    r|}n| }|                    |          S r  	r   r   r   r   r  r   r  r   r  r  s          r.   max_magzDecimal.max_magx  s)   Fud333? llG 
	8u0 
	8 BB 8R 877rQww99W---77rQww ::g...''w777MMOO  !1!12266""5))A77CCCxx   r0   c                 R   	 t          |d          }|t                      }| j        s|j        r|                                 }|                                }|s|rX|dk    r|dk    r|                     |          S |dk    r|dk    r|                    |          S |                     ||          S |                                                     |                                          }|dk    r|                     |          }|dk    r| }n|}|                    |          S r  rQ  r  s          r.   min_magzDecimal.min_mag  s)   Fud333? llG 
	8u0 
	8 BB 8R 877rQww99W---77rQww ::g...''w777MMOO  !1!12266""5))A77CCCxx   r0   c                 N   	 |t                      }|                     |          }|r|S |                                 dk    rt          S |                                 dk    r+t	          dd|j        z  |                                          S |                                }|                    t                     |
                                 |                     |          }|| k    r|S |                     t	          dd|                                dz
            |          S )Nro   r   r1   r(   r]   r0  )r   r   r   r%  rB   r_   rm  rq   r  r   _ignore_all_flagsr  r,  r5  r5   r6   rG   new_selfs       r.   
next_minuszDecimal.next_minus  s   K? llGw// 	J##$$""#As7<'7HHH,,..k***!!###99W%%tO||,QW]]__Q5FGG#% % 	%r0   c                 N   	 |t                      }|                     |          }|r|S |                                 dk    rt          S |                                 dk    r+t	          dd|j        z  |                                          S |                                }|                    t                     |
                                 |                     |          }|| k    r|S |                     t	          dd|                                dz
            |          S )Nro   r1   r   r]   r(   r0  )r   r   r   r&  rB   r_   rm  rq   r  r   rV  r  r*  r5  rW  s       r.   	next_pluszDecimal.next_plus  s   K? llGw// 	J""###As7<'7HHH,,..m,,,!!###99W%%tO||,QW]]__Q5FGG#% % 	%r0   c                 V   	 t          |d          }|t                      }|                     ||          }|r|S |                     |          }|dk    r|                     |          S |dk    r|                     |          }n|                     |          }|                                rV|                    t          d|j
                   |                    t                     |                    t                     n|                                |j        k     r|                    t                     |                    t                      |                    t                     |                    t                     |s|                    t"                     |S )NTr   r(   r   z Infinite result from next_toward)r   r   r   r   r  r[  rY  r   r   r   rC   r   r   r   re   r   r   r	   )r5   r   r6   rG   
comparisons        r.   next_towardzDecimal.next_toward  s   	 ud333? llGug.. 	JYYu%%
??>>%(((..))CC//'**C ?? 	.  !C!$, , ,   )))  ))))\\^^gl**  +++  +++  )))  )))  .$$W---
r0   c                 Z   	 |                                  rdS |                                 rdS |                                 }|dk    rdS |dk    rdS |                                 r| j        rdS dS |t                      }|                     |	          r| j        rd
S dS | j        rdS dS )Nr   r  r1   z	+Infinityr   z	-Infinityz-Zeroz+Zeroro   z
-Subnormalz
+Subnormalz-Normalz+Normal)r   r   r   r  rC   r   r  )r5   r6   infs      r.   number_classzDecimal.number_class  s    	 <<>> 	6<<>> 	5  !88;"99;<<>> 	z ww? llGW-- 	$z $#|#|: 	99r0   c                 "    	 t          d          S Nr   ra  r   s    r.   radixzDecimal.radix:  s    5r{{r0   c                    	 |t                      }t          |d          }|                     ||          }|r|S |j        dk    r|                    t
                    S |j         t          |          cxk    r|j        k    sn |                    t
                    S |                                 rt          |           S t          |          }| j
        }|j        t          |          z
  }|dk    r	d|z  |z   }n|dk     r|| d          }||d          |d |         z   }t          | j        |                    d          pd| j                  S NTr   r(   r   r   r   r   r   r   r
   r_   r   r   r   rD   r   rB   rC   r   )r5   r   r6   rG   torotrotdigtopadrotateds           r.   rotatezDecimal.rotate>  sk   C? llGud333ug.. 	J:??''(8999U;;;;w|;;;;''(8999 	!4==  E

s6{{*199Y'FFQYYUFGG_F .6&5&>1
 's 3 3 :sDIG G 	Gr0   c                 L   	 |t                      }t          |d          }|                     ||          }|r|S |j        dk    r|                    t
                    S d|j        |j        z   z  }d|j        |j        z   z  }|t          |          cxk    r|k    sn |                    t
                    S | 	                                rt          |           S t          | j        | j        | j        t          |          z             }|                    |          }|S )NTr   r(   r   r   )r   r   r   r   r   r
   r`   r_   r   r   r   rB   rC   rD   r  )r5   r   r6   rG   liminflimsupr   s          r.   scalebzDecimal.scaleb_  s   L? llGud333ug.. 	J:??''(8999w|gl23w|gl23#e**........''(8999 	!4== TZDIE

4JKKFF7OOr0   c                    	 |t                      }t          |d          }|                     ||          }|r|S |j        dk    r|                    t
                    S |j         t          |          cxk    r|j        k    sn |                    t
                    S |                                 rt          |           S t          |          }| j
        }|j        t          |          z
  }|dk    r	d|z  |z   }n|dk     r|| d          }|dk     r|d |         }n|d|z  z   }||j         d          }t          | j        |                    d          pd| j                  S rf  rg  )r5   r   r6   rG   rh  ri  rj  shifteds           r.   r7  zDecimal.shiftx  s   C? llGud333ug.. 	J:??''(8999U;;;;w|;;;;''(8999 	!4==  E

s6{{*199Y'FFQYYUFGG_F 199VeVnGGs5y(Gw|mnn-G
$+NN3$7$7$>3	K K 	Kr0   c                 0    | j         t          |           ffS r+   )	__class__r   r   s    r.   
__reduce__zDecimal.__reduce__  s    T--r0   c                 v    t          |           t          u r| S |                     t          |                     S r+   typer   rt  r   r   s    r.   __copy__zDecimal.__copy__  0    ::  K~~c$ii(((r0   c                 v    t          |           t          u r| S |                     t          |                     S r+   rw  )r5   memos     r.   __deepcopy__zDecimal.__deepcopy__  rz  r0   c                    	 |t                      }t          ||          }| j        rXt          | j        |          }t          |                                           }|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         }|~|d         dv r|                     |d	z   |          } nZ|d         d
v r|                     | |          } n8|d         dv r.t          | j
                  |k    r|                     ||          } | s+| j        dk    r |d         d
v r|                     d|          } | s|d         r
| j        rd}	n| j        }	| j        t          | j
                  z   }
|d         dv r| s|d	|z
  }n0d	}n-|d         d
v r|
}n |d         dv r| j        dk    r	|
dk    r|
}nd	}|dk     rd}d| z  | j
        z   }n]|t          | j
                  k    r%| j
        d|t          | j
                  z
  z  z   }d}n | j
        d |         pd}| j
        |d          }|
|z
  }t!          |	||||          S )N)_localeconvrx  %gGr   	precisioneEr1   zfF%gGr(   no_neg_0r  r   r   )r   _parse_format_specifierr   _format_signrC   r   r  _format_alignrf   rB   rD   r   r^   r  r%  r   _format_number)r5   	specifierr6   r  specrP   bodyr^   r  adjusted_signr  r  r   r   r   s                  r.   
__format__zDecimal.__format__  s   	 ? llG&ykJJJ  	3
D11Dt}}''DF|s"" tT222 <:g&67DL <3#DJ	49Q;GGD #%	 F|t##{{9Q;99f&&}}iZ::f%%#di..9*D*D{{9h77  	.	A$v,%*?*?==H--D 	'Z( 	'TZ 	'MM JM YTY/
<4 I1y=&\U""!HH&\T!!yA~~*r//% a<<GXI2HHDI&&i#xDI'>"??GHHi		*1cGy+H! mWhTJJJr0   )r   N)NNr+   )FN)TN)r9   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.  r3  __rmul__r:  r?  rA  rG  rI  rK  rM  rQ  rS  rU  rZ  r\  	__trunc__propertyr^  rb  rd  rg  rE   r  rx  rz  r}  r  r  r  r  r  dictrn  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  r/  r1  r5  r:  rF  rJ  rM  rI  rR  rT  rY  r[  r^  ra  rd  rl  rp  r7  ru  ry  r}  r  r,   r0   r.   r   r     s	       66IT@ T@ T@ T@l * * [*X       @  B4 4 4-' -' -'@% % % %$ $ $ $% % % %$ $ $ $% % % %) ) ) )$( ( (4O O O0 0 0d+ + +
2/ 2/ 2/ 2/h7 7 7 7! ! ! !,! ! ! !*   ,T T T Tl HB B B B4 4 4 46 6 6 6n H9! 9! 9! 9!v  B8 8 8 8"# "# "# "#H7 7 7 7   64 4 4 4I! I! I! I!V/ / / /89 9 9 9  7 7 7 I  X   X  $ $ $
 
 
Z Z ZL  ' ' '  - - -- - -+ + ++ + ++ + + #d &**&" 	 	 	<6 <6 <6 <6|2 2 24 4 4*/ */ */ */XS4 S4 S4 S4jk? k? k?ZV V V Vp4 4 4 4@ @ @ @2; ; ; ;z' ' ' ' 8  8  8D  .   :. . . ." $Ka a a aF(! (! (! (!T !  !  !  !D% % %2 2 2    
4 
4 
4 
4F F F FR	" 	" 	" 	"K K KO O O= = = =I I I IV  $ $ $     ' ' '/ / / /            . . . .9 9 9, , ,20 0 0 0d0 0 0<1 1 1 1f! ! ! !<    A A A A") ) ) )A A A A"A A A A"! ! ! !<! ! ! !<% % % %.% % % %., , , ,\( ( ( (T  G G G GB   2$K $K $K $KN. . .) ) )
) ) )TK TK TK TK TK TKr0   r   Fc                 ~    	 t                               t                    }| |_        ||_        ||_        ||_        |S r+   )r   r   r   rC   rD   r   r   )rP   coefficientr  specialr5   s        r.   rB   rB     s<     >>'""DDJDIDIDKr0   c                   "    e Zd Z	 d Zd Zd ZdS )ru   c                 8    |                                 | _        d S r+   )rq   rz   )r5   rz   s     r.   __init__z_ContextManager.__init__"  s    &++--r0   c                 ^    t                      | _        t          | j                   | j        S r+   )r   saved_contextr   rz   r   s    r.   	__enter__z_ContextManager.__enter__$  s(    '\\4#$$$r0   c                 .    t          | j                   d S r+   )r   r  )r5   tvtbs       r.   __exit__z_ContextManager.__exit__(  s    4%&&&&&r0   N)r9   r:   r;   r  r  r  r,   r0   r.   ru   ru     sF        
. . .     ' ' ' ' 'r0   ru   c                      e Zd Z	 	 	 	 dTdZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd ZeZdUdZd Zd Zd ZdZd Zd Zd ZdVd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/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d; Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdC ZEdD ZFdUdEZGdF ZHdG ZIdH ZJdI ZKdJ ZLdK ZMdL ZNdM ZOdN ZPdO ZQdP ZRdQ ZSdR ZTdS ZUeUZVdS )Wr   Nc
                    	 t           }
n# t          $ r Y nw xY w||n|
j        | _        ||n|
j        | _        ||n|
j        | _        ||n|
j        | _        ||n|
j        | _        ||n|
j        | _        |	g | _        n|	| _        |
j	        
                                | _	        nEt          t                    s)t          fdt          z   D                       | _	        n| _	        't                              t          d          | _        d S t          t                    s*t          fdt          z   D                       | _        d S | _        d S )Nc              3   >   K   | ]}|t          |v           fV  d S r+   r   )r?  rY  ri   s     r.   	<genexpr>z#Context.__init__.<locals>.<genexpr>W  2      MMqq#a5j//2MMMMMMr0   r(   c              3   >   K   | ]}|t          |v           fV  d S r+   r  )r?  rY  rh   s     r.   r  z#Context.__init__.<locals>.<genexpr>^  r  r0   )r   	NameErrorr_   r^   re   r`   rf   rg   _ignored_flagsri   rq   r   r  r  fromkeysrh   )r5   r_   r^   re   r`   rf   rg   rh   ri   r  dcs          ``  r.   r  zContext.__init__>  s{   
	BB 	 	 	D	 !,DD"'	$,$8bk ,DD"'	 ,DD"'	$,$8bk#/UURX
!"$D"0D=DJJE4(( 	MMMMHu<LMMMMMDJJDJ=x33DJJJE4(( 	MMMMHu<LMMMMMDJJJDJJJs    
c                 X   t          |t                    st          d|z            |dk    r||k    rt          d||||fz            nE|dk    r||k     rt          d||||fz            n"||k     s||k    rt          d||||fz            t                              | ||          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   rx   r   r   __setattr__)r5   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44r0   c                    t          |t                    st          d|z            |D ]}|t          vrt	          d|z            t          D ]}||vrt	          d|z            t
                              | ||          S )Nz%s must be a signal dictz%s is not a valid signal dict)r   r  rx   r  KeyErrorr   r  )r5   r  r   r~   s       r.   _set_signal_dictzContext._set_signal_dictp  s    !T"" 	<6:;;; 	D 	DC(??>BCCC # 	D 	DC!88>BCCC !!$a000r0   c                 T   |dk    r|                      ||dd          S |dk    r|                      ||dd          S |dk    r|                      ||dd          S |dk    r|                      ||dd          S |d	k    r|                      ||dd          S |d
k    r7|t          vrt          d|z            t                              | ||          S |dk    s|dk    r|                     ||          S |dk    rt                              | ||          S t          d|z            )Nr_   r1   r`  re   r  r(   r`   rf   rg   r^   z%s: invalid rounding moderh   ri   r  z.'decimal.Context' object has no attribute '%s')r  _rounding_modesrx   r   r  r  AttributeError)r5   r  r   s      r.   r  zContext.__setattr__{  s_   6>>**45AAAV^^**4BBBV^^**45AAAZ**41===W__**41===ZO++   ;e CDDD%%dD%888W__((u555%%%%%dD%888 @4GI I Ir0   c                 &    t          d|z            )Nz%s cannot be deleted)r  )r5   r  s     r.   __delattr__zContext.__delattr__  s    3d:;;;r0   c           	          d | j                                         D             }d | j                                        D             }| j        | j        | j        | j        | j        | j        | j	        ||ffS )Nc                     g | ]	\  }}||
S r,   r,   r?  sigr  s      r.   rA  z&Context.__reduce__.<locals>.<listcomp>  !    ;;;a;;;;r0   c                     g | ]	\  }}||
S r,   r,   r  s      r.   rA  z&Context.__reduce__.<locals>.<listcomp>  r  r0   )
rh   rv   ri   rt  r_   r^   re   r`   rf   rg   )r5   rh   ri   s      r.   ru  zContext.__reduce__  sv    ;;4:#3#3#5#5;;;;;4:#3#3#5#5;;;DM49di
E5:; 	;r0   c                    	 g }|                     dt          |           z             d | j                                        D             }|                     dd                    |          z   dz              d | j                                        D             }|                     dd                    |          z   dz              d                    |          dz   S )	NzrContext(prec=%(prec)d, rounding=%(rounding)s, Emin=%(Emin)d, Emax=%(Emax)d, capitals=%(capitals)d, clamp=%(clamp)dc                 &    g | ]\  }}||j         S r,   r9   )r?  r   r  s      r.   rA  z$Context.__repr__.<locals>.<listcomp>  #    @@@1a@@@@r0   zflags=[, ]c                 &    g | ]\  }}||j         S r,   r  )r?  r  r  s      r.   rA  z$Context.__repr__.<locals>.<listcomp>  r  r0   ztraps=[))r   varsrh   rv   r   ri   )r5   rY  namess      r.   r  zContext.__repr__  s    '	 # :: 	 	 	 A@
(8(8(:(:@@@	TYYu---3444@@
(8(8(:(:@@@	TYYu---3444yy||c!!r0   c                 0    	 | j         D ]}d| j         |<   d S r`  )rh   r5   flags     r.   rr   zContext.clear_flags  /    %J 	! 	!D DJt	! 	!r0   c                 0    	 | j         D ]}d| j         |<   d S r`  )ri   r  s     r.   clear_trapszContext.clear_traps  r  r0   c                     	 t          | j        | j        | j        | j        | j        | j        | j        | j        | j	        	  	        }|S r+   )
r   r_   r^   re   r`   rf   rg   rh   ri   r  r5   ncs     r.   r  zContext._shallow_copy  sB    /TYty$)]DJ
DJ(* * 	r0   c                     	 t          | j        | j        | j        | j        | j        | j        | j                                        | j	                                        | j
        	  	        }|S r+   )r   r_   r^   re   r`   rf   rg   rh   rq   ri   r  r  s     r.   rq   zContext.copy  sW    ,TYty$)]DJZ__&&
(9(9(* * 	r0   c                     	 t                               ||          }|| j        v r  |            j        | g|R  S d| j        |<   | j        |         s  |            j        | g|R  S  ||          r  )_condition_maprl   r  r7   rh   ri   )r5   	conditionexplanationr-   errors        r.   r   zContext._raise_error  s    	 ""9i88D'''!5577>$.....
5z%  	3%99;;%d2T2222 eK   r0   c                 "    	  | j         t           S r+   )_ignore_flagsr  r   s    r.   rV  zContext._ignore_all_flags  s    2!t!8,,r0   c                 Z    	 | j         t          |          z   | _         t          |          S r+   )r  r   )r5   rh   s     r.   r  zContext._ignore_flags  s)    2  $2T%[[@E{{r0   c                     	 |r*t          |d         t          t          f          r|d         }|D ]}| j                            |           d S r`  )r   r   r   r  remove)r5   rh   r  s      r.   _regard_flagszContext._regard_flags  sb    9 	Za5,77 	!HE 	- 	-D&&t,,,,	- 	-r0   c                 B    	 t          | j        | j        z
  dz             S r  )r   re   r_   r   s    r.   r5  zContext.Etiny  s!    /49ty(1,---r0   c                 B    	 t          | j        | j        z
  dz             S r  )r   r`   r_   r   s    r.   rm  zContext.Etop  s!    :49ty(1,---r0   c                 $    	 | j         }|| _         |S r+   )r^   )r5   rx  r^   s      r.   r  zContext._set_rounding  s    	 =r0   r   c                    	 t          |t                    r7||                                k    sd|v r|                     t          d          S t          ||           }|                                r@t          |j                  | j	        | j
        z
  k    r|                     t          d          S |                    |           S )Nr   zAtrailing or leading whitespace and underscores are not permitted.ro   zdiagnostic info too long in NaN)r   r   r   r   r   r   r   r   rD   r_   rg   r  )r5   r!  r   s      r.   create_decimalzContext.create_decimal  s    	&
 c3 	GSCIIKK%7%73#::$$%5&FG G G C&&&88:: 	H#af++	DJ(>>>$$%5%FH H Hvvd||r0   c                 b    	 t                               |          }|                    |           S r+   )r   r   r  )r5   r   r   s      r.   create_decimal_from_floatz!Context.create_decimal_from_float  s,    	 q!!vvd||r0   c                 R    	 t          |d          }|                    |           S r  )r   r"  r5   r  s     r.   r   zContext.abs/  s/    	" 1d+++yyy&&&r0   c                     	 t          |d          }|                    ||           }|t          u rt          d|z            |S NTr   ro   Unable to convert %s to Decimal)r   r*  r   rx   r5   r  r@  r>  s       r.   addzContext.addD  sT    	 1d+++IIaI&&=ABBBHr0   c                 F    t          |                    |                     S r+   )r   r  r  s     r.   _applyzContext._applyY  s    166$<<   r0   c                 t    	 t          |t                    st          d          |                                S )Nz,canonical requires a Decimal as an argument.)r   r   rx   r  r  s     r.   r  zContext.canonical\  s9    	 !W%% 	LJKKK{{}}r0   c                 T    	 t          |d          }|                    ||           S r  )r   r   r5   r  r@  s      r.   r   zContext.comparei  s2    	@ 1d+++yyDy)))r0   c                 T    	 t          |d          }|                    ||           S r  )r   r  r  s      r.   r  zContext.compare_signal  s4    	> 1d+++4000r0   c                 P    	 t          |d          }|                    |          S r   )r   r  r  s      r.   r  zContext.compare_total  s-    	2 1d+++q!!!r0   c                 P    	 t          |d          }|                    |          S r   )r   r  r  s      r.   r  zContext.compare_total_mag  s/    	 1d+++""1%%%r0   c                 N    	 t          |d          }|                                S r   )r   r  r  s     r.   r  zContext.copy_abs  s)    	 1d+++zz||r0   c                 D    	 t          |d          }t          |          S r   )r   r   r  s     r.   copy_decimalzContext.copy_decimal  s'    	 1d+++qzzr0   c                 N    	 t          |d          }|                                S r   )r   r  r  s     r.   r  zContext.copy_negate  s)    	 1d+++}}r0   c                 P    	 t          |d          }|                    |          S r   )r   r  r  s      r.   r  zContext.copy_sign  s+    	( 1d+++{{1~~r0   c                     	 t          |d          }|                    ||           }|t          u rt          d|z            |S r  )r   r:  r   rx   r  s       r.   dividezContext.divide  sT    	: 1d+++MM!TM**=ABBBHr0   c                     	 t          |d          }|                    ||           }|t          u rt          d|z            |S r  )r   rS  r   rx   r  s       r.   
divide_intzContext.divide_int9  sT    	 1d+++NN1dN++=ABBBHr0   c                     	 t          |d          }|                    ||           }|t          u rt          d|z            |S r  )r   rG  r   rx   r  s       r.   r6  zContext.divmodP  sT    	 1d+++LLDL))=ABBBHr0   c                 R    	 t          |d          }|                    |           S r  )r   r   r  s     r.   r   zContext.expe  s/    	( !T***uuTu"""r0   c                 V    	 t          |d          }|                    |||           S r  )r   r  )r5   r  r@  r  s       r.   r  zContext.fma}  s3    	& 1d+++uuQ4u(((r0   c                 t    	 t          |t                    st          d          |                                S )Nz/is_canonical requires a Decimal as an argument.)r   r   rx   r  r  s     r.   r  zContext.is_canonical  s;    	 !W%% 	OMNNN~~r0   c                 N    	 t          |d          }|                                S r   )r   r  r  s     r.   r  zContext.is_finite  s)    	$ 1d+++{{}}r0   c                 N    	 t          |d          }|                                S r   )r   r  r  s     r.   r  zContext.is_infinite  s)    
	 1d+++}}r0   c                 N    	 t          |d          }|                                S r   )r   r   r  s     r.   r   zContext.is_nan  s)    	 1d+++xxzzr0   c                 R    	 t          |d          }|                    |           S r  )r   r  r  s     r.   r  zContext.is_normal  s/    	& 1d+++{{4{(((r0   c                 N    	 t          |d          }|                                S r   )r   r   r  s     r.   r   zContext.is_qnan  s)    
	 1d+++yy{{r0   c                 N    	 t          |d          }|                                S r   )r   r  r  s     r.   r  zContext.is_signed  s)    	 1d+++{{}}r0   c                 N    	 t          |d          }|                                S r   )r   r   r  s     r.   r   zContext.is_snan  s)    	 1d+++yy{{r0   c                 R    	 t          |d          }|                    |           S r  )r   r  r  s     r.   r  zContext.is_subnormal  s/    	$ 1d+++~~d~+++r0   c                 N    	 t          |d          }|                                S r   )r   r  r  s     r.   r  zContext.is_zero3  s)    	 1d+++yy{{r0   c                 R    	 t          |d          }|                    |           S r  )r   r)  r  s     r.   r)  z
Context.lnD  s/    	$ 1d+++ttDt!!!r0   c                 R    	 t          |d          }|                    |           S r  )r   r/  r  s     r.   r/  zContext.log10Z  s/    	0 1d+++wwtw$$$r0   c                 R    	 t          |d          }|                    |           S r  )r   r1  r  s     r.   r1  zContext.logbv  s/    	, 1d+++vvdv###r0   c                 T    	 t          |d          }|                    ||           S r  )r   rF  r  s      r.   rF  zContext.logical_and  1    	. 1d+++}}Q}---r0   c                 R    	 t          |d          }|                    |           S r  )r   rJ  r  s     r.   rJ  zContext.logical_invert  s2    	 1d+++---r0   c                 T    	 t          |d          }|                    ||           S r  )r   rM  r  s      r.   rM  zContext.logical_or  s1    	. 1d+++||At|,,,r0   c                 T    	 t          |d          }|                    ||           S r  )r   rI  r  s      r.   rI  zContext.logical_xor  r  r0   c                 T    	 t          |d          }|                    ||           S r  )r   r$  r  s      r.   r$  zContext.max  1    	. 1d+++uuQu%%%r0   c                 T    	 t          |d          }|                    ||           S r  )r   rR  r  s      r.   rR  zContext.max_mag  1    	 1d+++yyDy)))r0   c                 T    	 t          |d          }|                    ||           S r  )r   r  r  s      r.   r  zContext.min   r  r0   c                 T    	 t          |d          }|                    ||           S r  )r   rT  r  s      r.   rT  zContext.min_mag;  r  r0   c                 R    	 t          |d          }|                    |           S r  )r   r  r  s     r.   minuszContext.minusL  /    	 1d+++yyy&&&r0   c                     	 t          |d          }|                    ||           }|t          u rt          d|z            |S r  )r   r3  r   rx   r  s       r.   multiplyzContext.multiply]  sT    	0 1d+++IIaI&&=ABBBHr0   c                 R    	 t          |d          }|                    |           S r  )r   rY  r  s     r.   rY  zContext.next_minus}  s/    	  1d+++||D|)))r0   c                 R    	 t          |d          }|                    |           S r  )r   r[  r  s     r.   r[  zContext.next_plus  s/    	  1d+++{{4{(((r0   c                 T    	 t          |d          }|                    ||           S r  )r   r^  r  s      r.   r^  zContext.next_toward  s1    	> 1d+++}}Q}---r0   c                 R    	 t          |d          }|                    |           S r  )r   r  r  s     r.   r  zContext.normalize  s/    	( 1d+++{{4{(((r0   c                 R    	 t          |d          }|                    |           S r  )r   ra  r  s     r.   ra  zContext.number_class  s0    -	\ 1d+++~~d~+++r0   c                 R    	 t          |d          }|                    |           S r  )r   r  r  s     r.   pluszContext.plus  r!  r0   c                     	 t          |d          }|                    |||           }|t          u rt          d|z            |S r  )r   r  r   rx   )r5   r  r@  r  r>  s        r.   powerzContext.power#  sX    G	P 1d+++IIaI..=ABBBHr0   c                 T    	 t          |d          }|                    ||           S r  )r   r  r  s      r.   r  zContext.quantizes  s2    5	l 1d+++zz!Tz***r0   c                 "    	 t          d          S rc  ra  r   s    r.   rd  zContext.radix  s    	
 r{{r0   c                     	 t          |d          }|                    ||           }|t          u rt          d|z            |S r  )r   rK  r   rx   r  s       r.   r8  zContext.remainder  sT    	< 1d+++IIaI&&=ABBBHr0   c                 T    	 t          |d          }|                    ||           S r  )r   rQ  r  s      r.   rQ  zContext.remainder_near  s4    	< 1d+++4000r0   c                 T    	 t          |d          }|                    ||           S r  )r   rl  r  s      r.   rl  zContext.rotate  s1    	2 1d+++xx4x(((r0   c                 P    	 t          |d          }|                    |          S r   )r   r  r  s      r.   r  zContext.same_quantum  s-    	( 1d+++~~a   r0   c                 T    	 t          |d          }|                    ||           S r  )r   rp  r  s      r.   rp  zContext.scaleb2  s1    	 1d+++xx4x(((r0   c                 T    	 t          |d          }|                    ||           S r  )r   r7  r  s      r.   r7  zContext.shiftE  s1    	4 1d+++wwq$w'''r0   c                 R    	 t          |d          }|                    |           S r  )r   r  r  s     r.   r  zContext.sqrtc  s/    	8 1d+++vvdv###r0   c                     	 t          |d          }|                    ||           }|t          u rt          d|z            |S r  )r   r,  r   rx   r  s       r.   subtractzContext.subtract  sT    	 1d+++IIaI&&=ABBBHr0   c                 R    	 t          |d          }|                    |           S r  )r   r  r  s     r.   r  zContext.to_eng_string  s/    	0 1d+++t,,,r0   c                 R    	 t          |d          }|                    |           S r  )r   r  r  s     r.   to_sci_stringzContext.to_sci_string  s/    	 1d+++yyy&&&r0   c                 R    	 t          |d          }|                    |           S r  )r   r  r  s     r.   r  zContext.to_integral_exact  s2    	4 1d+++""4"000r0   c                 R    	 t          |d          }|                    |           S r  )r   r  r  s     r.   r  zContext.to_integral_value  s2    	2 1d+++""4"000r0   )	NNNNNNNNNr+   )r   )Wr9   r:   r;   r  r  r  r  r  ru  r  rr   r  r  rq   ry  r   rV  r  r  r   r5  rm  r  r  r  r   r  r  r  r   r  r  r  r  r  r  r  r  r  r6  r   r  r  r  r  r   r  r   r  r   r  r  r)  r/  r1  rF  rJ  rM  rI  r$  rR  r  rT  r   r#  rY  r[  r^  r  ra  r*  r,  r  rd  r8  rQ  rl  r  rp  r7  r  r7  r  r:  r  r  r  r,   r0   r.   r   r   +  s       $ BFDH&*" " " "H5 5 5	1 	1 	1I I I2< < <; ; ;" " "! ! !
! ! !
     H! ! ! !,- - -  - - - H. . .. . .  &   "  $' ' '*  *! ! !  "* "* "*H!1 !1 !1F" " ":& & &        0# # #J  .  *# # #0) ) ).       ,     ) ) ).    "   , , ,,  "" " ",% % %8$ $ $4. . .6. . .&- - -6. . .6& & &6* * *"& & &6* * *"' ' '"  @* * *() ) )(!. !. !.F) ) )00, 0, 0,d' ' '"N N N N`8+ 8+ 8+t  $ $ $L 1  1  1D) ) ):! ! !0) ) )&( ( (<$ $ $@  .- - -8' ' '1 1 1<1 1 1< $KKKr0   r   c                        e Zd ZdZddZd ZdS )r   rP   r   r   Nc                    |d | _         d| _        d | _        d S t          |t                    r3|j        | _         t          |j                  | _        |j        | _        d S |d         | _         |d         | _        |d         | _        d S )Nr(   r1   r   )rP   r   r   r   r   rC   rD   r   )r5   r   s     r.   r  z_WorkRep.__init__  s~    =DIDHDHHHw'' 	 DI5:DHzDHHH aDIQxDHQxDHHHr0   c                 8    d| j         d| j        d| j        dS )N(r  r  r>  r   s    r.   r  z_WorkRep.__repr__  s#     !%DHHHdhhh??r0   r+   )r9   r:   r;   r  r  r  r,   r0   r.   r   r     sA        $I
       @ @ @ @ @r0   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   r1   r   )r   r   r   r   r  )r(  r)  r_   tmpr   tmp_len	other_lenr   s           r.   r&  r&    s     w #cg,,GC	NN##I
'CGdNQ.//
/C59q 3&&		GGrcg	)**GGiCG8Or0   c                     	 | dk    rdS |dk    r| d|z  z  S t          t          |                     }t          |          t          |                    d                    z
  }|| k     rd n| d| z  z  S )Nr(   r   r   )r   r   r   rstrip)rA   r  str_nval_ns       r.   r  r  6  s    	 	Avvq	
a2q5y CFFE

Sc!2!2333rzzttqBF{2r0   c                 v    	 | dk    s|dk    rt          d          d}||k    r|||  |z  z
  dz	  }}||k    |S )Nr(   z3Both arguments to _sqrt_nearest should be positive.r1   )r   )rA   r  r@  s      r.   _sqrt_nearestrK  K  s^     	AvvaNOOOA
q&&!QBE'1*1 q&&Hr0   c                 H    	 d|z  | |z	  }}|d| |dz
  z  z  |dz  z   |k    z   S )Nr1   r   r,   )r  r7  r@  r=  s       r.   _rshift_nearestrM  Z  s?     :qEzqA1!91%)**r0   c                 N    	 t          | |          \  }}|d|z  |dz  z   |k    z   S )Nr   r1   )r6  )r  r@  r=  r>  s       r.   _div_nearestrO  b  s5     !Q<<DAq!qsa  r0   r  c                    	 | |z
  }d}||k    rt          |          ||z
  z  |k    s||k    rt          |          ||z
  z	  |k    r~t          ||z  dz  |t          ||t          ||          z   z  |          z             }|dz  }||k    rt          |          ||z
  z  |k    _||k    rt          |          ||z
  z	  |k    ~t	          dt          t          |                    z  d|z  z             }t          ||          }t          ||          }t          |dz
  dd          D ]&}t          ||          t          ||z  |          z
  }'t          ||z  |          S )Nr(   r1   r   r   )r   rO  rK  rM  r   r   r   r  )	r  MLr  RTyshiftwr   s	            r.   _ilogrX  j  s   : 	
!A	A66c!ff!mq((q55SVVqs]a''!A#!]1a10E0E.E+FJJJL L	Q	 66c!ff!mq((q55SVVqs]a'' 
SSVV_qs#	$	$$AQ""FQA1Q32 ; ;AfQh!:!::!Qr0   c                    	 |dz  }t          t          |                     }||z   ||z   dk    z
  }|dk    rhd|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   r1   r(   r   r  )r   r   rO  rX  _log10_digits)
r  r  r  r  r   rR  r   log_dlog_10log_tenpowers
             r.   r.  r.    s    : FA 	CFFA	!qsaxA1uuEaCE66QJAAQQB''Aaq!!U1Wf--s#ArA2v..U*C000r0   c                    	 |dz  }t          t          |                     }||z   ||z   dk    z
  }|dk    r?||z   |z
  }|dk    r	| d|z  z  } nt          | d| z            } t          | d|z            }nd}|r_t          t          t	          |                              dz
  }||z   dk    r't          |t          ||z             z  d|z            }nd}nd}t          ||z   d          S rZ  )r   r   rO  rX  r   r[  )	r  r  r  r  r   r   r\  r  	f_log_tens	            r.   r'  r'    s   : FA
 	CFFA	!qsaxA 	1uuaCE66QJAAQQB''A aQ  	 	CAKK  "u9>> %Q}QuW'='=%=r5yIIIIII	 	E)3///r0   c                       e Zd Z	 d Zd ZdS )_Log10Memoizec                     d| _         d S )N/23025850929940456840179914546843642076011014886)r   r   s    r.   r  z_Log10Memoize.__init__  s    Gr0   c                    	 |dk     rt          d          |t          | j                  k    rwd}	 d||z   dz   z  }t          t	          t          d|z  |          d                    }|| d          d|z  k    rn|dz  }R|                    d          d d	         | _        t          | j        d |d
z                      S )Nr(   zp should be nonnegativer   Tr   r   r  r   r   r1   )r   r   r   r   rO  rX  rG  r   )r5   r  r  rR  r   s        r.   	getdigitsz_Log10Memoize.getdigits  s    	 q556777DK     E5O\%1a..#>>??5&''?c%i//
 !--,,SbS1DK4;t!t$%%%r0   N)r9   r:   r;   r  rf  r,   r0   r.   rb  rb    s;        CH H H& & & & &r0   rb  c                    	 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 )NrQ  r   r1   r(   r   r   )r  r   r   r   rO  r  )	r  rR  rS  rT  rU  r  Mshiftr  r   s	            r.   _iexpri    s    !( 	1qyA 
SSVV_qs#	$	$$AQATF1Q32 5 5FQJ!44 1Q3B / /QqSAfHv..Q3Jr0   c           	      j   	 |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(   r1   r   i  r   )r$  r   r   r6  r[  rO  ri  )	r  r  r  r  r=  r7  cshiftquotr  s	            r.   r  r  2  s    4 FA 1s3q66{{?Q&''E	E	A aCEzz2u9BJv}Q//00ID# sBI
&
&C c2q5))400$(Q,>>r0   c                    	 t          t          t          |                              |z   }t          | |||z   dz             }||z
  }|dk    r||z  d|z  z  }nt	          ||z  d| z            }|dk    rHt          t          |                     |z   dk    |dk    k    rd|dz
  z  dz   d|z
  }
}	n<d|z  dz
  | }
}	n0t          ||dz    |dz             \  }	}
t	          |	d          }	|
dz  }
|	|
fS )Nr1   r(   r   )r   r   r   r'  rO  r  )r  r  r  r  r  r@  lxcr7  pcr   r   s              r.   r  r  V  s$    	CBLLBA B!A

C qDEzzVBI#b&"uf*--	Qww R\\B!#a00ac1ac3EEQq1"3EE21vqs++
sUB''q#:r0   r  F   5   (      r     r   r   )	r0  2345678r]   c                     	 | 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    sI     KAvvKLLLFFEs5zz>JuQx000r0   c                    	 t          | t                    r| S t          | t                    rt          |           S |r/t          | t                    rt                              |           S |rt          d| z            t          S )Nr  )r   r   r   r   r   rx   r   )r   r   allow_floats      r.   r   r     s     %!! % u~~ )z%// )!!%((( C9EABBBr0   c                 x   	 t          |t                    r| |fS t          |t          j                  r_| j        sBt          | j        t          t          | j	                  |j
        z            | j                  } | t          |j                  fS |r,t          |t          j                  r|j        dk    r|j        }t          |t                     rWt#                      }|rd|j        t&          <   n|                    t&          d           | t                              |          fS t,          t,          fS )Nr(   r1   r   )r   r   _numbersRationalr   rB   rC   r   r   rD   denominatorr   	numeratorComplexrb  r^  r   r   rh   r   r   r   r   )r5   r   r   r6   s       r.   r   r     s7    %!! U{ %*++ . 	/#DJ$'DI9J(J$K$K$(I/ /D WU_----
  z%)9:: uzQ
% /,, 	O,-GM.))  MO O OW''....>))r0   r  i?B i)r_   r^   ri   rh   r`   re   rf   rg   r   )r_   r^   ri   rh   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                    	 t                               |           }|t          d| z             |                                }|d         }|d         }|d         d u|d<   |d         r(|t          d| z             |t          d| z             |pd|d<   |pd|d<   |d	         d
|d	<   t	          |d         pd          |d<   |d         t	          |d                   |d<   |d         dk    r|d         
|d         dv rd|d<   |d         dk    rVd|d<   |t          j                    }|d         t          d| z             |d         |d<   |d         |d<   |d         |d<   n|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:  >rP   r   minimumwidthr   r  r(   rx  gGnr1   rA   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_specr  r   format_dictr  r  s         r.   r  r  ,  s:   $ 	&++K88Ay5CDDD ++--K vD E))4D@K	9 A 68CD E E E 24?@ A A A+#K !<CK 6"!F #&k.&A&HS"I"IK;+#&{;'?#@#@K  ;1$$v&+f*=*F*F'(K$ 6c!!!F!,..K'3 >@KL M M M'2?'CO$"-j"9J'2?'CO$$'/+-K(#$a&J'*O$r0   c                 b   	 |d         }|d         }||t          |           z
  t          |          z
  z  }|d         }|dk    r	| |z   |z   }na|dk    r	|| z   |z   }nR|dk    r	| |z   |z   }nC|dk    r.t          |          dz  }|d |         | z   |z   ||d          z   }nt          d	          |S )
Nr  r  r  <r  =^r   zUnrecognised alignment field)r   r   )	rP   r  r  r  r  paddingr  r   halfs	            r.   r  r  |  s     'L<DL3t99,s4yy89GME||w&	#4$&	#$&	#7||Q$$&->7888Mr0   c                     	 ddl m}m} | sg S | d         dk    r6t          |           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    s     (''''''' =		"		s8}}11uXcrc]FF8B<$8$8999	")	)	)};<<<r0   c                 v   	 |d         }|d         }g }t          |          D ]}|dk    rt          d          t          t          t	          |           |d          |          }|                    d|t	          |           z
  z  | | d          z              | d |          } ||z  }| s|dk    r ne|t	          |          z  }t          t	          |           |d          }|                    d|t	          |           z
  z  | | d          z              |                    t          |                    S )Nr  r  r(   zgroup length should be positiver1   r   )r  r   r  r$  r   r   r   reversed)r   r  	min_widthsepr  groupsr  s          r.   _insert_thousands_sepr    sB     
CJHFH%% ; ;66>???CKKA..22c1s6{{?+faRSSk9:::!Q	 	)q..ESXX		FY**c1s6{{?+faRSSk9:::88HV$$%%%r0   c                 4    	 | rdS |d         dv r|d         S dS )Nr   rP   z +r   r,   )is_negativer  s     r.   r  r    s0    # s	f		F|rr0   c                    	 t          | |          }|s|d         r|d         |z   }|dk    s
|d         dv r,ddddd|d                  }|d	                    ||          z  }|d         d
k    r|d
z  }|d         r)|d         t          |          z
  t          |          z
  }nd}t          |||          }t	          |||z   |          S )Naltr  r(   rx  r  r  r  )r  r  r  r  z{0}{1:+}r  r  r  )r  formatr   r  r  )r  r   r   r   r  rP   echarr  s           r.   r  r    s    " T**D 44; 4(83
axx4<4''#C88fFJ%%eS111F|sCI (3x==83t99D			#GT9==Gwx/666r0   Infz-Infr  r   r   r+   )F)r(   )r  )FF)r1   ){__all__r9   	__xname____version____libmpdec_version__mathr   numbersr  syscollectionsr)   _namedtupler   ImportErrorr   r   r   r   r   r   r   r   r%   r&   maxsizer!   r"   r#   r$   ArithmeticErrorr   r	   r
   r   ZeroDivisionErrorr   r   r   r   r   r   r   r   r   rx   r   r  r  r  contextvars
ContextVarrk   	frozensetrw   r   r   r    r   r   rB   Numberregisterru   r   r   r&  r   r   r  r  rK  rM  rO  rX  r.  r'  rb  rf  r[  ri  r  r  r  r   r   r   r   r   recompileVERBOSE
IGNORECASEr  r   rv  r  DOTALLr  localer  r  r  r  r  r  r  r&  r%  rF   r  r  r  rN   	hash_infomodulusr   r`  r   rW  _PyHASH_NANr   r   r,   r0   r.   <module>r     s   aF! ! !F 	          



&555555;~/EFFLL & & &%%LLL& 
##
 ;'!H!H"HHHHH
#	       .
 
 
 
 
 
 
 
    '   :    '   % % % % %%'8 % % % 	 	 	 	 	) 	 	 		 	 	 	 	(*; 	 	 	
 
 
 
 
 
 
 
    %   
 
 
 
 
 
 
 
	 	 	 	 	  	 	 	#: #: #: #: #:w #: #: #:L    )       %y     ^Wh'ND ##3$%5#$4 !13 }o}/:G    -{-.?@@ iOOO    & & & + + + +hw3K w3K w3K w3K w3Kf w3K w3K w3Krg   & 	   ! ! !
' ' ' ' 'f ' ' 'O$ O$ O$ O$ O$f O$ O$ O$b6@ @ @ @ @v @ @ @4   < 
3 3 3*  + + +! ! !.  .  .  . ` 1  1  1D*0 *0 *0X!& !& !& !& !&F !& !& !&F )# # # #J"? "? "?H( ( (V r"br+ + 1 1 1 1   &"* "* "* "*T /x)9:   wx)97IN   '  * 
			
"* " Z"-#! !" "'# & RZ$
bj  & !+
 , Z	! !   
	 	 	 	D	N N N N`  6= = =.#& #& #& #&J  #7 #7 #7R GENN	GFOO wu~~

wqzzwr{{ /0 -'mm B!+_==CCs   . 99$K) )K10K1