<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]}             *   @   s  d  d d d d d d d d d	 d
 d d d d d d d d d d d d d d d d d d d d d d  d! d" d# g$ Z  e Z d$ Z d% Z d& Z d' d( l Z d' d( l Z d' d( l	 Z	 y# d' d) l
 m Z e d d*  Z Wn e k
 r d+ d,   Z Yn Xd Z d Z d Z d Z d Z d Z d Z d Z d- Z e	 j d. d/ d0 k rUd1 Z d1 Z d1 Z n d2 Z d2 Z d2 Z e e d0 Z Gd3 d   d e  Z Gd4 d   d e  Z Gd5 d   d e  Z  Gd6 d   d e   Z! Gd7 d	   d	 e e"  Z# Gd8 d   d e   Z$ Gd9 d   d e  e"  Z% Gd: d
   d
 e  Z& Gd; d   d e   Z' Gd< d   d e  Z( Gd= d   d e  Z) Gd> d   d e& e(  Z* Gd? d   d e& e( e)  Z+ Gd@ d   d e e,  Z- e e# e& e* e( e+ e  e) e- g	 Z. e! e  e$ e  e% e  e' e  i Z/ e e e e e e e e f Z0 y d' d( l1 Z1 Wn4 e k
 r_GdA dB   dB e2  Z3 e3   Z1 [3 Yn Xy e1 j4 WnK e5 k
 re6 e1 j7   dC  re1 j7   `8 dD d   Z9 dE d   Z: YnF Xe1 j4   Z4 e6 e4 dC  re4 `8 e4 dF d  Z: e4 dG d  Z9 [1 [4 d( dH d  Z; GdI d    d  e2  Z< dJ dK dL  Z= e j> j? e<  GdM dN   dN e2  Z@ GdO d   d e2  ZA GdP dQ   dQ e2  ZB d' dR dS  ZC eD jE ZF dT dU   ZG dV dW   ZH dX dY   ZI dZ d[   ZJ d\ d] d^  ZK d_ d`   ZL da db   ZM Gdc dd   dd e2  ZN eN   jO ZP d\ de df  ZQ dg dh   ZR di dj   ZS dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz d{ d| i	 d} d~  ZT dJ dJ d d  ZU dJ d d  ZV eA d d d e d e# e* e  g d g  d d d d d d0 d d'  ZW eA d d d e d e# e* e  e e+ g d g   ZX eA d d d e d g  d g   ZY d' d( lZ ZZ eZ j[ d eZ j\ eZ j] B j^ Z_ eZ j[ d  j^ Z` eZ j[ d  j^ Za eZ j[ d eZ j\ eZ jb B Zc [Z y d' d( ld Ze Wn e k
 rYn Xd( d d  Zf d d   Zg d d   Zh d0 d d  Zi d d   Zj d d   Zk e< d  Zl e< d  Zm e< d  Zn e< d'  Zo e< d0  Zp e< d0  Zq el em f Zr e	 js jt Zu e	 js jv Zw e	 js jx Zy ez dz eu d. eu  Z{ [	 d( S)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_THREADSZdecimalz1.70z2.4.1    N)
namedtuplezsign digits exponentc              G   s   |  S)N )argsr'   r'   //opt/alt/python35/lib64/python3.5/_pydecimal.py<lambda>   s    r*   T   ?      l   NZoi@Tc               @   s   e  Z d  Z d d   Z d S)r   c             G   s   d  S)Nr'   )selfcontextr(   r'   r'   r)   handle   s    zDecimalException.handleN)__name__
__module____qualname__r0   r'   r'   r'   r)   r      s   c               @   s   e  Z d  Z d S)r   N)r1   r2   r3   r'   r'   r'   r)   r      s   
c               @   s   e  Z d  Z d d   Z d S)r	   c             G   s:   | r6 t  | d j | d j d d  } | j |  St S)Nr%   nT)_dec_from_triple_sign_int_fix_nan_NaN)r.   r/   r(   ansr'   r'   r)   r0      s    #zInvalidOperation.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r	      s   c               @   s   e  Z d  Z d d   Z d S)r   c             G   s   t  S)N)r9   )r.   r/   r(   r'   r'   r)   r0     s    zConversionSyntax.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r      s   c               @   s   e  Z d  Z d d   Z d S)r
   c             G   s   t  | S)N)_SignedInfinity)r.   r/   signr(   r'   r'   r)   r0     s    zDivisionByZero.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r
     s   c               @   s   e  Z d  Z d d   Z d S)r   c             G   s   t  S)N)r9   )r.   r/   r(   r'   r'   r)   r0     s    zDivisionImpossible.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r     s   c               @   s   e  Z d  Z d d   Z d S)r   c             G   s   t  S)N)r9   )r.   r/   r(   r'   r'   r)   r0   )  s    zDivisionUndefined.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r   !  s   c               @   s   e  Z d  Z d S)r   N)r1   r2   r3   r'   r'   r'   r)   r   ,  s   
c               @   s   e  Z d  Z d d   Z d S)r   c             G   s   t  S)N)r9   )r.   r/   r(   r'   r'   r)   r0   C  s    zInvalidContext.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r   8  s   c               @   s   e  Z d  Z d S)r   N)r1   r2   r3   r'   r'   r'   r)   r   F  s   
c               @   s   e  Z d  Z d S)r   N)r1   r2   r3   r'   r'   r'   r)   r   R  s   	c               @   s   e  Z d  Z d d   Z d S)r   c             G   s   | j  t t t t f k r# t | S| d k rk | j  t k rF t | St | d | j | j	 | j d  S| d k r | j  t
 k r t | St | d | j | j	 | j d  Sd  S)Nr%   9r-   )roundingr   r   r   r   r;   r   r5   precEmaxr   )r.   r/   r<   r(   r'   r'   r)   r0   s  s    zOverflow.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r   ]  s   c               @   s   e  Z d  Z d S)r   N)r1   r2   r3   r'   r'   r'   r)   r     s   c               @   s   e  Z d  Z d S)r   N)r1   r2   r3   r'   r'   r'   r)   r     s   c               @   s   e  Z d  Z e d d  Z d S)MockThreadingc             C   s   | j  t S)N)modules	__xname__)r.   sysr'   r'   r)   local  s    zMockThreading.localN)r1   r2   r3   rD   rE   r'   r'   r'   r)   rA     s   rA   __decimal_context__c             C   s>   |  t  t t f k r+ |  j   }  |  j   |  t j   _ d  S)N)r   r   r   copyclear_flags	threadingcurrent_threadrF   )r/   r'   r'   r)   r     s    
c              C   sF   y t  j   j SWn. t k
 rA t   }  |  t  j   _ |  SYn Xd  S)N)rI   rJ   rF   AttributeErrorr   )r/   r'   r'   r)   r     s    	c             C   s:   y |  j  SWn( t k
 r5 t   } | |  _  | SYn Xd  S)N)rF   rK   r   )_localr/   r'   r'   r)   r     s    		c             C   s8   |  t  t t f k r+ |  j   }  |  j   |  | _ d  S)N)r   r   r   rG   rH   rF   )r/   rL   r'   r'   r)   r     s    
c             C   s   |  d  k r t    }  t |   S)N)r   _ContextManager)ctxr'   r'   r)   r     s    $ 	c               @   s  e  Z d  Z d Z d d d d  Z e d	 d
    Z d d   Z d d   Z d d d d  Z	 d d   Z
 d d   Z d d   Z d d d  Z d d d  Z d d d  Z d d d  Z d d d   Z d d! d"  Z d# d$   Z d% d&   Z d' d(   Z d) d d* d+  Z d d, d-  Z d d. d/  Z d d0 d1  Z d2 d d3 d4  Z d d5 d6  Z e Z d d7 d8  Z d d9 d:  Z d d; d<  Z e Z  d d= d>  Z! d? d@   Z" d dA dB  Z# d dC dD  Z$ d dE dF  Z% d dG dH  Z& d dI dJ  Z' d dK dL  Z( d dM dN  Z) d dO dP  Z* dQ dR   Z+ dS dT   Z, e, Z- dU dV   Z. e/ e.  Z. dW dX   Z0 e/ e0  Z0 dY dZ   Z1 d[ d\   Z2 d] d^   Z3 d_ d`   Z4 da db   Z5 dc dd   Z6 de df   Z7 dg dh   Z8 di dj   Z9 dk dl   Z: dm dn   Z; do dp   Z< e= dq e5 dr e6 ds e7 dt e8 du e9 dv e: dw e; dx e<  Z> d dy dz  Z? d{ d|   Z@ d} d~   ZA d d d  ZB d d d  ZC d d   ZD d d d d  ZE d d d  ZF d d d  ZG d d d d  ZH d d d  ZI d d   ZJ d d   ZK d d d d  ZL d d d d  ZM eM ZN d d d  ZO d d d  ZP d d d  ZQ d d   ZR d d   ZS d d   ZT d d   ZU d d d  ZV d d d  ZW d d d  ZX d d   ZY d d   ZZ d d d  Z[ d d d  Z\ d d   Z] d d   Z^ d d   Z_ d d   Z` d d d  Za d d   Zb d d   Zc d d   Zd d d d  Ze d d   Zf d d   Zg d d d  Zh d d   Zi d d d  Zj d d d  Zk d d   Zl d d   Zm d d d  Zn d d d  Zo d d d  Zp d d d  Zq d d d  Zr d d d  Zs d d d  Zt d d d  Zu d d d  Zv d d d  Zw d d   Zx d d d  Zy d d d  Zz d d d  Z{ d d   Z| d d   Z} d d   Z~ d d d d  Z d S)r   _expr7   r6   _is_special0Nc             C   s  t  j |   } t | t  rt | j    } | d  k re | d  k rQ t   } | j t d |  S| j	 d  d k r d | _
 n	 d | _
 | j	 d  } | d  k	 r| j	 d  p d } t | j	 d	  p d
  } t t | |   | _ | t |  | _ d | _ n | j	 d  } | d  k	 rxt t | p<d
   j d
  | _ | j	 d  rld | _ qd | _ n d
 | _ d | _ d | _ | St | t  r| d k rd | _
 n	 d | _
 d | _ t t |   | _ d | _ | St | t  r5| j | _ | j
 | _
 | j | _ | j | _ | St | t  r| j | _
 t | j  | _ t | j  | _ d | _ | St | t t f  r:t |  d k rt d   t | d t  o| d d k st d   | d | _
 | d d k r"d
 | _ | d | _ d | _ ng  }	 xk | d D]_ }
 t |
 t  rd |
 k o_d k n r|	 sv|
 d k r|	 j |
  q3t d   q3W| d d k rd j t t |	   | _ | d | _ d | _ n\ t | d t  r*d j t t |	 pd g   | _ | d | _ d | _ n t d   | St | t  r| d  k r^t   } | j t d  t j |  } | j | _ | j
 | _
 | j | _ | j | _ | St d |   d  S)NzInvalid literal for Decimal: %rr<   -r-   r%   intZfrac exprQ   FdiagsignalNr4   FT   ztInvalid tuple size in creation of Decimal from list or tuple.  The list or tuple should have exactly three elements.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.r+   	   zTThe second value in the tuple must be composed of integers in the range 0 through 9.zUThe third value in the tuple must be an integer, or one of the strings 'F', 'n', 'N'.z;strict semantics for mixing floats and Decimals are enabledzCannot convert %r to Decimal)r%   r-   )r4   rX   ) object__new__
isinstancestr_parserstripr   _raise_errorr   groupr6   rS   r7   lenrO   rP   lstripabsr   _WorkRepr<   rU   listtuple
ValueErrorappendjoinmapfloatr   
from_float	TypeError)clsvaluer/   r.   mintpartfracpartrU   rV   digitsZdigitr'   r'   r)   r]   4  s    			$							#	+$		zDecimal.__new__c             C   s   t  | t  r |  |  St  | t  s4 t d   t j |  sR t j |  rb |  t |   St j d |  d k r d } n d } t	 |  j
   \ } } | j   d } t | t | d |  |  } |  t k r | S|  |  Sd  S)Nzargument must be int or float.g      ?r%   r-      )r^   rS   rn   rp   _mathisinfisnanreprcopysignrf   as_integer_ratio
bit_lengthr5   r_   r   )rq   fr<   r4   dkresultr'   r'   r)   ro     s    
	!zDecimal.from_floatc             C   s6   |  j  r2 |  j } | d k r" d S| d k r2 d Sd S)Nr4   r-   rX   r+   r%   )rP   rO   )r.   rU   r'   r'   r)   _isnan  s    		zDecimal._isnanc             C   s$   |  j  d k r  |  j r d Sd Sd S)NrY   r-   r%   )rO   r6   )r.   r'   r'   r)   _isinfinity  s
    	zDecimal._isinfinityc             C   s   |  j    } | d  k r! d } n | j    } | s9 | r | d  k rN t   } | d k rm | j t d |   S| d k r | j t d |  S| r |  j |  S| j |  Sd S)NFr+   sNaNr%   )r   r   rb   r	   r8   )r.   otherr/   self_is_nanother_is_nanr'   r'   r)   _check_nans  s"    
		zDecimal._check_nansc             C   s   | d  k r t    } |  j s' | j r |  j   rF | j t d |   S| j   re | j t d |  S|  j   r | j t d |   S| j   r | j t d |  Sd S)Nzcomparison involving sNaNzcomparison involving NaNr%   )r   rP   is_snanrb   r	   is_qnan)r.   r   r/   r'   r'   r)   _compare_check_nans.  s(    					zDecimal._compare_check_nansc             C   s   |  j  p |  j d k S)NrQ   )rP   r7   )r.   r'   r'   r)   __bool__O  s    zDecimal.__bool__c             C   s^  |  j  s | j  rN |  j   } | j   } | | k r: d S| | k  rJ d Sd S|  sj | s^ d Sd | j S| s{ d |  j S| j |  j k  r d S|  j | j k  r d S|  j   } | j   } | | k r7|  j d |  j | j } | j d | j |  j } | | k rd S| | k  r)d |  j Sd	 |  j Sn# | | k rNd
 |  j Sd |  j Sd  S)Nr%   r-   rQ   r   r   r   r   r   r   r   r   )rP   r   r6   adjustedr7   rO   )r.   r   Zself_infZ	other_infself_adjustedZother_adjustedself_paddedZother_paddedr'   r'   r)   _cmpV  s>    zDecimal._cmpc             C   sT   t  |  | d d \ }  } | t k r+ | S|  j | |  rA d S|  j |  d k S)Nequality_opTFr%   )_convert_for_comparisonNotImplementedr   r   )r.   r   r/   r'   r'   r)   __eq__  s    zDecimal.__eq__c             C   sT   t  |  |  \ }  } | t k r% | S|  j | |  } | rA d S|  j |  d k  S)NFr%   )r   r   r   r   )r.   r   r/   r:   r'   r'   r)   __lt__  s    zDecimal.__lt__c             C   sT   t  |  |  \ }  } | t k r% | S|  j | |  } | rA d S|  j |  d k S)NFr%   )r   r   r   r   )r.   r   r/   r:   r'   r'   r)   __le__  s    zDecimal.__le__c             C   sT   t  |  |  \ }  } | t k r% | S|  j | |  } | rA d S|  j |  d k S)NFr%   )r   r   r   r   )r.   r   r/   r:   r'   r'   r)   __gt__  s    zDecimal.__gt__c             C   sT   t  |  |  \ }  } | t k r% | S|  j | |  } | rA d S|  j |  d k S)NFr%   )r   r   r   r   )r.   r   r/   r:   r'   r'   r)   __ge__  s    zDecimal.__ge__c             C   sY   t  | d d } |  j s* | rF | j rF |  j | |  } | rF | St |  j |   S)NraiseitT)_convert_otherrP   r   r   r   )r.   r   r/   r:   r'   r'   r)   compare  s    zDecimal.comparec             C   s   |  j  rF |  j   r$ t d   n" |  j   r4 t S|  j rB t St S|  j d k rm t d |  j t	  } n t t
 |  j t	  } t |  j  | t	 } |  d k r | n | } | d k r d S| S)Nz"Cannot hash a signaling NaN value.r%   
   r-   r+   r   )rP   r   rp   is_nan_PyHASH_NANr6   _PyHASH_INFrO   pow_PyHASH_MODULUS_PyHASH_10INVrS   r7   )r.   Zexp_hashZhash_r:   r'   r'   r)   __hash__  s    		zDecimal.__hash__c             C   s(   t  |  j t t t |  j   |  j  S)N)r   r6   ri   rm   rS   r7   rO   )r.   r'   r'   r)   as_tuple  s    zDecimal.as_tuplec             C   s   d t  |   S)NzDecimal('%s'))r_   )r.   r'   r'   r)   __repr__  s    zDecimal.__repr__Fc       	      C   s  d d g |  j  } |  j r` |  j d k r3 | d S|  j d k rQ | d |  j S| d |  j S|  j t |  j  } |  j d k r | d k r | } nE | s d
 } n6 |  j d k r | d
 d d
 } n | d
 d d
 } | d k r
d } d d | |  j } nf | t |  j  k rF|  j d | t |  j  } d } n* |  j d  |  } d |  j | d   } | | k rd } n4 | d  k rt   } d d g | j d | | } | | | | S)NrT   rR   rY   ZInfinityr4   NaNr   r%      r-   rQ   rZ   .eEz%+di)r6   rP   rO   r7   rd   r   capitals)	r.   engr/   r<   
leftdigitsdotplacert   ru   rU   r'   r'   r)   __str__  s:    						zDecimal.__str__c             C   s   |  j  d d d |  S)Nr   Tr/   )r   )r.   r/   r'   r'   r)   to_eng_string.  s    zDecimal.to_eng_stringc             C   sx   |  j  r% |  j d |  } | r% | S| d  k r: t   } |  r_ | j t k r_ |  j   } n |  j   } | j |  S)Nr/   )rP   r   r   r>   r   copy_abscopy_negate_fix)r.   r/   r:   r'   r'   r)   __neg__7  s    		zDecimal.__neg__c             C   sx   |  j  r% |  j d |  } | r% | S| d  k r: t   } |  r_ | j t k r_ |  j   } n t |   } | j |  S)Nr/   )rP   r   r   r>   r   r   r   r   )r.   r/   r:   r'   r'   r)   __pos__M  s    		zDecimal.__pos__Tc             C   si   | s |  j    S|  j r5 |  j d |  } | r5 | S|  j rS |  j d |  } n |  j d |  } | S)Nr/   )r   rP   r   r6   r   r   )r.   roundr/   r:   r'   r'   r)   __abs__b  s    
		zDecimal.__abs__c       
      C   sb  t  |  } | t k r | S| d  k r1 t   } |  j sC | j r |  j | |  } | r_ | S|  j   r |  j | j k r | j   r | j t d  St	 |   S| j   r t	 |  St
 |  j | j  } d } | j t k r |  j | j k r d } |  rO| rOt
 |  j | j  } | r*d } t | d |  } | j |  } | S|  st | | j | j d  } | j | | j  } | j |  } | S| st | |  j | j d  } |  j | | j  } | j |  } | St |   } t |  } t | | | j  \ } } t   }	 | j | j k r| j | j k rjt | d |  } | j |  } | S| j | j k  r| | } } | j d k rd |	 _ | j | j | _ | _ qd |	 _ n6 | j d k rd |	 _ d \ | _ | _ n	 d |	 _ | j d k r$| j | j |	 _ n | j | j |	 _ | j |	 _ t	 |	  } | j |  } | S)Nz
-INF + INFr%   r-   rQ   )r%   r%   )r   r   r   rP   r   r   r6   rb   r	   r   minrO   r>   r   r5   r   maxr?   _rescalerg   
_normalizer<   rS   rU   )
r.   r   r/   r:   rU   Znegativezeror<   op1op2r   r'   r'   r)   __add__x  s|    	

!				zDecimal.__add__c             C   sf   t  |  } | t k r | S|  j s. | j rM |  j | d | } | rM | S|  j | j   d | S)Nr/   )r   r   rP   r   r   r   )r.   r   r/   r:   r'   r'   r)   __sub__  s    zDecimal.__sub__c             C   s/   t  |  } | t k r | S| j |  d | S)Nr/   )r   r   r   )r.   r   r/   r'   r'   r)   __rsub__  s    zDecimal.__rsub__c             C   s  t  |  } | t k r | S| d  k r1 t   } |  j | j A} |  j sS | j r |  j | |  } | ro | S|  j   r | s | j t d  St	 | S| j   r |  s | j t d  St	 | S|  j
 | j
 } |  s | rt | d |  } | j |  } | S|  j d k r=t | | j |  } | j |  } | S| j d k rtt | |  j |  } | j |  } | St |   } t |  } t | t | j | j  |  } | j |  } | S)Nz(+-)INF * 0z0 * (+-)INFrQ   1)r   r   r   r6   rP   r   r   rb   r	   r;   rO   r5   r   r7   rg   r_   rS   )r.   r   r/   Z
resultsignr:   Z	resultexpr   r   r'   r'   r)   __mul__  sH    	"zDecimal.__mul__c             C   sc  t  |  } | t k r t S| d  k r1 t   } |  j | j A} |  j sS | j r |  j | |  } | ro | S|  j   r | j   r | j t d  S|  j   r t	 | S| j   r | j t
 d  t | d | j    S| s|  s | j t d  S| j t d |  S|  s+|  j | j } d } nt | j  t |  j  | j d } |  j | j | } t |   } t |  }	 | d k rt | j d | |	 j  \ } }
 n$ t | j |	 j d |  \ } }
 |
 r| d	 d k r>| d 7} nG |  j | j } x4 | | k  r=| d d k r=| d } | d 7} q
Wt | t |  |  } | j |  S)
Nz(+-)INF/(+-)INFzDivision by infinityrQ   z0 / 0zx / 0r%   r-   r   rw   )r   r   r   r6   rP   r   r   rb   r	   r;   r   r5   Etinyr   r
   rO   rd   r7   r?   rg   divmodrS   r_   r   )r.   r   r/   r<   r:   rU   coeffshiftr   r   	remainder	ideal_expr'   r'   r)   __truediv__  sP    		'&$
zDecimal.__truediv__c             C   s  |  j  | j  A} | j   r( |  j } n t |  j | j  } |  j   | j   } |  sr | j   sr | d k r t | d d  |  j | | j  f S| | j k rlt	 |   } t	 |  } | j
 | j
 k r | j d | j
 | j
 9_ n | j d | j
 | j
 9_ t | j | j  \ } }	 | d | j k  rlt | t |  d  t |  j  t |	  |  f S| j t d  }
 |
 |
 f S)Nr+   rQ   r%   r   z%quotient too large in //, % or divmodr   )r6   r   rO   r   r   r5   r   r>   r?   rg   rU   rS   r   r_   rb   r   )r.   r   r/   r<   r   expdiffr   r   qrr:   r'   r'   r)   _divideZ  s*     		zDecimal._dividec             C   s/   t  |  } | t k r | S| j |  d | S)Nr/   )r   r   r   )r.   r   r/   r'   r'   r)   __rtruediv__{  s    zDecimal.__rtruediv__c             C   s/  t  |  } | t k r | S| d  k r1 t   } |  j | |  } | rS | | f S|  j | j A} |  j   r | j   r | j t d  } | | f St | | j t d  f S| s |  s | j t	 d  } | | f S| j t
 d |  | j t d  f S|  j | |  \ } } | j |  } | | f S)Nzdivmod(INF, INF)zINF % xzdivmod(0, 0)zx // 0zx % 0)r   r   r   r   r6   r   rb   r	   r;   r   r
   r   r   )r.   r   r/   r:   r<   Zquotientr   r'   r'   r)   
__divmod__  s0    	


zDecimal.__divmod__c             C   s/   t  |  } | t k r | S| j |  d | S)Nr/   )r   r   r   )r.   r   r/   r'   r'   r)   __rdivmod__  s    zDecimal.__rdivmod__c             C   s   t  |  } | t k r | S| d  k r1 t   } |  j | |  } | rM | S|  j   ri | j t d  S| s |  r | j t d  S| j t d  S|  j | |  d } | j	 |  } | S)NzINF % xzx % 0z0 % 0r-   )
r   r   r   r   r   rb   r	   r   r   r   )r.   r   r/   r:   r   r'   r'   r)   __mod__  s"    	zDecimal.__mod__c             C   s/   t  |  } | t k r | S| j |  d | S)Nr/   )r   r   r   )r.   r   r/   r'   r'   r)   __rmod__  s    zDecimal.__rmod__c             C   sp  | d  k r t    } t | d d } |  j | |  } | rC | S|  j   r_ | j t d  S| s |  r{ | j t d  S| j t d  S| j   r t |   } | j |  St	 |  j
 | j
  } |  s t |  j d |  } | j |  S|  j   | j   } | | j d k r#| j t  S| d k rQ|  j | | j  } | j |  St |   } t |  } | j | j k r| j d	 | j | j 9_ n | j d	 | j | j 9_ t | j | j  \ } }	 d |	 | d @| j k r|	 | j 8}	 | d 7} | d	 | j k r%| j t  S|  j }
 |	 d
 k  rKd |
 }
 |	 }	 t |
 t |	  |  } | j |  S)Nr   Tzremainder_near(infinity, x)zremainder_near(x, 0)zremainder_near(0, 0)rQ   r-   r+   r   r%   r   )r   r   r   r   rb   r	   r   r   r   r   rO   r5   r6   r   r?   r   r   r>   rg   rU   rS   r   r_   )r.   r   r/   r:   ideal_exponentr   r   r   r   r   r<   r'   r'   r)   remainder_near  sZ    				 
	
zDecimal.remainder_nearc             C   s   t  |  } | t k r | S| d  k r1 t   } |  j | |  } | rM | S|  j   r | j   ru | j t d  St |  j | j AS| s |  r | j t	 d |  j | j A S| j t
 d  S|  j | |  d S)Nz
INF // INFzx // 0z0 // 0r%   )r   r   r   r   r   rb   r	   r;   r6   r
   r   r   )r.   r   r/   r:   r'   r'   r)   __floordiv__  s$    	zDecimal.__floordiv__c             C   s/   t  |  } | t k r | S| j |  d | S)Nr/   )r   r   r   )r.   r   r/   r'   r'   r)   __rfloordiv__6  s    zDecimal.__rfloordiv__c             C   sR   |  j    r< |  j   r$ t d   |  j r3 d n d } n t |   } t |  S)Nz%Cannot convert signaling NaN to floatz-nannan)r   r   rj   r6   r_   rn   )r.   sr'   r'   r)   	__float__=  s    zDecimal.__float__c             C   s   |  j  r< |  j   r$ t d   n |  j   r< t d   d |  j } |  j d k rt | t |  j  d |  j S| t |  j d  |  j  p d  Sd  S)NzCannot convert NaN to integerz"Cannot convert infinity to integerr-   r%   r   rQ   r   )	rP   r   rj   r   OverflowErrorr6   rO   rS   r7   )r.   r   r'   r'   r)   __int__G  s    	zDecimal.__int__c             C   s   |  S)Nr'   )r.   r'   r'   r)   realV  s    zDecimal.realc             C   s
   t  d  S)Nr%   )r   )r.   r'   r'   r)   imagZ  s    zDecimal.imagc             C   s   |  S)Nr'   )r.   r'   r'   r)   	conjugate^  s    zDecimal.conjugatec             C   s   t  t |    S)N)complexrn   )r.   r'   r'   r)   __complex__a  s    zDecimal.__complex__c             C   sq   |  j  } | j | j } t |  | k rg | t |  | d   j d  } t |  j | |  j d  St |   S)NrQ   T)	r7   r?   clamprd   re   r5   r6   rO   r   )r.   r/   ZpayloadZmax_payload_lenr'   r'   r)   r8   d  s    	#zDecimal._fix_nanc             C   s  |  j  r, |  j   r" |  j |  St |   S| j   } | j   } |  s | j | g | j } t t	 |  j
 |  |  } | |  j
 k r | j t  t |  j d |  St |   St |  j  |  j
 | j } | | k r| j t d |  j  } | j t  | j t  | S| | k  } | r+| } |  j
 | k  rt |  j  |  j
 | }	 |	 d k  rt |  j d | d  }  d }	 |  j | j }
 |
 |  |	  } |  j d  |	  pd } | d k rt t |  d  } t |  | j k r| d  d  } | d 7} | | k r/| j t d |  j  } n t |  j | |  } | r]| r]| j t  | rp| j t  | r| j t  | j t  | s| j t  | S| r| j t  | j d k r|  j
 | k r| j t  |  j d |  j
 | } t |  j | |  St |   S)NrQ   z
above Emaxr%   r   r-   r   )rP   r   r8   r   r   Etopr@   r   r   r   rO   rb   r   r5   r6   rd   r7   r?   r   r   r   _pick_rounding_functionr>   r_   rS   r   r   )r.   r/   r   r   exp_maxZnew_expZexp_minr:   Zself_is_subnormalrv   Zrounding_methodchangedr   r   r'   r'   r)   r   p  sn    
	


zDecimal._fixc             C   s   t  |  j |  r d Sd Sd  S)Nr%   r-   r   )
_all_zerosr7   )r.   r?   r'   r'   r)   _round_down  s    zDecimal._round_downc             C   s   |  j  |  S)N)r   )r.   r?   r'   r'   r)   	_round_up  s    zDecimal._round_upc             C   s5   |  j  | d k r d St |  j  |  r- d Sd Sd  S)NZ56789r-   r%   r   )r7   r   )r.   r?   r'   r'   r)   _round_half_up  s
    zDecimal._round_half_upc             C   s'   t  |  j |  r d S|  j |  Sd  S)Nr-   r   )_exact_halfr7   r   )r.   r?   r'   r'   r)   _round_half_down  s    zDecimal._round_half_downc             C   sJ   t  |  j |  r9 | d k s5 |  j | d d k r9 d S|  j |  Sd  S)Nr%   r-   02468r   )r   r7   r   )r.   r?   r'   r'   r)   _round_half_even  s    #zDecimal._round_half_evenc             C   s(   |  j  r |  j |  S|  j |  Sd  S)N)r6   r   )r.   r?   r'   r'   r)   _round_ceiling  s    	zDecimal._round_ceilingc             C   s(   |  j  s |  j |  S|  j |  Sd  S)N)r6   r   )r.   r?   r'   r'   r)   _round_floor   s    	zDecimal._round_floorc             C   s<   | r* |  j  | d d k r* |  j |  S|  j |  Sd  S)Nr-   Z05)r7   r   )r.   r?   r'   r'   r)   _round_05up  s    zDecimal._round_05upr   r   r   r   r   r   r   r   c             C   s   | d  k	 rG t  | t  s' t d   t d d |  } |  j |  S|  j rw |  j   rk t d   n t d   t |  j	 d t
   S)Nz+Second argument to round should be integralr%   r   zcannot round a NaNzcannot round an infinity)r^   rS   rp   r5   quantizerP   r   rj   r   r   r   )r.   r4   rU   r'   r'   r)   	__round__  s    /	zDecimal.__round__c             C   sF   |  j  r0 |  j   r$ t d   n t d   t |  j d t   S)Nzcannot round a NaNzcannot round an infinityr%   )rP   r   rj   r   rS   r   r   )r.   r'   r'   r)   	__floor__W  s
    	zDecimal.__floor__c             C   sF   |  j  r0 |  j   r$ t d   n t d   t |  j d t   S)Nzcannot round a NaNzcannot round an infinityr%   )rP   r   rj   r   rS   r   r   )r.   r'   r'   r)   __ceil__f  s
    	zDecimal.__ceil__c             C   s  t  | d d } t  | d d } |  j s6 | j r7| d  k rK t   } |  j d k rm | j t d |   S| j d k r | j t d |  S|  j d k r |  } qy| j d k r | } qy|  j d k r | s | j t d  St |  j | j A} qy| j d k ry|  s | j t d  St |  j | j A} nB t |  j | j At	 t
 |  j  t
 | j   |  j | j  } | j | |  S)	Nr   TrX   r   r4   rY   zINF * 0 in fmaz0 * INF in fma)r   rP   r   rO   rb   r	   r;   r6   r5   r_   rS   r7   r   )r.   r   Zthirdr/   productr'   r'   r)   fmau  s6    					zDecimal.fmac             C   s  t  |  } | t k r | St  |  } | t k r8 | S| d  k rM t   } |  j   } | j   } | j   } | s | s | r| d k r | j t d |   S| d k r | j t d |  S| d k r | j t d |  S| r |  j |  S| r| j |  S| j |  S|  j   o4| j   o4| j   sG| j t d  S| d k  rc| j t d  S| sy| j t d  S| j   | j	 k r| j t d  S| r|  r| j t d  S| j
   rd } n	 |  j } t t |   } t |  j    } t | j    }	 | j | t d	 | j |  | } x) t |	 j  D] }
 t | d	 |  } qDWt | |	 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   rb   r	   r8   
_isintegerr   r?   _isevenr6   rf   rS   rg   to_integral_valuer   rU   ranger5   r_   )r.   r   modulor/   r   r   Zmodulo_is_nanr<   baseexponentir'   r'   r)   _power_modulo  sl    								$zDecimal._power_moduloc             C   s9  t  |   } | j | j } } x( | d d k rI | d } | d 7} q" Wt  |  } | j | j } } x( | d d k r | d } | d 7} ql W| d k rs| | 9} x( | d d k r | d } | d 7} q W| d k  r d  S| d | }	 | j d k r	|	 }	 | j   rQ| j d k rQ|  j t |  }
 t |	 |
 | d  } n d } t d d d | |	 |  S| j d k rv| d } | d k rF| | @| k rd  St	 |  d } | d
 d } | t
 t |   k rd  St | | |  } t | | |  } | d  k s%| d  k r)d  S| | k r9d  Sd | } n | d k r=t	 |  d d } t d | |  \ } } | rd  Sx( | d d k r| d } | d 8} qW| d d } | t
 t |   k rd  St | | |  } t | | |  } | d  k s| d  k r d  S| | k r0d  Sd | } n d  S| d | k rUd  S| | } t d t |  |  S| d k r| d | d } } n| d k rt
 t t | |    | k rd  St	 |  } | d k rt
 t t |  |   | k rd  S| d | } } x< | d | d k o@d k n r\| d } | d } q!Wx< | d | d k od k n r| d } | d } q`W| d k rk| d k r| | k rd  St | |  \ } } | d k rd  Sd t	 |  | >} xG t | | | d  \ } } | | k r/Pq| | d | | } qW| | k o^| d k sed  S| } | d k r| | d t |  k rd  S| | } | | 9} | d | k rd  St |  } | j   r| j d k r|  j t |  }
 t | |
 | t
 |   } n d } t d | d | | |  S)Nr   r%   r-   r   rQ   r+      r      ]   A   rw      rZ   d   )r+   r  r   r  )rg   rS   rU   r<   r   r6   rO   r   r5   _nbitsrd   r_   _decimal_lshift_exactr   rf   	_log10_lb)r.   r   pxxcxeyycyer   r   ZzerosZ
last_digitr   Zemaxr   rs   r4   Zxc_bitsremar   r   Zstr_xcr'   r'   r)   _power_exact  s    :





//'
'
&

 zDecimal._power_exactc             C   s  | d  k	 r |  j  | | |  St |  } | t k r; | S| d  k rP t   } |  j | |  } | rl | S| s |  s | j t d  St Sd } |  j d k r | j	   r | j
   s d } n |  r | j t d  S|  j   }  |  s| j d k r	t | d d  St | S|  j   rD| j d k r4t | St | d d  S|  t k r| j	   r| j d k rtd } n' | | j k r| j } n t |  } |  j | } | d | j k  rd | j } | j t  n' | j t  | j t  d | j } t | d d | |  S|  j   } | j   rc| j d k | d k  k r[t | d d  St | Sd  } d }	 |  j   | j   }
 | d k | j d k k r|
 t t | j   k rt | d | j d  } n; | j   } |
 t t |   k rt | d | d  } | d  k rm|  j | | j d  } | d  k	 rm| d k rgt d | j | j  } d }	 | d  k rN| j } t |   } | j | j } } t |  } | j | j } } | j d k r| } d	 } xW t | | | | | |  \ } } | d
 d t t |   | d r(P| d	 7} qWt | t |  |  } |	 r| j	   rt | j  | j k r| j d t | j  } t | j | j d | | j |  } | j    } | j!   x t" D] } d | j# | <qW| j$ |  } | j t  | j% t& r$| j t'  | j% t( rG| j t( d | j  xI t' t& t t t) f D]  } | j% | r]| j |  q]Wn | j$ |  } | S)Nz0 ** 0r%   r-   z+x ** y with x negative and y not an integerrQ   r   FTrZ   rw   r   z
above Emax)*r  r   r   r   r   rb   r	   _Oner6   r   r   r   r5   r;   r   r?   rS   rO   r   r   r   _log10_exp_boundrd   r_   r@   r   r  r7   rg   rU   r<   _dpowerrG   rH   _signalstrapsr   flagsr   r   r   r   )r.   r   r   r/   r:   Zresult_signZ
multiplierrU   Zself_adjexactZboundr   r  r  r  r  r  r  r  extrar   r   Z
newcontext	exceptionr'   r'   r)   __pow__  s    					"&
zDecimal.__pow__c             C   s/   t  |  } | t k r | S| j |  d | S)Nr/   )r   r   r  )r.   r   r/   r'   r'   r)   __rpow__	  s    zDecimal.__rpow__c             C   s  | d  k r t    } |  j r: |  j d |  } | r: | S|  j |  } | j   rY | S| sr t | j d d  S| j | j   g | j	 } t
 | j  } | j } x; | j | d d k r | | k  r | d 7} | d 8} q Wt | j | j d  |  |  S)Nr/   rQ   r%   r-   )r   rP   r   r   r   r5   r6   r@   r   r   rd   r7   rO   )r.   r/   r:   dupr   endrU   r'   r'   r)   	normalize	  s$    			&
zDecimal.normalizec             C   sA  t  | d d } | d  k r' t   } | d  k r< | j } |  j sN | j r |  j | |  } | rj | S| j   s |  j   r | j   r |  j   r t |   S| j t d  S| j	   | j
 k o | j k n s | j t d  S|  st |  j d | j
  } | j |  S|  j   } | | j k rB| j t d  S| | j
 d | j k rl| j t d  S|  j | j
 |  } | j   | j k r| j t d  St | j  | j k r| j t d  S| r| j   | j k  r| j t  | j
 |  j
 k r.| |  k r!| j t  | j t  | j |  } | S)	Nr   Tzquantize with one INFz)target exponent out of bounds in quantizerQ   z9exponent of quantize result too large for current contextr-   z7quantize result has too many digits for current context)r   r   r>   rP   r   r   r   rb   r	   r   rO   r@   r5   r6   r   r   r?   r   rd   r7   Eminr   r   r   )r.   rU   r>   r/   r:   r   r'   r'   r)   r   	  sT    		
	(					zDecimal.quantizec             C   sb   t  | d d } |  j s$ | j rR |  j   r< | j   pQ |  j   oQ | j   S|  j | j k S)Nr   T)r   rP   r   is_infiniterO   )r.   r   r/   r'   r'   r)   same_quantum
  s
    	zDecimal.same_quantumc             C   s  |  j  r t |   S|  s, t |  j d |  S|  j | k r` t |  j |  j d |  j | |  St |  j  |  j | } | d k  r t |  j d | d  }  d } |  j | } | |  |  } |  j d  |  p d } | d k r t t	 |  d  } t |  j | |  S)NrQ   r%   r   r-   )
rP   r   r5   r6   rO   r7   rd   r   r_   rS   )r.   rU   r>   rv   Zthis_functionr   r   r'   r'   r)   r   '
  s"    	
	zDecimal._rescalec             C   s   | d k r t  d   |  j s( |  r2 t |   S|  j |  j   d | |  } | j   |  j   k r | j | j   d | |  } | S)Nr%   z'argument should be at least 1 in _roundr-   )rj   rP   r   r   r   )r.   placesr>   r:   r'   r'   r)   _roundI
  s    

  zDecimal._roundc             C   s   |  j  r/ |  j d |  } | r% | St |   S|  j d k rH t |   S|  sa t |  j d d  S| d  k rv t   } | d  k r | j } |  j d |  } | |  k r | j	 t
  | j	 t  | S)Nr/   r%   rQ   )rP   r   r   rO   r5   r6   r   r>   r   rb   r   r   )r.   r>   r/   r:   r'   r'   r)   to_integral_exact`
  s$    
	

		zDecimal.to_integral_exactc             C   s   | d  k r t    } | d  k r* | j } |  j rY |  j d |  } | rO | St |   S|  j d k rr t |   S|  j d |  Sd  S)Nr/   r%   )r   r>   rP   r   r   rO   r   )r.   r>   r/   r:   r'   r'   r)   r   }
  s    			

zDecimal.to_integral_valuec             C   sv  | d  k r t    } |  j r_ |  j d |  } | r: | S|  j   r_ |  j d k r_ t |   S|  s t |  j d |  j d  } | j |  S|  j d k r | j	 t
 d  S| j d } t |   } | j d ?} | j d @r| j d } t |  j  d ?d } n  | j } t |  j  d d ?} | | } | d k rT| d | 9} d	 }	 n! t | d |  \ } }
 |
 }	 | | 8} d | } x, | | } | | k rPq| | d ?} qW|	 o| | | k }	 |	 r| d k r| d | } n | d | 9} | | 7} n | d
 d k r'| d 7} t d t |  |  } | j   } | j t  } | j |  } | | _ | S)Nr/   r%   rQ   r+   r-   zsqrt(-x), x > 0r   r  Trw   )r   rP   r   r   r6   r   r5   rO   r   rb   r	   r?   rg   rU   rS   rd   r7   r   r_   _shallow_copy_set_roundingr   r>   )r.   r/   r:   r?   opr   clr   r  r   r4   r   r>   r'   r'   r)   sqrt
  s`    		
	
	



	zDecimal.sqrtc             C   s	  t  | d d } | d  k r' t   } |  j s9 | j r |  j   } | j   } | s] | r | d k r | d k r |  j |  S| d k r | d k r | j |  S|  j | |  S|  j |  } | d k r |  j |  } | d k r | } n |  } | j |  S)Nr   Tr-   r%   r   )r   r   rP   r   r   r   r   compare_total)r.   r   r/   snonr-  r:   r'   r'   r)   r   
  s&    			zDecimal.maxc             C   s	  t  | d d } | d  k r' t   } |  j s9 | j r |  j   } | j   } | s] | r | d k r | d k r |  j |  S| d k r | d k r | j |  S|  j | |  S|  j |  } | d k r |  j |  } | d k r |  } n | } | j |  S)Nr   Tr-   r%   r   )r   r   rP   r   r   r   r   r0  )r.   r   r/   r1  r2  r-  r:   r'   r'   r)   r     s&    		zDecimal.minc             C   sJ   |  j  r d S|  j d k r  d S|  j |  j d   } | d t |  k S)NFr%   TrQ   )rP   rO   r7   rd   )r.   restr'   r'   r)   r   ?  s    	zDecimal._isintegerc             C   s2   |  s |  j  d k r d S|  j d |  j  d k S)Nr%   Tr-   r   r   )rO   r7   )r.   r'   r'   r)   r   H  s    zDecimal._isevenc             C   s9   y |  j  t |  j  d SWn t k
 r4 d SYn Xd  S)Nr-   r%   )rO   rd   r7   rp   )r.   r'   r'   r)   r   N  s    zDecimal.adjustedc             C   s   |  S)Nr'   )r.   r'   r'   r)   	canonicalV  s    zDecimal.canonicalc             C   sA   t  | d d } |  j | |  } | r. | S|  j | d | S)Nr   Tr/   )r   r   r   )r.   r   r/   r:   r'   r'   r)   compare_signal^  s
    zDecimal.compare_signalc             C   s  t  | d d } |  j r) | j r) t S|  j r@ | j r@ t S|  j } |  j   } | j   } | sm | rj| | k r t |  j  |  j f } t | j  | j f } | | k  r | r t St S| | k r | r t St St S| r*| d k r t S| d k rt S| d k rt S| d k rjt Sn@ | d k r:t S| d k rJt S| d k rZt S| d k rjt S|  | k  rzt S|  | k rt S|  j | j k  r| rt St S|  j | j k r| rt St St S)Nr   Tr-   r+   )	r   r6   _NegativeOner  r   rd   r7   _ZerorO   )r.   r   r/   r<   Zself_nanZ	other_nanZself_keyZ	other_keyr'   r'   r)   r0  j  sf    	zDecimal.compare_totalc             C   s7   t  | d d } |  j   } | j   } | j |  S)Nr   T)r   r   r0  )r.   r   r/   r   or'   r'   r)   compare_total_mag  s    zDecimal.compare_total_magc             C   s   t  d |  j |  j |  j  S)Nr%   )r5   r7   rO   rP   )r.   r'   r'   r)   r     s    zDecimal.copy_absc             C   sE   |  j  r% t d |  j |  j |  j  St d |  j |  j |  j  Sd  S)Nr%   r-   )r6   r5   r7   rO   rP   )r.   r'   r'   r)   r     s    	zDecimal.copy_negatec             C   s1   t  | d d } t | j |  j |  j |  j  S)Nr   T)r   r5   r6   r7   rO   rP   )r.   r   r/   r'   r'   r)   	copy_sign  s    zDecimal.copy_signc             C   s  | d  k r t    } |  j d |  } | r1 | S|  j   d
 k rG t S|  sQ t S|  j   d k rm t |   S| j } |  j   } |  j d k r | t	 t
 | j d d   k r t d d | j d  } n|  j d k r%| t	 t
 | j   d d   k r%t d d | j   d  } n+|  j d k rg| | k  rgt d d d | d d |  } n |  j d k r| | d k  rt d d | d | d  } n t |   } | j | j } } | j d k r| } d } xQ t | | | |  \ }	 }
 |	 d d	 t	 t
 |	   | d r*P| d 7} qWt d t
 |	  |
  } | j   } | j t  } | j |  } | | _ | S)Nr/   r-   r%   rZ   r   rQ   r=   rw   r   r   )r   r   r   r7  r  r   r?   r   r6   rd   r_   r@   r5   r   rg   rS   rU   r<   _dexpr*  r+  r   r   r>   )r.   r/   r:   r  adjr,  r-  r   r  r   rU   r>   r'   r'   r)   rU     sJ    	
	26& "&	zDecimal.expc             C   s   d S)NTr'   )r.   r'   r'   r)   is_canonical  s    zDecimal.is_canonicalc             C   s   |  j  S)N)rP   )r.   r'   r'   r)   	is_finite"  s    zDecimal.is_finitec             C   s   |  j  d k S)NrY   )rO   )r.   r'   r'   r)   r%  *  s    zDecimal.is_infinitec             C   s   |  j  d k S)Nr4   rX   )r4   rX   )rO   )r.   r'   r'   r)   r   .  s    zDecimal.is_nanc             C   s<   |  j  s |  r d S| d  k r) t   } | j |  j   k S)NF)rP   r   r$  r   )r.   r/   r'   r'   r)   	is_normal2  s
    	zDecimal.is_normalc             C   s   |  j  d k S)Nr4   )rO   )r.   r'   r'   r)   r   :  s    zDecimal.is_qnanc             C   s   |  j  d k S)Nr-   )r6   )r.   r'   r'   r)   	is_signed>  s    zDecimal.is_signedc             C   s   |  j  d k S)NrX   )rO   )r.   r'   r'   r)   r   B  s    zDecimal.is_snanc             C   s<   |  j  s |  r d S| d  k r) t   } |  j   | j k  S)NF)rP   r   r   r$  )r.   r/   r'   r'   r)   is_subnormalF  s
    	zDecimal.is_subnormalc             C   s   |  j  o |  j d k S)NrQ   )rP   r7   )r.   r'   r'   r)   is_zeroN  s    zDecimal.is_zeroc             C   s   |  j  t |  j  d } | d k rB t t | d d   d S| d k rn t t d | d d   d St |   } | j | j } } | d k r t | d |  } t |  } t |  t |  | | k  S| t t d | |   d S)Nr-      r   r+   r%   r   r   )rO   rd   r7   r_   rg   rS   rU   )r.   r<  r,  r-  r   numdenr'   r'   r)   _ln_exp_boundR  s     zDecimal._ln_exp_boundc       
      C   sn  | d  k r t    } |  j d |  } | r1 | S|  s; t S|  j   d k rQ t S|  t k ra t S|  j d k r | j t	 d  St
 |   } | j | j } } | j } | |  j   d } xM t | | |  } | d d t t t |    | d r P| d 7} q Wt t | d k   t t |   |  } | j   } | j t  }	 | j |  } |	 | _ | S)	Nr/   r-   zln of a negative valuer+   rw   r   rZ   r%   )r   r   _NegativeInfinityr   	_Infinityr  r7  r6   rb   r	   rg   rS   rU   r?   rF  _dlogrd   r_   rf   r5   r*  r+  r   r   r>   )
r.   r/   r:   r,  r-  r   r  r'  r   r>   r'   r'   r)   lnk  s:    			,+	z
Decimal.lnc             C   s  |  j  t |  j  d } | d k r: t t |   d S| d k r^ t t d |   d St |   } | j | j } } | d k r t | d |  } t d |  } t |  t |  | | k  d St d | |  } t |  | | d k  d S)	Nr-   r+   r%   r      Z231r   r   )rO   rd   r7   r_   rg   rS   rU   )r.   r<  r,  r-  r   rD  rE  r'   r'   r)   r    s    "zDecimal._log10_exp_boundc       
      C   s  | d  k r t    } |  j d |  } | r1 | S|  s; t S|  j   d k rQ t S|  j d k rp | j t d  S|  j d d k r |  j d d   d t	 |  j  d k r t
 |  j t	 |  j  d  } n t |   } | j | j } } | j } | |  j   d } xM t | | |  } | d d	 t	 t t |    | d rNP| d
 7} qWt t | d k   t t |   |  } | j   } | j t  }	 | j |  } |	 | _ | S)Nr/   r-   zlog10 of a negative valuer%   r   rQ   r+   rw   r   rZ   )r   r   rG  r   rH  r6   rb   r	   r7   rd   r   rO   rg   rS   rU   r?   r  _dlog10r_   rf   r5   r*  r+  r   r   r>   )
r.   r/   r:   r,  r-  r   r  r'  r   r>   r'   r'   r)   log10  s:    		=#	,+	zDecimal.log10c             C   sy   |  j  d |  } | r | S| d  k r1 t   } |  j   rA t S|  sZ | j t d d  St |  j    } | j |  S)Nr/   zlogb(0)r-   )	r   r   r   rH  rb   r
   r   r   r   )r.   r/   r:   r'   r'   r)   logb  s    		zDecimal.logbc             C   sJ   |  j  d k s |  j d k r" d Sx! |  j D] } | d k r, d Sq, Wd S)Nr%   FZ01T)r6   rO   r7   )r.   digr'   r'   r)   
_islogical  s    zDecimal._islogicalc             C   s   | j  t |  } | d k r0 d | | } n  | d k  rP | | j  d   } | j  t |  } | d k r d | | } n  | d k  r | | j  d   } | | f S)Nr%   rQ   )r?   rd   )r.   r/   opaopbZdifr'   r'   r)   _fill_logical  s    zDecimal._fill_logicalc             C   s   | d  k r t    } t | d d } |  j   sA | j   rN | j t  S|  j | |  j | j  \ } } d j d d   t | |  D  } t	 d | j
 d  p d d  S)Nr   TrT   c             S   s2   g  |  ]( \ } } t  t |  t |  @  q Sr'   )r_   rS   ).0r  br'   r'   r)   
<listcomp>5  s   	 z'Decimal.logical_and.<locals>.<listcomp>r%   rQ   )r   r   rP  rb   r	   rS  r7   rl   zipr5   re   )r.   r   r/   rQ  rR  r   r'   r'   r)   logical_and'  s    	!%zDecimal.logical_andc             C   s8   | d  k r t    } |  j t d d | j d  |  S)Nr%   r   )r   logical_xorr5   r?   )r.   r/   r'   r'   r)   logical_invert8  s    	zDecimal.logical_invertc             C   s   | d  k r t    } t | d d } |  j   sA | j   rN | j t  S|  j | |  j | j  \ } } d j d d   t | |  D  } t	 d | j
 d  p d d  S)Nr   TrT   c             S   s2   g  |  ]( \ } } t  t |  t |  B  q Sr'   )r_   rS   )rT  r  rU  r'   r'   r)   rV  M  s   	 z&Decimal.logical_or.<locals>.<listcomp>r%   rQ   )r   r   rP  rb   r	   rS  r7   rl   rW  r5   re   )r.   r   r/   rQ  rR  r   r'   r'   r)   
logical_or?  s    	!%zDecimal.logical_orc             C   s   | d  k r t    } t | d d } |  j   sA | j   rN | j t  S|  j | |  j | j  \ } } d j d d   t | |  D  } t	 d | j
 d  p d d  S)Nr   TrT   c             S   s2   g  |  ]( \ } } t  t |  t |  A  q Sr'   )r_   rS   )rT  r  rU  r'   r'   r)   rV  ^  s   	 z'Decimal.logical_xor.<locals>.<listcomp>r%   rQ   )r   r   rP  rb   r	   rS  r7   rl   rW  r5   re   )r.   r   r/   rQ  rR  r   r'   r'   r)   rY  P  s    	!%zDecimal.logical_xorc             C   s  t  | d d } | d  k r' t   } |  j s9 | j r |  j   } | j   } | s] | r | d k r | d k r |  j |  S| d k r | d k r | j |  S|  j | |  S|  j   j | j    } | d k r |  j |  } | d k r| } n |  } | j |  S)Nr   Tr-   r%   r   )	r   r   rP   r   r   r   r   r   r0  )r.   r   r/   r1  r2  r-  r:   r'   r'   r)   max_maga  s&    		zDecimal.max_magc             C   s  t  | d d } | d  k r' t   } |  j s9 | j r |  j   } | j   } | s] | r | d k r | d k r |  j |  S| d k r | d k r | j |  S|  j | |  S|  j   j | j    } | d k r |  j |  } | d k r|  } n | } | j |  S)Nr   Tr-   r%   r   )	r   r   rP   r   r   r   r   r   r0  )r.   r   r/   r1  r2  r-  r:   r'   r'   r)   min_mag  s&    		zDecimal.min_magc             C   s   | d  k r t    } |  j d |  } | r1 | S|  j   d k rG t S|  j   d k rv t d d | j | j    S| j   } | j t	  | j
   |  j |  } | |  k r | S|  j t d d | j   d  |  S)Nr/   r-   r%   r=   r   r   )r   r   r   rG  r5   r?   r   rG   r+  r   _ignore_all_flagsr   r   r   )r.   r/   r:   new_selfr'   r'   r)   
next_minus  s"    	
zDecimal.next_minusc             C   s   | d  k r t    } |  j d |  } | r1 | S|  j   d k rG t S|  j   d k rv t d d | j | j    S| j   } | j t	  | j
   |  j |  } | |  k r | S|  j t d d | j   d  |  S)Nr/   r-   r=   r%   r   r   )r   r   r   rH  r5   r?   r   rG   r+  r   r^  r   r   r   )r.   r/   r:   r_  r'   r'   r)   	next_plus  s"    	
zDecimal.next_plusc             C   s7  t  | d d } | d  k r' t   } |  j | |  } | rC | S|  j |  } | d k rk |  j |  S| d k r |  j |  } n |  j |  } | j   r | j t	 d | j
  | j t  | j t  n\ | j   | j k  r3| j t  | j t  | j t  | j t  | s3| j t  | S)Nr   Tr%   r-   z Infinite result from next_towardr   )r   r   r   r   r:  ra  r`  r   rb   r   r6   r   r   r   r$  r   r   r   )r.   r   r/   r:   Z
comparisonr'   r'   r)   next_toward  s4    			
zDecimal.next_towardc             C   s   |  j    r d S|  j   r  d S|  j   } | d k r< d S| d k rL d S|  j   ri |  j re d Sd S| d  k r~ t   } |  j d |  r |  j r d	 Sd
 S|  j r d Sd Sd  S)Nr   r   r-   z	+Infinityz	-Infinityz-Zeroz+Zeror/   z
-Subnormalz
+Subnormalz-Normalz+Normalr   )r   r   r   rB  r6   r   rA  )r.   r/   infr'   r'   r)   number_class  s,    				zDecimal.number_classc             C   s
   t  d  S)Nr   )r   )r.   r'   r'   r)   radix#  s    zDecimal.radixc             C   sP  | d  k r t    } t | d d } |  j | |  } | rC | S| j d k r_ | j t  S| j t |  k o | j k n s | j t  S|  j   r t	 |   St |  } |  j
 } | j t |  } | d k r d | | } n | d k  r| | d   } | | d   | d  |  } t |  j | j d  pFd |  j  S)Nr   Tr%   rQ   )r   r   r   rO   rb   r	   r?   rS   r   r   r7   rd   r5   r6   re   )r.   r   r/   r:   torotrotdigtopadZrotatedr'   r'   r)   rotate'  s,    	)
		zDecimal.rotatec             C   s  | d  k r t    } t | d d } |  j | |  } | rC | S| j d k r_ | j t  Sd | j | j } d | j | j } | t |  k o | k n s | j t  S|  j	   r t
 |   St |  j |  j |  j t |   } | j |  } | S)Nr   Tr%   r+   r   )r   r   r   rO   rb   r	   r@   r?   rS   r   r   r5   r6   r7   r   )r.   r   r/   r:   ZliminfZlimsupr   r'   r'   r)   scalebH  s"    	"
%zDecimal.scalebc             C   ss  | d  k r t    } t | d d } |  j | |  } | rC | S| j d k r_ | j t  S| j t |  k o | j k n s | j t  S|  j   r t	 |   St |  } |  j
 } | j t |  } | d k r d | | } n | d k  r| | d   } | d k  r,| d  |  } n" | d | } | | j d   } t |  j | j d  pid |  j  S)Nr   Tr%   rQ   )r   r   r   rO   rb   r	   r?   rS   r   r   r7   rd   r5   r6   re   )r.   r   r/   r:   rf  rg  rh  Zshiftedr'   r'   r)   r   a  s2    	)
		zDecimal.shiftc             C   s   |  j  t |   f f S)N)	__class__r_   )r.   r'   r'   r)   
__reduce__  s    zDecimal.__reduce__c             C   s)   t  |   t k r |  S|  j t |    S)N)typer   rk  r_   )r.   r'   r'   r)   __copy__  s    zDecimal.__copy__c             C   s)   t  |   t k r |  S|  j t |    S)N)rm  r   rk  r_   )r.   memor'   r'   r)   __deepcopy__  s    zDecimal.__deepcopy__c             C   s  | d  k r t    } t | d | } |  j r~ t |  j |  } t |  j    } | d d k rn | d 7} t | | |  S| d d  k r d d g | j | d <| d d k r t	 |  j |  j
 |  j d  }  | j } | d } | d  k	 ry| d d k r|  j | d	 |  }  n] | d d
 k rB|  j | |  }  n7 | d d k ryt |  j
  | k ry|  j | |  }  |  r|  j d k r| d d
 k r|  j d |  }  |  j t |  j
  }	 | d d k r |  r| d  k	 rd	 | }
 qSd	 }
 nS | d d
 k r|	 }
 n: | d d k rS|  j d k rM|	 d k rM|	 }
 n d	 }
 |
 d k  rzd } d |
 |  j
 } nh |
 t |  j
  k r|  j
 d |
 t |  j
  } d } n, |  j
 d  |
  pd } |  j
 |
 d   } |	 |
 } t |  j | | | |  S)N_localeconvrm  %gGr+   	precisioneEr-   zfF%ZgGr%   r   rQ   rT   i)r   _parse_format_specifierrP   _format_signr6   r_   r   _format_alignr   r5   r7   rO   r>   r(  r   rd   _format_number)r.   Z	specifierr/   rq  specr<   bodyr>   ru  r   r   rt   ru   rU   r'   r'   r)   
__format__  sZ    		
	
%&				
zDecimal.__format__)rO   r7   r6   rP   )r1   r2   r3   	__slots__r]   classmethodro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __radd__r   r   r   __rmul__r   r   r   r   r   r   r   r   r   r   r   r   	__trunc__r   propertyr   r   r   r8   r   r   r   r   r   r   r   r   r   dictr   r   r   r   r   r  r  r  r   r#  r   r&  r   r(  r)  r   to_integralr/  r   r   r   r   r   r4  r5  r0  r9  r   r   r:  rU   r=  r>  r%  r   r?  r   r@  r   rA  rB  rF  rJ  r  rM  rN  rP  rS  rX  rZ  r[  rY  r\  r]  r`  ra  rb  rd  re  ri  rj  r   rl  rn  rp  r}  r'   r'   r'   r)   r   +  s  ( !@				4	V7;!$K
f		>,U="c*"	IK23.*!'Fc             C   s7   t  j t  } |  | _ | | _ | | _ | | _ | S)N)r\   r]   r   r6   r7   rO   rP   )r<   Zcoefficientr   Zspecialr.   r'   r'   r)   r5     s    				r5   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)rM   c             C   s   | j    |  _ d  S)N)rG   new_context)r.   r  r'   r'   r)   __init__  s    z_ContextManager.__init__c             C   s    t    |  _ t |  j  |  j S)N)r   saved_contextr   r  )r.   r'   r'   r)   	__enter__	  s    z_ContextManager.__enter__c             C   s   t  |  j  d  S)N)r   r  )r.   tvtbr'   r'   r)   __exit__  s    z_ContextManager.__exit__N)r1   r2   r3   r  r  r  r'   r'   r'   r)   rM     s   rM   c               @   s  e  Z d  Z d d d d d d d d d 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 d   Z d d   Z d d   Z e Z d d d  Z d d   Z d d   Z d d   Z d Z d  d!   Z d" d#   Z d$ d%   Z d& d' d(  Z d) d*   Z d+ d,   Z d- d.   Z d/ d0   Z d1 d2   Z d3 d4   Z d5 d6   Z d7 d8   Z d9 d:   Z  d; d<   Z! d= d>   Z" d? d@   Z# dA dB   Z$ dC dD   Z% dE dF   Z& dG dH   Z' dI dJ   Z( dK dL   Z) dM dN   Z* dO dP   Z+ dQ dR   Z, dS dT   Z- dU dV   Z. dW dX   Z/ dY dZ   Z0 d[ d\   Z1 d] d^   Z2 d_ d`   Z3 da db   Z4 dc dd   Z5 de df   Z6 dg dh   Z7 di dj   Z8 dk dl   Z9 dm dn   Z: do dp   Z; dq dr   Z< ds dt   Z= du dv   Z> dw dx   Z? dy dz   Z@ d{ d|   ZA d} d~   ZB d d   ZC d d   ZD d d   ZE d d   ZF d d d  ZG d d   ZH d d   ZI d d   ZJ d d   ZK d d   ZL d d   ZM d d   ZN d d   ZO d d   ZP d d   ZQ d d   ZR d d   ZS d d   ZT d d   ZU eU ZV d S)r   Nc
                s  y
 t  }
 Wn t k
 r Yn X| d  k	 r1 | n |
 j |  _ | d  k	 rO | n |
 j |  _ | d  k	 rm | n |
 j |  _ | d  k	 r | n |
 j |  _ | d  k	 r | n |
 j |  _ | d  k	 r | n |
 j |  _ |	 d  k r g  |  _ n	 |	 |  _  d  k r|
 j	 j
   |  _	 nA t  t  sMt  f d d   t  D  |  _	 n	  |  _	   d  k rzt j t d  |  _ nA t   t  st   f d d   t   D  |  _ n	   |  _ d  S)Nc             3   s'   |  ] } | t  |   k  f Vq d  S)N)rS   )rT  r   )r  r'   r)   	<genexpr><  s    z#Context.__init__.<locals>.<genexpr>r%   c             3   s'   |  ] } | t  |   k  f Vq d  S)N)rS   )rT  r   )r  r'   r)   r  C  s    )r   	NameErrorr?   r>   r$  r@   r   r   _ignored_flagsr  rG   r^   r  r  fromkeysr  )r.   r?   r>   r$  r@   r   r   r  r  r  Zdcr'   )r  r  r)   r  #  s.    
	)	)zContext.__init__c             C   s   t  | t  s t d |   | d k rV | | k r t d | | | | f   nk | d k r | | k  r t d | | | | f   n4 | | k  s | | k r t d | | | | f   t j |  | |  S)Nz%s must be an integerz-infz%s must be in [%s, %d]. got: %src  z%s must be in [%d, %s]. got: %sz%s must be in [%d, %d]. got %s)r^   rS   rp   rj   r\   __setattr__)r.   namerr   ZvminZvmaxr'   r'   r)   _set_integer_checkG  s    zContext._set_integer_checkc             C   s   t  | t  s t d |   x* | D]" } | t k r& t d |   q& Wx* t D]" } | | k rS t d |   qS Wt j |  | |  S)Nz%s must be a signal dictz%s is not a valid signal dict)r^   r  rp   r  KeyErrorr\   r  )r.   r  r   keyr'   r'   r)   _set_signal_dictU  s    zContext._set_signal_dictc             C   s@  | d k r" |  j  | | d d  S| d k rD |  j  | | d d  S| d k rf |  j  | | d d  S| d k r |  j  | | d d  S| d	 k r |  j  | | d d  S| d
 k r | t k r t d |   t j |  | |  S| d k s | d k r|  j | |  S| d k r,t j |  | |  St d |   d  S)Nr?   r-   rc  r$  z-infr%   r@   r   r   r>   z%s: invalid rounding moder  r  r  z.'decimal.Context' object has no attribute '%s')r  _rounding_modesrp   r\   r  r  rK   )r.   r  rr   r'   r'   r)   r  `  s(    zContext.__setattr__c             C   s   t  d |   d  S)Nz%s cannot be deleted)rK   )r.   r  r'   r'   r)   __delattr__y  s    zContext.__delattr__c          	   C   so   d d   |  j  j   D } d d   |  j j   D } |  j |  j |  j |  j |  j |  j |  j	 | | f f S)Nc             S   s"   g  |  ] \ } } | r |  q Sr'   r'   )rT  sigr  r'   r'   r)   rV  ~  s   	 z&Context.__reduce__.<locals>.<listcomp>c             S   s"   g  |  ] \ } } | r |  q Sr'   r'   )rT  r  r  r'   r'   r)   rV    s   	 )
r  itemsr  rk  r?   r>   r$  r@   r   r   )r.   r  r  r'   r'   r)   rl  }  s
    zContext.__reduce__c             C   s   g  } | j  d t |    d d   |  j j   D } | j  d d j |  d  d d   |  j j   D } | j  d d j |  d  d j |  d	 S)
NzrContext(prec=%(prec)d, rounding=%(rounding)s, Emin=%(Emin)d, Emax=%(Emax)d, capitals=%(capitals)d, clamp=%(clamp)dc             S   s%   g  |  ] \ } } | r | j   q Sr'   )r1   )rT  r   r  r'   r'   r)   rV    s   	 z$Context.__repr__.<locals>.<listcomp>zflags=[z, ]c             S   s%   g  |  ] \ } } | r | j   q Sr'   )r1   )rT  r  r  r'   r'   r)   rV    s   	 ztraps=[))rk   varsr  r  rl   r  )r.   r   namesr'   r'   r)   r     s    	zContext.__repr__c             C   s%   x |  j  D] } d |  j  | <q
 Wd  S)Nr%   )r  )r.   flagr'   r'   r)   rH     s    zContext.clear_flagsc             C   s%   x |  j  D] } d |  j  | <q
 Wd  S)Nr%   )r  )r.   r  r'   r'   r)   clear_traps  s    zContext.clear_trapsc          
   C   sC   t  |  j |  j |  j |  j |  j |  j |  j |  j |  j	 	 } | S)N)
r   r?   r>   r$  r@   r   r   r  r  r  )r.   ncr'   r'   r)   r*    s    zContext._shallow_copyc          
   C   sO   t  |  j |  j |  j |  j |  j |  j |  j j   |  j	 j   |  j
 	 } | S)N)r   r?   r>   r$  r@   r   r   r  rG   r  r  )r.   r  r'   r'   r)   rG     s
    zContext.copyc             G   sq   t  j | |  } | |  j k r4 |   j |  |  Sd |  j | <|  j | sa |   j |  |  S| |   d  S)Nr-   )_condition_mapgetr  r0   r  r  )r.   Z	conditionZexplanationr(   errorr'   r'   r)   rb     s    zContext._raise_errorc             C   s   |  j  t   S)N)_ignore_flagsr  )r.   r'   r'   r)   r^    s    zContext._ignore_all_flagsc             G   s    |  j  t |  |  _  t |  S)N)r  rh   )r.   r  r'   r'   r)   r    s    zContext._ignore_flagsc             G   sN   | r) t  | d t t f  r) | d } x | D] } |  j j |  q0 Wd  S)Nr%   )r^   ri   rh   r  remove)r.   r  r  r'   r'   r)   _regard_flags  s    
zContext._regard_flagsc             C   s   t  |  j |  j d  S)Nr-   )rS   r$  r?   )r.   r'   r'   r)   r     s    zContext.Etinyc             C   s   t  |  j |  j d  S)Nr-   )rS   r@   r?   )r.   r'   r'   r)   r     s    zContext.Etopc             C   s   |  j  } | |  _  | S)N)r>   )r.   rm  r>   r'   r'   r)   r+    s    		zContext._set_roundingrQ   c             C   s   t  | t  r1 | | j   k r1 |  j t d  St | d |  } | j   r~ t | j  |  j	 |  j
 k r~ |  j t d  S| j |   S)Nz/no trailing or leading whitespace is permitted.r/   zdiagnostic info too long in NaN)r^   r_   ra   rb   r   r   r   rd   r7   r?   r   r   )r.   rD  r   r'   r'   r)   create_decimal  s    !	+	zContext.create_decimalc             C   s   t  j |  } | j |   S)N)r   ro   r   )r.   r   r   r'   r'   r)   create_decimal_from_float  s    z!Context.create_decimal_from_floatc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   r   )r.   r  r'   r'   r)   rf     s    zContext.absc             C   sN   t  | d d } | j | d |  } | t k rF t d |   n | Sd  S)Nr   Tr/   zUnable to convert %s to Decimal)r   r   r   rp   )r.   r  rU  r   r'   r'   r)   add)  s
    zContext.addc             C   s   t  | j |    S)N)r_   r   )r.   r  r'   r'   r)   _apply>  s    zContext._applyc             C   s%   t  | t  s t d   | j   S)Nz,canonical requires a Decimal as an argument.)r^   r   rp   r4  )r.   r  r'   r'   r)   r4  A  s    	zContext.canonicalc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   r   )r.   r  rU  r'   r'   r)   r   N  s    !zContext.comparec             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   r5  )r.   r  rU  r'   r'   r)   r5  r  s     zContext.compare_signalc             C   s   t  | d d } | j |  S)Nr   T)r   r0  )r.   r  rU  r'   r'   r)   r0    s    zContext.compare_totalc             C   s   t  | d d } | j |  S)Nr   T)r   r9  )r.   r  rU  r'   r'   r)   r9    s    zContext.compare_total_magc             C   s   t  | d d } | j   S)Nr   T)r   r   )r.   r  r'   r'   r)   r     s    
zContext.copy_absc             C   s   t  | d d } t |  S)Nr   T)r   r   )r.   r  r'   r'   r)   copy_decimal  s    
zContext.copy_decimalc             C   s   t  | d d } | j   S)Nr   T)r   r   )r.   r  r'   r'   r)   r     s    
zContext.copy_negatec             C   s   t  | d d } | j |  S)Nr   T)r   r:  )r.   r  rU  r'   r'   r)   r:    s    zContext.copy_signc             C   sN   t  | d d } | j | d |  } | t k rF t d |   n | Sd  S)Nr   Tr/   zUnable to convert %s to Decimal)r   r   r   rp   )r.   r  rU  r   r'   r'   r)   divide  s
    zContext.dividec             C   sN   t  | d d } | j | d |  } | t k rF t d |   n | Sd  S)Nr   Tr/   zUnable to convert %s to Decimal)r   r   r   rp   )r.   r  rU  r   r'   r'   r)   
divide_int  s
    zContext.divide_intc             C   sN   t  | d d } | j | d |  } | t k rF t d |   n | Sd  S)Nr   Tr/   zUnable to convert %s to Decimal)r   r   r   rp   )r.   r  rU  r   r'   r'   r)   r   5  s
    zContext.divmodc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   rU   )r.   r  r'   r'   r)   rU   J  s    zContext.expc             C   s(   t  | d d } | j | | d |  S)Nr   Tr/   )r   r   )r.   r  rU  r-  r'   r'   r)   r   b  s    zContext.fmac             C   s%   t  | t  s t d   | j   S)Nz/is_canonical requires a Decimal as an argument.)r^   r   rp   r=  )r.   r  r'   r'   r)   r=  y  s    	zContext.is_canonicalc             C   s   t  | d d } | j   S)Nr   T)r   r>  )r.   r  r'   r'   r)   r>    s    zContext.is_finitec             C   s   t  | d d } | j   S)Nr   T)r   r%  )r.   r  r'   r'   r)   r%    s    zContext.is_infinitec             C   s   t  | d d } | j   S)Nr   T)r   r   )r.   r  r'   r'   r)   r     s    zContext.is_nanc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   r?  )r.   r  r'   r'   r)   r?    s    zContext.is_normalc             C   s   t  | d d } | j   S)Nr   T)r   r   )r.   r  r'   r'   r)   r     s    zContext.is_qnanc             C   s   t  | d d } | j   S)Nr   T)r   r@  )r.   r  r'   r'   r)   r@    s    zContext.is_signedc             C   s   t  | d d } | j   S)Nr   T)r   r   )r.   r  r'   r'   r)   r     s    zContext.is_snanc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   rA  )r.   r  r'   r'   r)   rA    s    zContext.is_subnormalc             C   s   t  | d d } | j   S)Nr   T)r   rB  )r.   r  r'   r'   r)   rB    s    zContext.is_zeroc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   rJ  )r.   r  r'   r'   r)   rJ  )  s    z
Context.lnc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   rM  )r.   r  r'   r'   r)   rM  ?  s    zContext.log10c             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   rN  )r.   r  r'   r'   r)   rN  [  s    zContext.logbc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   rX  )r.   r  rU  r'   r'   r)   rX  u  s    zContext.logical_andc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   rZ  )r.   r  r'   r'   r)   rZ    s    zContext.logical_invertc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   r[  )r.   r  rU  r'   r'   r)   r[    s    zContext.logical_orc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   rY  )r.   r  rU  r'   r'   r)   rY    s    zContext.logical_xorc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   r   )r.   r  rU  r'   r'   r)   r     s    zContext.maxc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   r\  )r.   r  rU  r'   r'   r)   r\    s    zContext.max_magc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   r   )r.   r  rU  r'   r'   r)   r     s    zContext.minc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   r]  )r.   r  rU  r'   r'   r)   r]     s    zContext.min_magc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   r   )r.   r  r'   r'   r)   minus1  s    zContext.minusc             C   sN   t  | d d } | j | d |  } | t k rF t d |   n | Sd  S)Nr   Tr/   zUnable to convert %s to Decimal)r   r   r   rp   )r.   r  rU  r   r'   r'   r)   multiplyB  s
    zContext.multiplyc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   r`  )r.   r  r'   r'   r)   r`  b  s    zContext.next_minusc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   ra  )r.   r  r'   r'   r)   ra  v  s    zContext.next_plusc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   rb  )r.   r  rU  r'   r'   r)   rb    s     zContext.next_towardc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   r#  )r.   r  r'   r'   r)   r#    s    zContext.normalizec             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   rd  )r.   r  r'   r'   r)   rd    s    /zContext.number_classc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   r   )r.   r  r'   r'   r)   plus  s    zContext.plusc             C   sQ   t  | d d } | j | | d |  } | t k rI t d |   n | Sd  S)Nr   Tr/   zUnable to convert %s to Decimal)r   r  r   rp   )r.   r  rU  r   r   r'   r'   r)   power  s
    IzContext.powerc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   r   )r.   r  rU  r'   r'   r)   r   X  s    7zContext.quantizec             C   s
   t  d  S)Nr   )r   )r.   r'   r'   r)   re    s    zContext.radixc             C   sN   t  | d d } | j | d |  } | t k rF t d |   n | Sd  S)Nr   Tr/   zUnable to convert %s to Decimal)r   r   r   rp   )r.   r  rU  r   r'   r'   r)   r     s
    zContext.remainderc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   r   )r.   r  rU  r'   r'   r)   r     s    zContext.remainder_nearc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   ri  )r.   r  rU  r'   r'   r)   ri    s    zContext.rotatec             C   s   t  | d d } | j |  S)Nr   T)r   r&  )r.   r  rU  r'   r'   r)   r&    s    zContext.same_quantumc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   rj  )r.   r  rU  r'   r'   r)   rj    s    zContext.scalebc             C   s%   t  | d d } | j | d |  S)Nr   Tr/   )r   r   )r.   r  rU  r'   r'   r)   r   *  s    zContext.shiftc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   r/  )r.   r  r'   r'   r)   r/  H  s    zContext.sqrtc             C   sN   t  | d d } | j | d |  } | t k rF t d |   n | Sd  S)Nr   Tr/   zUnable to convert %s to Decimal)r   r   r   rp   )r.   r  rU  r   r'   r'   r)   subtracth  s
    zContext.subtractc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   r   )r.   r  r'   r'   r)   r     s    zContext.to_eng_stringc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   r   )r.   r  r'   r'   r)   to_sci_string  s    zContext.to_sci_stringc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   r)  )r.   r  r'   r'   r)   r)    s    zContext.to_integral_exactc             C   s"   t  | d d } | j d |   S)Nr   Tr/   )r   r   )r.   r  r'   r'   r)   r     s    zContext.to_integral_value)Wr1   r2   r3   r  r  r  r  r  rl  r   rH   r  r*  rG   rn  rb   r^  r  r  r   r   r   r+  r  r  rf   r  r  r4  r   r5  r0  r9  r   r  r   r:  r  r  r   rU   r   r=  r>  r%  r   r?  r   r@  r   rA  rB  rJ  rM  rN  rX  rZ  r[  rY  r   r\  r   r]  r  r  r`  ra  rb  r#  rd  r  r  r   re  r   r   ri  r&  rj  r   r/  r  r   r  r)  r   r  r'   r'   r'   r)   r     s   "$#% #2P:&" c               @   s7   e  Z d  Z d	 Z d d d  Z d d   Z e Z d S)
rg   r<   rS   rU   Nc             C   s   | d  k r* d  |  _  d |  _ d  |  _ nc t | t  rf | j |  _  t | j  |  _ | j |  _ n' | d |  _  | d |  _ | d |  _ d  S)Nr%   r-   r+   )r<   rS   rU   r^   r   r6   r7   rO   )r.   rr   r'   r'   r)   r    s    		z_WorkRep.__init__c             C   s   d |  j  |  j |  j f S)Nz(%r, %r, %r))r<   rS   rU   )r.   r'   r'   r)   r     s    z_WorkRep.__repr__)r<   rS   rU   )r1   r2   r3   r~  r  r   r   r'   r'   r'   r)   rg     s   rg   c             C   s   |  j  | j  k  r! | } |  } n |  } | } t t | j   } t t | j   } | j  t d | | d  } | | j  d | k  r d | _ | | _  | j d | j  | j  9_ | j  | _  |  | f S)Nr-   r+   r   r   )rU   rd   r_   rS   r   )r   r   r?   tmpr   Ztmp_lenZ	other_lenrU   r'   r'   r)   r     s    			r   c             C   s{   |  d k r d S| d k r( |  d | St  t |    } t |  t | j d   } | | k  rj d  S|  d | Sd  S)Nr%   r   rQ   )r_   rf   rd   rstrip)r4   r   Zstr_nZval_nr'   r'   r)   r
    s    r
  c             C   s[   |  d k s | d k r$ t  d   d } x* | | k rV | | |  | d ?} } q- W| S)Nr%   z3Both arguments to _sqrt_nearest should be positive.r-   )rj   )r4   r  rU  r'   r'   r)   _sqrt_nearest2  s    r  c             C   s7   d | >|  | ?} } | d |  | d @| d @| k S)Nr-   r+   r'   )r  r   rU  r   r'   r'   r)   _rshift_nearestA  s    r  c             C   s/   t  |  |  \ } } | d | | d @| k S)Nr+   r-   )r   )r  rU  r   r   r'   r'   r)   _div_nearestI  s    r  r  c       	   	   C   s7  |  | } d } x | | k r9 t  |  | | >| k s_ | | k r t  |  | | ?| k r t | | d >| t | | t | |  |   } | d 7} q Wt d t t |   d |  } t | |  } t | |  } x> t | d d d  D]& } t | |  t | | |  } q Wt | | |  S)Nr%   r-   r   rZ   ir   )rf   r  r  r  rS   rd   r_   r   )	r  MLr  RTZyshiftwr   r'   r'   r)   _ilogQ  s    
)&'%$r  c       
      C   s   | d 7} t  t |    } | | | | d k } | d k r d | } | | | } | d k ru |  d | 9}  n t |  d |  }  t |  |  } t |  } t | | |  } | | }	 n d } t | d |  }	 t |	 | d  S)Nr+   r-   r%   r   r  )rd   r_   r  r  _log10_digits)
r-  r   r  r.  r   r  r   log_dZlog_10Zlog_tenpowerr'   r'   r)   rL    s     

rL  c       	      C   s  | d 7} t  t |    } | | | | d k } | d k r | | | } | d k rk |  d | 9}  n t |  d |  }  t |  d |  } n d } | r t  t t |    d } | | d k r t | t | |  d |  } q d } n d } t | | d  S)Nr+   r-   r%   r   r  )rd   r_   r  r  rf   r  )	r-  r   r  r.  r   r   r  r  Z	f_log_tenr'   r'   r)   rI    s"    
$	rI  c               @   s(   e  Z d  Z d d   Z d d   Z d S)_Log10Memoizec             C   s   d |  _  d  S)NZ/23025850929940456840179914546843642076011014886)rv   )r.   r'   r'   r)   r    s    z_Log10Memoize.__init__c             C   s   | d k  r t  d   | t |  j  k r d } x^ d | | d } t t t d | |  d   } | | d   d | k r P| d 7} q6 W| j d  d  d	  |  _ t |  j d  | d   S)
Nr%   zp should be nonnegativerZ   r   r+   r  rQ   r-   r   )rj   rd   rv   r_   r  r  r  rS   )r.   r  r  r  rv   r'   r'   r)   	getdigits  s    	"z_Log10Memoize.getdigitsN)r1   r2   r3   r  r  r'   r'   r'   r)   r    s   r  c       	      C   s   t  |  | >|  } t d t t |   d |  } t |  |  } | | >} x9 t | d d d  D]! } t |  | | | |  } qi WxC t | d d d	  D]+ } | | d >} t | | | |  } q W| | S)
Nr   rZ   r-   r%   r+   ir   r   r   )r	  rS   rd   r_   r  r   )	r  r  r  r  r  r  ZMshiftr  r   r'   r'   r)   _iexp  s    %
r  c       	      C   s   | d 7} t  d | t t |    d  } | | } | | } | d k r^ |  d | } n |  d | } t | t |   \ } } t | d |  } t t | d |  d  | | d f S)Nr+   r%   r-   r   i  rZ   )r   rd   r_   r   r  r  r  )	r-  r   r  r  r   r   ZcshiftZquotr  r'   r'   r)   r;    s    
#

r;  c             C   s*  t  t t |    | } t |  | | | d  } | | } | d k ra | | d | } n t | | d |  } | d k r t  t |    | d k | d k k r d | d d d | }	 }
 q d | d | }	 }
 n: t | | d | d  \ }	 }
 t |	 d  }	 |
 d 7}
 |	 |
 f S)Nr-   r%   r   )rd   r_   rf   rI  r  r;  )r  r  r  r  r  rU  Zlxcr   Zpcr   rU   r'   r'   r)   r  =  s    
( !
r  r   r  2F   35   4(   5   6rC  7   8r   r=   rw   c             C   s>   |  d k r t  d   t |   } d t |  | | d S)Nr%   z0The argument to _log10_lb should be nonnegative.r  )rj   r_   rd   )r-  Z
correctionZstr_cr'   r'   r)   r  g  s    r  c             C   sh   t  |  t  r |  St  |  t  r, t |   S| rN t  |  t  rN t j |   S| rd t d |    t S)NzUnable to convert %s to Decimal)r^   r   rS   rn   ro   rp   r   )r   r   Zallow_floatr'   r'   r)   r   r  s    
r   c             C   s   t  | t  r |  | f St  | t j  ru |  j sb t |  j t t |  j	  | j
  |  j  }  |  t | j  f S| r t  | t j  r | j d k r | j } t  | t  r t   } | r d | j t <n | j t d  |  t j |  f St t f S)Nr%   r-   z;strict semantics for mixing floats and Decimals are enabled)r^   r   _numbersZRationalrP   r5   r6   r_   rS   r7   denominatorrO   	numeratorZComplexr   r   rn   r   r  r   rb   ro   r   )r.   r   r   r/   r'   r'   r)   r     s$    
		'			r   r?   r  r>   r  r  r@   i?B r$  r   r   r[   a          # A numeric string consists of:
#    \s*
    (?P<sign>[-+])?              # an optional sign, followed by either...
    (
        (?=\d|\.\d)              # ...a number (with at least one digit)
        (?P<int>\d*)             # having a (possibly empty) integer part
        (\.(?P<frac>\d*))?       # followed by an optional fractional part
        (E(?P<exp>[-+]?\d+))?    # followed by an optional exponent, or...
    |
        Inf(inity)?              # ...an infinity, or...
    |
        (?P<signal>s)?           # ...an (optionally signaling)
        NaN                      # NaN
        (?P<diag>\d*)            # with (possibly empty) diagnostic info.
    )
#    \s*
    \Z
z0*$z50*$z\A
(?:
   (?P<fill>.)?
   (?P<align>[<>=^])
)?
(?P<sign>[-+ ])?
(?P<alt>\#)?
(?P<zeropad>0)?
(?P<minimumwidth>(?!0)\d+)?
(?P<thousands_sep>,)?
(?:\.(?P<precision>0|(?!0)\d+))?
(?P<type>[eEfFgGn%])?
\Z
c             C   s
  t  j |   } | d  k r+ t d |    | j   } | d } | d } | d d  k	 | d <| d r | d  k	 r t d |    | d  k	 r t d |    | p d | d <| p d | d <| d	 d  k r d
 | d	 <t | d p d  | d <| d d  k	 rt | d  | d <| d d k rS| d d  k sI| d d k rSd | d <| d d k rd | d <| d  k rt j   } | d d  k	 rt d |    | d | d <| d | d <| d | d <n4 | d d  k r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:  >r<   rR   minimumwidthrQ   ru  r%   rm  ZgGnr-   r4   rs  thousands_sepzJExplicit thousands separator conflicts with 'n' type in format specifier: groupingdecimal_pointrT   rZ   r   )_parse_format_specifier_regexmatchrj   	groupdictrS   _locale
localeconv)format_specrq  rs   Zformat_dictr  r  r'   r'   r)   rw    sN    





 




rw  c       	      C   s   | d } | d } | | t  |   t  |  } | d } | d k rY |  | | } n | d k rv | |  | } nn | d k r |  | | } nQ | d k r t  |  d } | d  |  |  | | | d   } n t d	   | S)
Nr  r  r  <r  =^r+   zUnrecognised alignment field)rd   rj   )	r<   r|  r{  r  r  Zpaddingr  r   Zhalfr'   r'   r)   ry  b  s    


)ry  c             C   s   d d l  m } m } |  s  g  S|  d d k rc t |   d k rc | |  d  d  | |  d   S|  d	 t j k r |  d  d
  St d   d  S)Nr%   )chainrepeatr-   r+   z unrecognised format for groupingr   r   r   r   r   )	itertoolsr  r  rd   r  CHAR_MAXrj   )r  r  r  r'   r'   r)   _group_lengths}  s    "!r  c             C   s(  | d } | d } g  } x t  |  D] } | d k rE t d   t t t |   | d  |  } | j d | t |   |  | d    |  d  |  }  | | 8} |  r | d k r P| t |  8} q' Wt t |   | d  } | j d | t |   |  | d    | j t |   S)Nr  r  r%   zgroup length should be positiver-   rQ   )r  rj   r   r   rd   rk   rl   reversed)rv   r{  	min_widthsepr  groupsr.  r'   r'   r)   _insert_thousands_sep  s     

!*
*r  c             C   s*   |  r
 d S| d d k r" | d Sd Sd  S)NrR   r<   z +rT   r'   )is_negativer{  r'   r'   r)   rx    s
    rx  c             C   s   t  |  |  } | s | d r- | d | } | d k sI | d d k r d d d d d d d	 d i | d } | d
 j | |  7} | d d k r | d 7} | d r | d t |  t |  } n d } t | | |  } t | | | |  S)NZaltr  r%   rm  rv  r   r   rt  rs  z{0}{1:+}rr  r  r  )rx  formatrd   r  ry  )r  rt   ru   rU   r{  r<   Zecharr  r'   r'   r)   rz    s    &

!rz  ZInfz-Infr   )|__all__r1   rC   __version__Z__libmpdec_version__mathrx   Znumbersr  rD   collectionsr&   Z_namedtupler   ImportErrorr   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   rp   r   r  r  r  rI   r\   rA   rE   rK   hasattrrJ   rF   r   r   r   r   r5   NumberregisterrM   r   rg   r   rS   r~   r	  r
  r  r  r  r  rL  rI  r  r  r  r  r;  r  r  r   r   r   r   r   recompileVERBOSE
IGNORECASEr  r`   r   r   DOTALLr  localer  rw  ry  r  r  rx  rz  rH  rG  r9   r7  r  r6  r;   	hash_infomodulusr   rc  r   r   r   r   r   r'   r'   r'   r)   <module>u   sT  			

&
	.                  	0",#%$+'	*			P%
)