<!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>
a
    XC?h:}                 
   @   sl  g d Z eZdZdZdZddlZddlZddl	Z	zddl
mZ eddZW n eyd   d	d
 ZY n0 dZdZdZdZdZdZdZdZdZdZe	jdkrdZdZdZndZdZdZeed  ZG dd deZG dd deZ G dd deZ!G d d! d!e!Z"G d"d# d#ee#Z$G d$d% d%e!Z%G d&d' d'e!e#Z&G d(d) d)eZ'G d*d+ d+e!Z(G d,d- d-eZ)G d.d/ d/eZ*G d0d1 d1e'e)Z+G d2d3 d3e'e)e*Z,G d4d5 d5ee-Z.e e$e'e+e)e,e!e*e.g	Z/e"e!e%e!e&e!e(e!iZ0eeeeeeeefZ1ddl2Z2e23d6Z4d7d8 Z5d9d: Z6[2dd;d<Z7G d=d> d>e8Z9dd@dAZ:ej;<e9 G dBdC dCe8Z=G dDdE dEe8Z>G dFdG dGe8Z?ddHdIZ@eAjBZCdJdK ZDdLdM ZEdNdO ZFdPdQ ZGddSdTZHdUdV ZIdWdX ZJG dYdZ dZe8ZKeK jLZMdd[d\ZNd]d^ ZOd_d` ZPdadbdcdddedfdgdhdidj	fdkdlZQddmdnZRddodpZSe>dqee$e+e!gg drdsdddtZTe>duee$e+e!e e,gg dvZUe>dueg g dvZVddlWZWeWXdweWjYeWjZB j[Z\eWXdxj[Z]eWXdyj[Z^eWXdzeWjYeWj_B Z`[WzddlaZbW n ey   Y n0 dd{d|Zcd}d~ Zddd ZedddZfdd Zgdd Zhe9dZie9dZje9dZke9dZle9dZme9dZneiejfZoe	jpjqZre	jpjsZte	jpjuZvewdherd erZx[	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_THREADSHAVE_CONTEXTVARdecimalz1.70z2.4.2    N)
namedtupler   zsign digits exponentc                  G   s   | S N )argsr*   r*   //opt/alt/python39/lib64/python3.9/_pydecimal.py<lambda>       r-   r   r   r   r   r   r   r   r   Tl    l   NZolNZoi@Ti   c                   @   s   e Zd Zdd ZdS )r   c                 G   s   d S r)   r*   selfcontextr+   r*   r*   r,   handle   s    zDecimalException.handleN__name__
__module____qualname__r3   r*   r*   r*   r,   r      s   r   c                   @   s   e Zd ZdS )r   Nr5   r6   r7   r*   r*   r*   r,   r      s   r   c                   @   s   e Zd Zdd ZdS )r	   c                 G   s,   |r(t |d j|d jdd}||S tS )Nr'   nT)_dec_from_triple_sign_int_fix_nan_NaN)r1   r2   r+   ansr*   r*   r,   r3      s    
zInvalidOperation.handleNr4   r*   r*   r*   r,   r	      s   r	   c                   @   s   e Zd Zdd ZdS )r   c                 G   s   t S r)   r>   r0   r*   r*   r,   r3     s    zConversionSyntax.handleNr4   r*   r*   r*   r,   r      s   r   c                   @   s   e Zd Zdd ZdS )r
   c                 G   s   t | S r)   )_SignedInfinityr1   r2   signr+   r*   r*   r,   r3     s    zDivisionByZero.handleNr4   r*   r*   r*   r,   r
   
  s   r
   c                   @   s   e Zd Zdd ZdS )r   c                 G   s   t S r)   r@   r0   r*   r*   r,   r3   "  s    zDivisionImpossible.handleNr4   r*   r*   r*   r,   r     s   r   c                   @   s   e Zd Zdd ZdS )r   c                 G   s   t S r)   r@   r0   r*   r*   r,   r3   -  s    zDivisionUndefined.handleNr4   r*   r*   r*   r,   r   %  s   r   c                   @   s   e Zd ZdS )r   Nr8   r*   r*   r*   r,   r   0  s   r   c                   @   s   e Zd Zdd ZdS )r   c                 G   s   t S r)   r@   r0   r*   r*   r,   r3   G  s    zInvalidContext.handleNr4   r*   r*   r*   r,   r   <  s   r   c                   @   s   e Zd ZdS )r   Nr8   r*   r*   r*   r,   r   J  s   r   c                   @   s   e Zd ZdS )r   Nr8   r*   r*   r*   r,   r   V  s   r   c                   @   s   e Zd Zdd ZdS )r   c                 G   s   |j ttttfv rt| S |dkrR|j tkr4t| S t|d|j |j	|j d S |dkr|j t
krlt| S t|d|j |j	|j d S d S )Nr'   9r/   )roundingr   r   r   r   rA   r   r:   precEmaxr   rB   r*   r*   r,   r3   w  s     

zOverflow.handleNr4   r*   r*   r*   r,   r   a  s   r   c                   @   s   e Zd ZdS )r   Nr8   r*   r*   r*   r,   r     s   r   c                   @   s   e Zd ZdS )r   Nr8   r*   r*   r*   r,   r     s   r   Zdecimal_contextc                  C   s6   z
t  W S  ty0   t } t |  |  Y S 0 d S r)   )_current_context_vargetLookupErrorr   setr2   r*   r*   r,   r     s    

r   c                 C   s,   | t ttfv r|  } |   t|  d S r)   )r   r   r   copyclear_flagsrH   rK   rL   r*   r*   r,   r     s    r   c                 C   s   | d u rt  } t| S r)   )r   _ContextManager)ctxr*   r*   r,   r     s    $r   c                
   @   s  e Zd ZdZdddZedd Zdd	 Zd
d ZdddZ	dd Z
dd Zdd ZdddZdddZdddZdddZdddZdddZd d! Zd"d# Zd$d% Zd&d' Zdd)d*Zdd+d,Zdd-d.Zdd/d0Zdd2d3Zdd4d5ZeZdd6d7Zd d8d9Zdd:d;Z e Z!dd<d=Z"d>d? Z#dd@dAZ$ddBdCZ%ddDdEZ&ddFdGZ'ddHdIZ(ddJdKZ)d	dLdMZ*d
dNdOZ+dPdQ Z,dRdS Z-e-Z.e/dTdU Z0e/dVdW Z1dXdY Z2dZd[ Z3d\d] Z4d^d_ Z5d`da Z6dbdc Z7ddde Z8dfdg Z9dhdi Z:djdk Z;dldm Z<dndo Z=e>e6e7e8e9e:e;e<e=dpZ?ddqdrZ@dsdt ZAdudv ZBddwdxZCddydzZDd{d| ZEdd}d~ZFdddZGdddZHdddZIdddZJdd ZKdd ZLdddZMdddZNeNZOdddZPdddZQdddZRdd ZSdd ZTdd ZUdd ZVdddZWdddZXdddZYdd ZZdd Z[dddZ\dddZ]dd Z^dd Z_dd Z`dd ZadddZbdd Zcdd Zddd ZedddZfdd Zgdd ZhdddZiddĄ Zjd ddƄZkd!ddȄZlddʄ Zmdd̄ Znd"dd΄Zod#ddЄZpd$dd҄Zqd%ddԄZrd&ddքZsd'dd؄Ztd(ddڄZud)dd܄Zvd*ddބZwd+ddZxdd Zyd,ddZzd-ddZ{d.ddZ|dd Z}dd Z~dd Zd/ddZdS (0  r   )_expr<   r;   _is_special0Nc                 C   s  t | }t|tr$t| dd}|d u rP|d u r@t }|t	d| S |
ddkrfd|_nd|_|
d}|d ur|
d	pd}t|
d
pd}tt|| |_|t| |_d|_nZ|
d}|d urtt|pdd|_|
drd|_nd|_nd|_d|_d|_|S t|trf|dkrBd|_nd|_d|_tt||_d|_|S t|tr|j|_|j|_|j|_|j|_|S t|tr|j|_t|j|_t|j|_d|_|S t|ttfr"t|dkrtdt|d tr|d dv std|d |_|d dkrHd|_|d |_d|_ng }	|d D ]R}
t|
trd|
  kr|dkrn n|	s|
dkr|	|
 ntdqT|d dv rdtt|	|_|d |_d|_nDt|d trdtt|	pdg|_|d |_d|_ntd|S t|trx|d u r>t }|td t|}|j|_|j|_|j|_|j|_|S t d| d S )N_ zInvalid literal for Decimal: %rrC   -r/   r'   intZfracexprS   FdiagsignalNr9   FT   ztInvalid tuple size in creation of Decimal from list or tuple.  The list or tuple should have exactly three elements.r'   r/   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.r9   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   groupr;   rW   r<   lenrQ   rR   lstripabsr   _WorkReprC   rX   listtuple
ValueErrorappendjoinmapfloatr   
from_float	TypeError)clsvaluer2   r1   mintpartfracpartrX   rY   digitsdigitr*   r*   r,   rd   
  s    






(



zDecimal.__new__c                 C   s   t |tr,|dkrdnd}d}tt|}nzt |trt|sJt|rV| t|S t	d|dkrld}nd}t|
 \}}| d }t|d|  }ntdt||| }| tu r|S | |S d S )Nr'   r/   g      ?   zargument must be int or float.)re   rW   rf   rn   rv   _mathZisinfZisnanreprZcopysignas_integer_ratio
bit_lengthrx   r:   r   )ry   frC   kcoeffr9   dresultr*   r*   r,   rw     s$    

zDecimal.from_floatc                 C   s(   | j r$| j}|dkrdS |dkr$dS dS )Nr9   r/   r[   r_   r'   )rR   rQ   )r1   rX   r*   r*   r,   _isnan  s    zDecimal._isnanc                 C   s   | j dkr| jrdS dS dS )Nr\   r/   r'   )rQ   r;   r1   r*   r*   r,   _isinfinity  s
    
zDecimal._isinfinityc                 C   s|   |   }|d u rd}n|  }|s&|rx|d u r4t }|dkrJ|td| S |dkr`|td|S |rn| |S ||S dS )NFr_   sNaNr'   )r   r   rj   r	   r=   )r1   otherr2   self_is_nanother_is_nanr*   r*   r,   _check_nans  s&    


zDecimal._check_nansc                 C   sv   |d u rt  }| js|jrr|  r0|td| S | rF|td|S |  r\|td| S | rr|td|S dS )Nzcomparison involving sNaNzcomparison involving NaNr'   )r   rR   is_snanrj   r	   is_qnanr1   r   r2   r*   r*   r,   _compare_check_nans	  s0    zDecimal._compare_check_nansc                 C   s   | j p| jdkS NrS   rR   r<   r   r*   r*   r,   __bool__*  s    zDecimal.__bool__c                 C   s  | j s|j r8|  }| }||kr(dS ||k r4dS dS | sP|sDdS d|j  S |s^d| j S |j| jk rndS | j|jk r~dS |  }| }||kr| jd| j|j   }|jd|j| j   }||krdS ||k rd| j  S d| j S n ||krd| j S d| j  S d S )Nr'   r   r/   rS   )rR   r   r;   adjustedr<   rQ   )r1   r   Zself_infZ	other_infself_adjustedZother_adjustedself_paddedZother_paddedr*   r*   r,   _cmp1  s>    


zDecimal._cmpc                 C   s<   t | |dd\} }|tu r|S | ||r.dS | |dkS )NT)equality_opFr'   )_convert_for_comparisonNotImplementedr   r   r   r*   r*   r,   __eq__q  s    zDecimal.__eq__c                 C   s<   t | |\} }|tu r|S | ||}|r.dS | |dk S NFr'   r   r   r   r   r1   r   r2   r?   r*   r*   r,   __lt__y  s    zDecimal.__lt__c                 C   s<   t | |\} }|tu r|S | ||}|r.dS | |dkS r   r   r   r*   r*   r,   __le__  s    zDecimal.__le__c                 C   s<   t | |\} }|tu r|S | ||}|r.dS | |dkS r   r   r   r*   r*   r,   __gt__  s    zDecimal.__gt__c                 C   s<   t | |\} }|tu r|S | ||}|r.dS | |dkS r   r   r   r*   r*   r,   __ge__  s    zDecimal.__ge__c                 C   s>   t |dd}| js|r0|jr0| ||}|r0|S t| |S NTraiseit)_convert_otherrR   r   r   r   r   r*   r*   r,   compare  s    zDecimal.comparec                 C   s   | j r4|  rtdn|  r$tS | jr0t S tS | jdkrNtd| jt	}ntt
| j t	}t| j| t	 }| dkr||n| }|dkrdS |S )Nz"Cannot hash a signaling NaN value.r'   
   r   )rR   r   rx   is_nan_PyHASH_NANr;   _PyHASH_INFrQ   pow_PyHASH_MODULUS_PyHASH_10INVrW   r<   )r1   Zexp_hashZhash_r?   r*   r*   r,   __hash__  s    

zDecimal.__hash__c                 C   s   t | jttt| j| jS r)   )r   r;   rq   ru   rW   r<   rQ   r   r*   r*   r,   as_tuple  s    zDecimal.as_tuplec                 C   s   | j r |  rtdntd| s(dS t| j}| jdkrR|d| j  d }}nn| j }|dkr|d dkr|d }|d8 }qZ| j }t|| @  d |}|r||L }||8 }d| |> }| j	r| }||fS )Nz#cannot convert NaN to integer ratioz(cannot convert Infinity to integer ratior^   r'   r   r/   r   )
rR   r   rr   OverflowErrorrW   r<   rQ   minr   r;   )r1   r9   r   Zd5Zd2Zshift2r*   r*   r,   r     s,    



zDecimal.as_integer_ratioc                 C   s   dt |  S )NzDecimal('%s'))rf   r   r*   r*   r,   __repr__  s    zDecimal.__repr__Fc           	      C   sb  ddg| j  }| jrL| jdkr&|d S | jdkr>|d | j S |d | j S | jt| j }| jdkrt|d	krt|}n6|s~d
}n,| jdkr|d
 d d
 }n|d
 d d
 }|dkrd}dd|   | j }nL|t| jkr| jd|t| j   }d}n | jd | }d| j|d   }||kr(d}n*|d u r8t }ddg|j d||   }|| | | S )NrU   rV   r\   ZInfinityr9   NaNr   r'   r/   rS   r]   .eEz%+d)r;   rR   rQ   r<   rl   r   capitals)	r1   engr2   rC   
leftdigitsdotplacer|   r}   rX   r*   r*   r,   __str__  s:    




zDecimal.__str__c                 C   s   | j d|dS )NT)r   r2   )r   r1   r2   r*   r*   r,   to_eng_string;  s    zDecimal.to_eng_stringc                 C   sR   | j r| j|d}|r|S |d u r(t }| s@|jtkr@|  }n|  }||S NrL   )rR   r   r   rE   r   copy_abscopy_negate_fixr1   r2   r?   r*   r*   r,   __neg__D  s    
zDecimal.__neg__c                 C   sR   | j r| j|d}|r|S |d u r(t }| s@|jtkr@|  }nt| }||S r   )rR   r   r   rE   r   r   r   r   r   r*   r*   r,   __pos__Z  s    
zDecimal.__pos__Tc                 C   sJ   |s|   S | jr&| j|d}|r&|S | jr:| j|d}n| j|d}|S r   )r   rR   r   r;   r   r   )r1   roundr2   r?   r*   r*   r,   __abs__o  s    zDecimal.__abs__c           
      C   sh  t |}|tu r|S |d u r"t }| js.|jr| ||}|rB|S |  rr| j|jkrj| rj|tdS t	| S | rt	|S t
| j|j}d}|jtkr| j|jkrd}| s|st
| j|j}|rd}t|d|}||}|S | st||j|j d }|||j}||}|S |sVt|| j|j d }| ||j}||}|S t| }t|}t|||j\}}t }	|j|jkr|j|jkrt|d|}||}|S |j|jk r|| }}|jdkrd|	_|j|j |_|_nd|	_n&|jdkrd|	_d\|_|_nd|	_|jdkr<|j|j |	_n|j|j |	_|j|	_t	|	}||}|S )Nz
-INF + INFr'   r/   rS   )r'   r'   )r   r   r   rR   r   r   r;   rj   r	   r   r   rQ   rE   r   r:   r   maxrF   _rescalero   
_normalizerC   rW   rX   )
r1   r   r2   r?   rX   ZnegativezerorC   op1op2r   r*   r*   r,   __add__  s|    





zDecimal.__add__c                 C   sH   t |}|tu r|S | js |jr6| j||d}|r6|S | j| |dS r   )r   r   rR   r   r   r   r   r*   r*   r,   __sub__  s    zDecimal.__sub__c                 C   s"   t |}|tu r|S |j| |dS r   )r   r   r   r   r*   r*   r,   __rsub__  s    zDecimal.__rsub__c                 C   s@  t |}|tu r|S |d u r"t }| j|jA }| js:|jr| ||}|rN|S |  rn|sf|tdS t	| S | r| s|tdS t	| S | j
|j
 }| r|st|d|}||}|S | jdkrt||j|}||}|S |jdkr
t|| j|}||}|S t| }t|}t|t|j|j |}||}|S )Nz(+-)INF * 0z0 * (+-)INFrS   1)r   r   r   r;   rR   r   r   rj   r	   rA   rQ   r:   r   r<   ro   rf   rW   )r1   r   r2   Z
resultsignr?   Z	resultexpr   r   r*   r*   r,   __mul__  sH    




zDecimal.__mul__c                 C   s  t |}|tu rtS |d u r"t }| j|jA }| js:|jr| ||}|rN|S |  rj| rj|tdS |  rzt	| S | r|t
d t|d| S |s| s|tdS |td|S | s| j|j }d}nt|jt| j |j d }| j|j | }t| }t|}	|dkr:t|jd|  |	j\}}
nt|j|	jd|   \}}
|
rt|d	 dkr|d7 }n8| j|j }||k r|d dkr|d }|d7 }qt|t||}||S )
Nz(+-)INF/(+-)INFzDivision by infinityrS   z0 / 0zx / 0r'   r/   r   r   )r   r   r   r;   rR   r   r   rj   r	   rA   r   r:   Etinyr   r
   rQ   rl   r<   rF   ro   divmodrW   rf   r   )r1   r   r2   rC   r?   rX   r   shiftr   r   	remainder	ideal_expr*   r*   r,   __truediv__,  sP    

zDecimal.__truediv__c                 C   s  | j |j A }| r| j}nt| j|j}|  |  }| rN| sN|dkrht|dd| ||jfS ||jkr
t	| }t	|}|j
|j
kr| jd|j
|j
  9  _n| jd|j
|j
  9  _t|j|j\}}	|d|j k r
t|t|dt| j t|	|fS |td}
|
|
fS )Nr   rS   r'   r   z%quotient too large in //, % or divmod)r;   r   rQ   r   r   r:   r   rE   rF   ro   rX   rW   r   rf   rj   r   )r1   r   r2   rC   r   expdiffr   r   qrr?   r*   r*   r,   _divideg  s0    
zDecimal._dividec                 C   s"   t |}|tu r|S |j| |dS r   )r   r   r   r   r*   r*   r,   __rtruediv__  s    zDecimal.__rtruediv__c                 C   s   t |}|tu r|S |d u r"t }| ||}|r:||fS | j|jA }|  r~| rj|td}||fS t| |tdfS |s| 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   r;   r   rj   r	   rA   r   r
   r   r   )r1   r   r2   r?   rC   Zquotientr   r*   r*   r,   
__divmod__  s4    


zDecimal.__divmod__c                 C   s"   t |}|tu r|S |j| |dS r   )r   r   r   r   r*   r*   r,   __rdivmod__  s    zDecimal.__rdivmod__c                 C   s   t |}|tu r|S |d u r"t }| ||}|r6|S |  rJ|tdS |sj| r^|tdS |tdS | ||d }|	|}|S )Nr   r   z0 % 0r/   )
r   r   r   r   r   rj   r	   r   r   r   )r1   r   r2   r?   r   r*   r*   r,   __mod__  s"    
zDecimal.__mod__c                 C   s"   t |}|tu r|S |j| |dS r   )r   r   r   r   r*   r*   r,   __rmod__  s    zDecimal.__rmod__c                 C   s  |d u rt  }t|dd}| ||}|r.|S |  rB|tdS |sb| rV|tdS |tdS | r|t| }||S t	| j
|j
}| st| jd|}||S |  |  }||jd kr|tS |dkr| ||j}||S t| }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|tS | j}
|	dk rd|
 }
|	 }	t|
t|	|}||S )NTr   zremainder_near(infinity, x)zremainder_near(x, 0)zremainder_near(0, 0)rS   r/   r   r   r_   r'   )r   r   r   r   rj   r	   r   r   r   r   rQ   r:   r;   r   rF   r   r   rE   ro   rX   rW   r   rf   )r1   r   r2   r?   ideal_exponentr   r   r   r   r   rC   r*   r*   r,   remainder_near  s`    






zDecimal.remainder_nearc                 C   s   t |}|tu r|S |d u r"t }| ||}|r6|S |  rb| rR|tdS t| j|jA  S |s| r|t	d| j|jA S |t
dS | ||d S )Nz
INF // INFr   z0 // 0r'   )r   r   r   r   r   rj   r	   rA   r;   r
   r   r   r   r*   r*   r,   __floordiv__'  s&    
zDecimal.__floordiv__c                 C   s"   t |}|tu r|S |j| |dS r   )r   r   r   r   r*   r*   r,   __rfloordiv__C  s    zDecimal.__rfloordiv__c                 C   s8   |   r(|  rtd| jr"dnd}nt| }t|S )Nz%Cannot convert signaling NaN to floatz-nannan)r   r   rr   r;   rf   rv   r1   sr*   r*   r,   	__float__J  s    zDecimal.__float__c                 C   st   | j r(|  rtdn|  r(tdd| j }| jdkrT|t| j d| j  S |t| jd | j pjd S d S )NzCannot convert NaN to integerz"Cannot convert infinity to integerr   r'   r   rS   )	rR   r   rr   r   r   r;   rQ   rW   r<   r   r*   r*   r,   __int__T  s    


zDecimal.__int__c                 C   s   | S r)   r*   r   r*   r*   r,   realc  s    zDecimal.realc                 C   s   t dS Nr'   r   r   r*   r*   r,   imagg  s    zDecimal.imagc                 C   s   | S r)   r*   r   r*   r*   r,   	conjugatek  s    zDecimal.conjugatec                 C   s   t t| S r)   )complexrv   r   r*   r*   r,   __complex__n  s    zDecimal.__complex__c                 C   sR   | j }|j|j }t||krJ|t|| d  d}t| j|| jdS t| S )NrS   T)	r<   rF   clamprl   rm   r:   r;   rQ   r   )r1   r2   ZpayloadZmax_payload_lenr*   r*   r,   r=   q  s    zDecimal._fix_nanc                 C   sX  | j r |  r| |S t| S | }| }| s|j|g|j }tt	| j
||}|| j
krx|t t| jd|S t| S t| j| j
 |j }||kr|td| j}|t |t |S ||k }|r|}| j
|k rt| 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|td| j}nt| j||}|r|r|t |r|t |r|t |t |s|t |S |r|t |jdkrP| j
|krP|t | jd| j
|   }t| j||S t| S )NrS   
above Emaxr'   r   r/   r   )rR   r   r=   r   r   EtoprG   r   r   r   rQ   rj   r   r:   r;   rl   r<   rF   r   r   r   _pick_rounding_functionrE   rf   rW   r   r   )r1   r2   r   r   exp_maxZnew_expZexp_minr?   Zself_is_subnormalr~   Zrounding_methodchangedr   r   r*   r*   r,   r   }  sn    
















zDecimal._fixc                 C   s   t | j|rdS dS d S )Nr'   r   )
_all_zerosr<   r1   rF   r*   r*   r,   _round_down  s    zDecimal._round_downc                 C   s   |  | S r)   )r  r  r*   r*   r,   	_round_up  s    zDecimal._round_upc                 C   s*   | j | dv rdS t| j |r"dS dS d S )NZ56789r/   r'   r   )r<   r  r  r*   r*   r,   _round_half_up  s
    zDecimal._round_half_upc                 C   s   t | j|rdS | |S d S )Nr   _exact_halfr<   r  r  r*   r*   r,   _round_half_down  s    zDecimal._round_half_downc                 C   s8   t | j|r*|dks&| j|d  dv r*dS | |S d S )Nr'   r/   02468r   r  r  r*   r*   r,   _round_half_even  s    zDecimal._round_half_evenc                 C   s    | j r| |S | | S d S r)   r;   r  r  r*   r*   r,   _round_ceiling  s    
zDecimal._round_ceilingc                 C   s    | j s| |S | | S d S r)   r  r  r*   r*   r,   _round_floor  s    
zDecimal._round_floorc                 C   s0   |r | j |d  dvr | |S | | S d S )Nr/   Z05)r<   r  r  r*   r*   r,   _round_05up  s    
zDecimal._round_05up)r   r   r   r   r   r   r   r   c                 C   sb   |d ur2t |tstdtdd| }| |S | jrR|  rJtdntdt| 	dt
S )Nz+Second argument to round should be integralr'   r   cannot round a NaNcannot round an infinity)re   rW   rx   r:   quantizerR   r   rr   r   r   r   )r1   r9   rX   r*   r*   r,   	__round__&  s    /


zDecimal.__round__c                 C   s0   | j r |  rtdntdt| dtS Nr  r  r'   )rR   r   rr   r   rW   r   r   r   r*   r*   r,   	__floor__d  s
    
zDecimal.__floor__c                 C   s0   | j r |  rtdntdt| dtS r  )rR   r   rr   r   rW   r   r   r   r*   r*   r,   __ceil__s  s
    
zDecimal.__ceil__c                 C   s  t |dd}t |dd}| js$|jr|d u r2t }| jdkrJ|td| S |jdkrb|td|S | jdkrr| }nf|jdkr|}nV| jdkr|s|tdS t| j|jA  }n*|jdkr| s|tdS t| j|jA  }n0t| j|jA t	t
| jt
|j | j|j }|||S )	NTr   r[   r   r9   r\   zINF * 0 in fmaz0 * INF in fma)r   rR   r   rQ   rj   r	   rA   r;   r:   rf   rW   r<   r   )r1   r   Zthirdr2   productr*   r*   r,   fma  s<    






zDecimal.fmac                 C   s  t |}|tu r|S t |}|tu r(|S |d u r6t }|  }| }| }|sZ|sZ|r|dkrp|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 |
 rPd}n| j}tt|}t|  }t| }	|j| td	|j| | }t|	jD ]}
t|d	|}qt||	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   rj   r	   r=   
_isintegerr   rF   _isevenr;   rn   rW   ro   to_integral_valuer   rX   ranger:   rf   )r1   r   modulor2   r   r   Zmodulo_is_nanrC   baseexponentir*   r*   r,   _power_modulo  s    



zDecimal._power_moduloc                 C   s  t | }|j|j }}|d dkr4|d }|d7 }qt |}|j|j }}|d dkrh|d }|d7 }qJ|dkr||9 }|d dkr|d }|d7 }qz|dk rd S |d|  }	|jdkr|	 }	| r|jdkr| jt| }
t|	|
 |d }nd}tddd|  |	| S |jdkr|d }|dv r|| @ |krBd S t	|d }|d d }|t
t|krpd S t|| |}t|| |}|d u s|d u rd S ||krd S d	| }n|d	krt	|d
 d }td	| |\}}|rd S |d	 dkr|d	 }|d8 }q|d d }|t
t|kr6d S t|| |}t|| |}|d u sf|d u rjd S ||krxd S d| }nd S |d| krd S | | }tdt||S |dkr|d|  d }}n|dkrt
tt|| | krd S t	|}|dkr,t
tt|| | kr,d S |d|   }}|d |d   kr\dkrtn n|d }|d }q<|d	 |d	   krdkrn n|d	 }|d	 }qt|dkrX|dkr||krd S t||\}}|dkrd S dt	| |  > }t|||d  \}}||kr$q<n||d  | | }q||krP|dksTd S |}|dkr|||d t| kr|d S || }||9 }|d| krd S t|}| r|jdkr| jt| }
t||
 |t
| }nd}td|d|  || S )Nr   r'   r/   r   rS   )r_            ]   A   r      r]   r_   d   )ro   rW   rX   rC   r  r;   rQ   r   r:   _nbitsrl   rf   _decimal_lshift_exactr   rn   	_log10_lb)r1   r   pxxcxeyycyer  r   ZzerosZ
last_digitr   Zemaxr   r{   r9   Zxc_bitsremar   r   Zstr_xcr*   r*   r,   _power_exact  s    :












&&$$


 zDecimal._power_exactc                 C   s4  |d ur|  |||S t|}|tu r*|S |d u r8t }| ||}|rL|S |sd| s`|tdS tS d}| jdkr|	 r|
 sd}n| r|tdS |  } | s|jdkrt|ddS t| S |  r|jdkrt| S t|ddS | tkr|	 rZ|jdkrd}n||jkr"|j}nt|}| j| }|d|j k rxd|j }|t n|t |t d|j }t|dd|   |S |  }| r|jdk|dk krt|ddS t| S d }d}	|  |  }
|dk|jdkkr|
tt|jkrHt|d|jd }n,| }|
tt| krHt|d|d }|d u r| ||jd }|d ur|dkrtd|j|j}d}	|d u r8|j}t| }|j|j }}t|}|j|j }}|jdkr| }d	}t|||||| \}}|d
dtt|| d    rq(|d	7 }qt|t||}|	r&|	 s&t|j|jkr|jd t|j }t|j|jd|  |j| }|  }|!  t"D ]}d|j#|< q|$|}|t |j%t& r|t' |j%t( r|t(d|j t't&ttt)fD ]}|j%| r|| qn
|$|}|S )Nz0 ** 0r'   r/   z+x ** y with x negative and y not an integerrS   r   FTr]   r   r   r   )*r!  r   r   r   r   rj   r	   _Oner;   r  r  r   r:   rA   r   rF   rW   rQ   r   r   r   _log10_exp_boundrl   rf   rG   r   r5  r<   ro   rX   rC   _dpowerrM   rN   _signalstrapsr   flagsr   r   r   r   )r1   r   r  r2   r?   Zresult_signZ
multiplierrX   Zself_adjexactboundr   r,  r-  r.  r/  r0  r1  r2  extrar   r   Z
newcontextZ	exceptionr*   r*   r,   __pow__  s    














"



zDecimal.__pow__c                 C   s"   t |}|tu r|S |j| |dS r   )r   r   r?  r   r*   r*   r,   __rpow__	  s    zDecimal.__rpow__c                 C   s   |d u rt  }| jr(| j|d}|r(|S | |}| r>|S |sPt|jddS |j| g|j	 }t
|j}|j}|j|d  dkr||k r|d7 }|d8 }qtt|j|jd | |S )NrL   rS   r'   r/   )r   rR   r   r   r   r:   r;   rG   r   r   rl   r<   rQ   )r1   r2   r?   dupr   endrX   r*   r*   r,   	normalize	  s$    


zDecimal.normalizec                 C   s  t |dd}|d u rt }|d u r(|j}| js4|jr|| ||}|rH|S | sX|  r|| rp|  rpt| S |tdS |	 |j
  kr|jksn |tdS | st| jd|j
}||S |  }||jkr|tdS ||j
 d |jkr|tdS | |j
|}| |jkr.|tdS t|j|jkrL|tdS |rl| |jk rl|t |j
| j
kr|| kr|t |t ||}|S )	NTr   zquantize with one INFz)target exponent out of bounds in quantizerS   z9exponent of quantize result too large for current contextr/   z7quantize result has too many digits for current context)r   r   rE   rR   r   r   r   rj   r	   r   rQ   rG   r:   r;   r   r   rF   r   rl   r<   Eminr   r   r   )r1   rX   rE   r2   r?   r   r*   r*   r,   r  	  s`    






zDecimal.quantizec                 C   sD   t |dd}| js|jr8|  r(| p6|  o6| S | j|jkS r   )r   rR   r   is_infiniterQ   r   r*   r*   r,   same_quantum%
  s    	zDecimal.same_quantumc                 C   s   | j rt| S | s t| jd|S | j|krHt| j| jd| j|   |S t| j| j | }|dk rzt| jd|d } d}| j| }|| |}| jd | pd}|dkrtt	|d }t| j||S )NrS   r'   r   r/   )
rR   r   r:   r;   rQ   r<   rl   r   rf   rW   )r1   rX   rE   r~   Zthis_functionr  r   r*   r*   r,   r   4
  s$    


zDecimal._rescalec                 C   sf   |dkrt d| js| s"t| S | |  d | |}| |  krb|| d | |}|S )Nr'   z'argument should be at least 1 in _roundr/   )rr   rR   r   r   r   )r1   placesrE   r?   r*   r*   r,   _roundV
  s    

zDecimal._roundc                 C   s   | j r"| j|d}|r|S t| S | jdkr4t| S | sFt| jddS |d u rTt }|d u rb|j}| d|}|| kr|	t
 |	t |S )NrL   r'   rS   )rR   r   r   rQ   r:   r;   r   rE   r   rj   r   r   r1   rE   r2   r?   r*   r*   r,   to_integral_exactm
  s$    



zDecimal.to_integral_exactc                 C   s`   |d u rt  }|d u r|j}| jr>| j|d}|r6|S t| S | jdkrPt| S | d|S d S )NrL   r'   )r   rE   rR   r   r   rQ   r   rI  r*   r*   r,   r  
  s    
zDecimal.to_integral_valuec                 C   s  |d u rt  }| jrB| j|d}|r(|S |  rB| jdkrBt| S | sdt| jd| jd }||S | jdkrz|	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r|d| 9 }d	}	nt|d|  \}}
|
 }	||8 }d| }|| }||kr:qJn|| d? }q"|	oZ|| |k}	|	r|dkrz|d|  }n|d|  9 }||7 }n|d
 dkr|d7 }tdt||}| }|t}||}||_|S )NrL   r'   rS   r_   r/   zsqrt(-x), x > 0r   r(  Tr   )r   rR   r   r   r;   r   r:   rQ   r   rj   r	   rF   ro   rX   rW   rl   r<   r   rf   _shallow_copy_set_roundingr   rE   )r1   r2   r?   rF   opr   clr   r<  r   r9   r   rE   r*   r*   r,   sqrt
  s^    










zDecimal.sqrtc                 C   s   t |dd}|d u rt }| js&|jr~|  }| }|s>|r~|dkrX|dkrX| |S |dkrr|dkrr||S | ||S | |}|dkr| |}|dkr|}n| }||S NTr   r/   r'   r   r   r   rR   r   r   r   r   compare_totalr1   r   r2   ZsnZonrN  r?   r*   r*   r,   r      s&    


	
zDecimal.maxc                 C   s   t |dd}|d u rt }| js&|jr~|  }| }|s>|r~|dkrX|dkrX| |S |dkrr|dkrr||S | ||S | |}|dkr| |}|dkr| }n|}||S rQ  rR  rT  r*   r*   r,   r   *  s&    



zDecimal.minc                 C   s8   | j r
dS | jdkrdS | j| jd  }|dt| kS )NFr'   TrS   )rR   rQ   r<   rl   )r1   restr*   r*   r,   r  L  s    
zDecimal._isintegerc                 C   s&   | r| j dkrdS | jd| j   dv S )Nr'   Tr   r
  )rQ   r<   r   r*   r*   r,   r  U  s    zDecimal._isevenc                 C   s0   z| j t| j d W S  ty*   Y dS 0 d S )Nr/   r'   )rQ   rl   r<   rx   r   r*   r*   r,   r   [  s    zDecimal.adjustedc                 C   s   | S r)   r*   r   r*   r*   r,   	canonicalc  s    zDecimal.canonicalc                 C   s.   t |dd}| ||}|r |S | j||dS NTr   rL   )r   r   r   r   r*   r*   r,   compare_signalk  s
    zDecimal.compare_signalc                 C   s`  t |dd}| jr|jstS | js,|jr,tS | j}|  }| }|sL|r||krt| j| jf}t|j|jf}||k r|rtS tS ||kr|rtS tS tS |r|dkrtS |dkrtS |dkrtS |dkrtS n2|dkrtS |dkrtS |dkrt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\|rXtS tS tS )NTr   r/   r_   )	r   r;   _NegativeOner6  r   rl   r<   _ZerorQ   )r1   r   r2   rC   Zself_nanZ	other_nanZself_keyZ	other_keyr*   r*   r,   rS  w  sf    



zDecimal.compare_totalc                 C   s&   t |dd}|  }| }||S r   )r   r   rS  )r1   r   r2   r   or*   r*   r,   compare_total_mag  s    zDecimal.compare_total_magc                 C   s   t d| j| j| jS r   )r:   r<   rQ   rR   r   r*   r*   r,   r     s    zDecimal.copy_absc                 C   s2   | j rtd| j| j| jS td| j| j| jS d S )Nr'   r/   )r;   r:   r<   rQ   rR   r   r*   r*   r,   r     s    zDecimal.copy_negatec                 C   s"   t |dd}t|j| j| j| jS r   )r   r:   r;   r<   rQ   rR   r   r*   r*   r,   	copy_sign  s    
zDecimal.copy_signc                 C   s  |d u rt  }| j|d}|r"|S |  dkr2tS | s:tS |  dkrNt| S |j}|  }| jdkr|t	t
|jd d krtdd|jd }n0| jdkr|t	t
|  d d krtdd| d }n| jdkr|| k rtddd|d   d | }n| jdkrD|| d k rDtdd|d  | d }nt| }|j|j }}|jdkrl| }d}t|||| \}	}
|	d	d
t	t
|	| d    rq|d7 }qptdt
|	|
}| }|t}||}||_|S )NrL   r   r/   r'   r]   r   rS   rD   r   r   )r   r   r   rZ  r6  r   rF   r   r;   rl   rf   rG   r:   r   ro   rW   rX   rC   _dexprK  rL  r   r   rE   )r1   r2   r?   r,  adjrM  rN  r   r>  r   rX   rE   r*   r*   r,   rX     sH    $( "

zDecimal.expc                 C   s   dS )NTr*   r   r*   r*   r,   is_canonical'  s    zDecimal.is_canonicalc                 C   s   | j  S r)   )rR   r   r*   r*   r,   	is_finite/  s    zDecimal.is_finitec                 C   s
   | j dkS )Nr\   rQ   r   r*   r*   r,   rE  7  s    zDecimal.is_infinitec                 C   s
   | j dv S )Nra   rb  r   r*   r*   r,   r   ;  s    zDecimal.is_nanc                 C   s*   | j s
| sdS |d u rt }|j|  kS NF)rR   r   rD  r   r   r*   r*   r,   	is_normal?  s
    
zDecimal.is_normalc                 C   s
   | j dkS )Nr9   rb  r   r*   r*   r,   r   G  s    zDecimal.is_qnanc                 C   s
   | j dkS Nr/   )r;   r   r*   r*   r,   	is_signedK  s    zDecimal.is_signedc                 C   s
   | j dkS )Nr[   rb  r   r*   r*   r,   r   O  s    zDecimal.is_snanc                 C   s*   | j s
| sdS |d u rt }|  |jk S rc  )rR   r   r   rD  r   r*   r*   r,   is_subnormalS  s
    
zDecimal.is_subnormalc                 C   s   | j  o| jdkS r   r   r   r*   r*   r,   is_zero[  s    zDecimal.is_zeroc                 C   s   | j t| j d }|dkr4tt|d d d S |dkrXttd| d d d S t| }|j|j }}|dkrt|d|   }t|}t|t| ||k  S |ttd|  |  d S )Nr/      r   r   r   r'   rQ   rl   r<   rf   ro   rW   rX   r1   r_  rM  rN  r   numZdenr*   r*   r,   _ln_exp_bound_  s    zDecimal._ln_exp_boundc           
      C   s  |d u rt  }| j|d}|r"|S | s*tS |  dkr:tS | tkrFtS | jdkr\|t	dS t
| }|j|j }}|j}||   d }t|||}|ddttt|| d    rq|d7 }qtt|dk tt|| }| }|t}	||}|	|_|S )	NrL   r/   zln of a negative valuer_   r   r   r]   r'   )r   r   _NegativeInfinityr   	_Infinityr6  rZ  r;   rj   r	   ro   rW   rX   rF   rm  _dlogrl   rf   rn   r:   rK  rL  r   r   rE   
r1   r2   r?   rM  rN  r   r,  rG  r   rE   r*   r*   r,   lnx  s:    
$


z
Decimal.lnc                 C   s   | j t| j d }|dkr,tt|d S |dkrHttd| d S t| }|j|j }}|dkrt|d|   }td| }t|t| ||k  d S td|  | }t|| |dk  d S )	Nr/   r   r   r'   r      r_   Z231rj  rk  r*   r*   r,   r7    s    zDecimal._log10_exp_boundc           
      C   sF  |d u rt  }| j|d}|r"|S | s*tS |  dkr:tS | jdkrP|tdS | jd dkr| jdd  dt	| jd  krt
| jt	| j d }nt| }|j|j }}|j}||   d }t|||}|dd	t	tt|| d    rq|d
7 }qtt|dk tt|| }| }|t}	||}|	|_|S )NrL   r/   zlog10 of a negative valuer'   r   rS   r_   r   r   r]   )r   r   rn  r   ro  r;   rj   r	   r<   rl   r   rQ   ro   rW   rX   rF   r7  _dlog10rf   rn   r:   rK  rL  r   r   rE   rq  r*   r*   r,   log10  s:    
.$


zDecimal.log10c                 C   sV   | j |d}|r|S |d u r"t }|  r.tS | s@|tddS t|  }||S )NrL   zlogb(0)r/   )	r   r   r   ro  rj   r
   r   r   r   r   r*   r*   r,   logb  s    	zDecimal.logbc                 C   s6   | j dks| jdkrdS | jD ]}|dvr dS qdS )Nr'   FZ01T)r;   rQ   r<   )r1   digr*   r*   r,   
_islogical  s    
zDecimal._islogicalc                 C   s   |j t| }|dkr$d| | }n|dk r<||j  d  }|j t| }|dkr`d| | }n|dk rx||j  d  }||fS )Nr'   rS   )rF   rl   )r1   r2   opaopbZdifr*   r*   r,   _fill_logical'  s    zDecimal._fill_logicalc                 C   sz   |d u rt  }t|dd}|  r*| s4|tS | || j|j\}}ddd t||D }t	d|
dptddS )NTr   rU   c                 S   s$   g | ]\}}t t|t|@ qS r*   rf   rW   .0r4  br*   r*   r,   
<listcomp>B  r.   z'Decimal.logical_and.<locals>.<listcomp>r'   rS   r   r   rx  rj   r	   r{  r<   rt   zipr:   rm   r1   r   r2   ry  rz  r   r*   r*   r,   logical_and4  s    
zDecimal.logical_andc                 C   s(   |d u rt  }| tdd|j d|S )Nr'   r   )r   logical_xorr:   rF   r   r*   r*   r,   logical_invertE  s
    zDecimal.logical_invertc                 C   sz   |d u rt  }t|dd}|  r*| s4|tS | || j|j\}}ddd t||D }t	d|
dptddS )NTr   rU   c                 S   s$   g | ]\}}t t|t|B qS r*   r|  r}  r*   r*   r,   r  Z  r.   z&Decimal.logical_or.<locals>.<listcomp>r'   rS   r  r  r*   r*   r,   
logical_orL  s    
zDecimal.logical_orc                 C   sz   |d u rt  }t|dd}|  r*| s4|tS | || j|j\}}ddd t||D }t	d|
dptddS )NTr   rU   c                 S   s$   g | ]\}}t t|t|A qS r*   r|  r}  r*   r*   r,   r  k  r.   z'Decimal.logical_xor.<locals>.<listcomp>r'   rS   r  r  r*   r*   r,   r  ]  s    
zDecimal.logical_xorc                 C   s   t |dd}|d u rt }| js&|jr~|  }| }|s>|r~|dkrX|dkrX| |S |dkrr|dkrr||S | ||S |  | }|dkr| |}|dkr|}n| }||S rQ  	r   r   rR   r   r   r   r   r   rS  rT  r*   r*   r,   max_magn  s&    


zDecimal.max_magc                 C   s   t |dd}|d u rt }| js&|jr~|  }| }|s>|r~|dkrX|dkrX| |S |dkrr|dkrr||S | ||S |  | }|dkr| |}|dkr| }n|}||S rQ  r  rT  r*   r*   r,   min_mag  s&    


zDecimal.min_magc                 C   s   |d u rt  }| j|d}|r"|S |  dkr2tS |  dkrTtdd|j | S | }|t	 |
  | |}|| kr|S | tdd| d |S )NrL   r   r/   r'   rD   r   )r   r   r   rn  r:   rF   r   rM   rL  r   _ignore_all_flagsr   r   r   r1   r2   r?   Znew_selfr*   r*   r,   
next_minus  s$    

zDecimal.next_minusc                 C   s   |d u rt  }| j|d}|r"|S |  dkr2tS |  dkrTtdd|j | S | }|t	 |
  | |}|| kr|S | tdd| d |S )NrL   r/   r   rD   r'   r   )r   r   r   ro  r:   rF   r   rM   rL  r   r  r   r   r   r  r*   r*   r,   	next_plus  s$    

zDecimal.next_plusc                 C   s   t |dd}|d u rt }| ||}|r.|S | |}|dkrJ| |S |dkr^| |}n
| |}| r|t	d|j
 |t |t nD| |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  r  r   rj   r   r;   r   r   r   rD  r   r   r   )r1   r   r2   r?   Z
comparisonr*   r*   r,   next_toward  s6    	








zDecimal.next_towardc                 C   s   |   rdS |  rdS |  }|dkr,dS |dkr8dS |  rN| jrJdS dS |d u r\t }| j|d	rv| jrrd
S dS | jrdS dS d S )Nr   r   r/   z	+Infinityr   z	-Infinityz-Zeroz+ZerorL   z
-Subnormalz
+Subnormalz-Normalz+Normal)r   r   r   rh  r;   r   rg  )r1   r2   infr*   r*   r,   number_class  s,    zDecimal.number_classc                 C   s   t dS Nr   r   r   r*   r*   r,   radix0  s    zDecimal.radixc                 C   s   |d u rt  }t|dd}| ||}|r.|S |jdkrB|tS |j t|  kr`|jksln |tS |  r|t	| S t|}| j
}|jt| }|dkrd| | }n|dk r|| d  }||d  |d |  }t| j|dpd| jS NTr   r'   rS   r   r   r   rQ   rj   r	   rF   rW   r   r   r<   rl   r:   r;   rm   )r1   r   r2   r?   torotrotdigtopadZrotatedr*   r*   r,   rotate4  s.    

 
zDecimal.rotatec                 C   s   |d u rt  }t|dd}| ||}|r.|S |jdkrB|tS d|j|j  }d|j|j  }|t|  krz|ksn |tS | 	 rt
| S t| j| j| jt| }||}|S )NTr   r'   r   r_   )r   r   r   rQ   rj   r	   rG   rF   rW   r   r   r:   r;   r<   r   )r1   r   r2   r?   ZliminfZlimsupr   r*   r*   r,   scalebU  s"    



zDecimal.scalebc                 C   s  |d u rt  }t|dd}| ||}|r.|S |jdkrB|tS |j t|  kr`|jksln |tS |  r|t	| S t|}| j
}|jt| }|dkrd| | }n|dk r|| d  }|dk r|d | }n|d|  }||j d  }t| j|dp
d| jS r  r  )r1   r   r2   r?   r  r  r  Zshiftedr*   r*   r,   r   n  s4    

 
zDecimal.shiftc                 C   s   | j t| ffS r)   )	__class__rf   r   r*   r*   r,   
__reduce__  s    zDecimal.__reduce__c                 C   s   t | tu r| S | t| S r)   typer   r  rf   r   r*   r*   r,   __copy__  s    zDecimal.__copy__c                 C   s   t | tu r| S | t| S r)   r  )r1   memor*   r*   r,   __deepcopy__  s    zDecimal.__deepcopy__c                 C   sJ  |d u rt  }t||d}| jrXt| j|}t|  }|d dkrL|d7 }t|||S |d d u rvddg|j |d< |d dkrt	| j| j
| jd } |j}|d }|d ur|d dv r| |d	 |} nF|d d
v r| | |} n*|d dv rt| j
|kr| ||} | s@| jdkr@|d d
v r@| d|} | jt| j
 }	|d dv r~| sx|d urxd	| }
nd	}
nB|d d
v r|	}
n.|d dv r| jdkr|	dkr|	}
nd	}
|
dk rd}d|
  | j
 }nP|
t| j
kr| j
d|
t| j
   }d}n"| j
d |
 p d}| j
|
d  }|	|
 }t| j||||S )N)_localeconvr  %gGr_   	precisioneEr/   zfF%ZgGr'   r   rS   rU   )r   _parse_format_specifierrR   _format_signr;   rf   r   _format_alignr   r:   r<   rQ   rE   rH  r   rl   _format_number)r1   Z	specifierr2   r  specrC   bodyrE   r  r   r   r|   r}   rX   r*   r*   r,   
__format__  sZ    
 

zDecimal.__format__)rS   N)NN)N)N)N)N)N)N)FN)N)N)N)TN)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)NN)N)N)NN)N)NN)NN)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)NN)r5   r6   r7   	__slots__rd   classmethodrw   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   r   __rmul__r   r   r   r   r   r   r   r   r   r   r   r   	__trunc__propertyr   r   r   r   r=   r   r  r  r  r	  r  r  r  r  dictr   r  r  r  r  r!  r5  r?  r@  rC  r  rF  r   rH  rJ  r  to_integralrP  r   r   r  r  r   rV  rX  rS  r\  r   r   r]  rX   r`  ra  rE  r   rd  r   rf  r   rg  rh  rm  rr  r7  ru  rv  rx  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r*   r*   r*   r,   r     s  
 
,
 !@

	
	
	
	
2
4
	



V
7;!$K


f	>,U n Y="c*"	IK23.*!'r   Fc                 C   s&   t t}| |_||_||_||_|S r)   )rc   rd   r   r;   r<   rQ   rR   )rC   Zcoefficientr  Zspecialr1   r*   r*   r,   r:     s    
r:   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )rO   c                 C   s   |  | _d S r)   )rM   new_context)r1   r  r*   r*   r,   __init__  s    z_ContextManager.__init__c                 C   s   t  | _t| j | jS r)   )r   saved_contextr   r  r   r*   r*   r,   	__enter__  s    
z_ContextManager.__enter__c                 C   s   t | j d S r)   )r   r  )r1   tvtbr*   r*   r,   __exit__  s    z_ContextManager.__exit__N)r5   r6   r7   r  r  r  r*   r*   r*   r,   rO     s   rO   c                	   @   s  e Zd Zdd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dddZdd Zdd Zdd ZdZd d! Zd"d# Zd$d% Zdd'd(Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#dAdB Z$dCdD Z%dEdF Z&dGdH Z'dIdJ Z(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSdT Z-dUdV Z.dWdX Z/dYdZ Z0d[d\ Z1d]d^ Z2d_d` Z3dadb Z4dcdd Z5dedf Z6dgdh Z7didj Z8dkdl Z9dmdn Z:dodp Z;dqdr Z<dsdt Z=dudv Z>dwdx Z?dydz Z@d{d| ZAd}d~ ZBdd ZCdd ZDdd ZEdd ZFdddZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUeUZVdS )r   Nc
                    s<  zt }
W n ty   Y n0 |d ur(|n|
j| _|d ur<|n|
j| _|d urP|n|
j| _|d urd|n|
j| _|d urx|n|
j| _|d ur|n|
j| _|	d u rg | _n|	| _d u r|
j	
 | _	n.ttstfddt D | _	n| _	 d u rttd| _n0t ts2t fddt  D | _n | _d S )Nc                 3   s   | ]}|t | v fV  qd S r)   rW   r~  r   r:  r*   r,   	<genexpr>I  r.   z#Context.__init__.<locals>.<genexpr>r'   c                 3   s   | ]}|t | v fV  qd S r)   r  r  r;  r*   r,   r  P  r.   )r   	NameErrorrF   rE   rD  rG   r   r   _ignored_flagsr:  rM   re   r  r9  fromkeysr;  )r1   rF   rE   rD  rG   r   r   r;  r:  r  Zdcr*   )r;  r:  r,   r  0  s.    

zContext.__init__c                 C   s   t |tstd| |dkr<||krtd||||f nJ|dkrb||k rtd||||f n$||k sr||krtd||||f 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)re   rW   rx   rr   rc   __setattr__)r1   namerz   ZvminZvmaxr*   r*   r,   _set_integer_checkT  s    
zContext._set_integer_checkc                 C   s`   t |tstd| |D ]}|tvrtd| qtD ]}||vr8td| q8t| ||S )Nz%s must be a signal dictz%s is not a valid signal dict)re   r  rx   r9  KeyErrorrc   r  )r1   r  r   keyr*   r*   r,   _set_signal_dictb  s    
zContext._set_signal_dictc                 C   s   |dkr|  ||ddS |dkr0|  ||ddS |dkrH|  ||ddS |dkr`|  ||ddS |d	krx|  ||ddS |d
kr|tvrtd| t| ||S |dks|dkr| ||S |dkrt| ||S td| d S )NrF   r/   r  rD  r  r'   rG   r   r   rE   z%s: invalid rounding moder;  r:  r  z.'decimal.Context' object has no attribute '%s')r  _rounding_modesrx   rc   r  r  AttributeError)r1   r  rz   r*   r*   r,   r  m  s*    zContext.__setattr__c                 C   s   t d| d S )Nz%s cannot be deleted)r  )r1   r  r*   r*   r,   __delattr__  s    zContext.__delattr__c              	   C   sN   dd | j  D }dd | j D }| j| j| j| j| j| j| j	||ffS )Nc                 S   s   g | ]\}}|r|qS r*   r*   r~  Zsigr  r*   r*   r,   r    r.   z&Context.__reduce__.<locals>.<listcomp>c                 S   s   g | ]\}}|r|qS r*   r*   r  r*   r*   r,   r    r.   )
r;  itemsr:  r  rF   rE   rD  rG   r   r   )r1   r;  r:  r*   r*   r,   r    s    zContext.__reduce__c                 C   s|   g }| dt|   dd | j D }| dd| d  dd | j D }| dd| d  d|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S r*   r5   )r~  r   r  r*   r*   r,   r    r.   z$Context.__repr__.<locals>.<listcomp>zflags=[z, ]c                 S   s   g | ]\}}|r|j qS r*   r  )r~  r  r  r*   r*   r,   r    r.   ztraps=[))rs   varsr;  r  rt   r:  )r1   r   namesr*   r*   r,   r     s    zContext.__repr__c                 C   s   | j D ]}d| j |< qd S r   r  r1   flagr*   r*   r,   rN     s    
zContext.clear_flagsc                 C   s   | j D ]}d| j |< qd S r   r  r  r*   r*   r,   clear_traps  s    
zContext.clear_trapsc              
   C   s.   t | j| j| j| j| j| j| j| j| j		}|S r)   )
r   rF   rE   rD  rG   r   r   r;  r:  r  r1   Zncr*   r*   r,   rK    s
    zContext._shallow_copyc              
   C   s6   t | j| j| j| j| j| j| j | j	 | j
	}|S r)   )r   rF   rE   rD  rG   r   r   r;  rM   r:  r  r  r*   r*   r,   rM     s    zContext.copyc                 G   s^   t ||}|| jv r*| j| g|R  S d| j|< | j| sR| j| g|R  S ||d S re  )_condition_maprI   r  r3   r;  r:  )r1   Z	conditionZexplanationr+   errorr*   r*   r,   rj     s    


zContext._raise_errorc                 C   s
   | j t S r)   )_ignore_flagsr9  r   r*   r*   r,   r    s    zContext._ignore_all_flagsc                 G   s   | j t| | _ t|S r)   )r  rp   )r1   r;  r*   r*   r,   r    s    zContext._ignore_flagsc                 G   s8   |rt |d ttfr|d }|D ]}| j| q"d S r   )re   rq   rp   r  remove)r1   r;  r  r*   r*   r,   _regard_flags  s    zContext._regard_flagsc                 C   s   t | j| j d S re  )rW   rD  rF   r   r*   r*   r,   r     s    zContext.Etinyc                 C   s   t | j| j d S re  )rW   rG   rF   r   r*   r*   r,   r     s    zContext.Etopc                 C   s   | j }|| _ |S r)   )rE   )r1   r  rE   r*   r*   r,   rL    s    zContext._set_roundingrS   c                 C   sj   t |tr*|| ksd|v r*| tdS t|| d}| r`t|j| j	| j
 kr`| tdS || S )NrT   zAtrailing or leading whitespace and underscores are not permitted.rL   zdiagnostic info too long in NaN)re   rf   rh   rj   r   r   r   rl   r<   rF   r   r   )r1   rl  r   r*   r*   r,   create_decimal  s    zContext.create_decimalc                 C   s   t |}|| S r)   )r   rw   r   )r1   r   r   r*   r*   r,   create_decimal_from_float  s    
z!Context.create_decimal_from_floatc                 C   s   t |dd}|j| dS rW  )r   r   r1   r4  r*   r*   r,   rn   !  s    zContext.absc                 C   s8   t |dd}|j|| d}|tu r0td| n|S d S NTr   rL   Unable to convert %s to Decimal)r   r   r   rx   r1   r4  r  r   r*   r*   r,   add6  s
    zContext.addc                 C   s   t || S r)   )rf   r   r  r*   r*   r,   _applyK  s    zContext._applyc                 C   s   t |tstd| S )Nz,canonical requires a Decimal as an argument.)re   r   rx   rV  r  r*   r*   r,   rV  N  s    	
zContext.canonicalc                 C   s   t |dd}|j|| dS rW  )r   r   r1   r4  r  r*   r*   r,   r   [  s    !zContext.comparec                 C   s   t |dd}|j|| dS rW  )r   rX  r  r*   r*   r,   rX    s     zContext.compare_signalc                 C   s   t |dd}||S r   )r   rS  r  r*   r*   r,   rS    s    zContext.compare_totalc                 C   s   t |dd}||S r   )r   r\  r  r*   r*   r,   r\    s    zContext.compare_total_magc                 C   s   t |dd}| S r   )r   r   r  r*   r*   r,   r     s    
zContext.copy_absc                 C   s   t |dd}t|S r   )r   r   r  r*   r*   r,   copy_decimal  s    
zContext.copy_decimalc                 C   s   t |dd}| S r   )r   r   r  r*   r*   r,   r     s    
zContext.copy_negatec                 C   s   t |dd}||S r   )r   r]  r  r*   r*   r,   r]    s    zContext.copy_signc                 C   s8   t |dd}|j|| d}|tu r0td| n|S d S r  )r   r   r   rx   r  r*   r*   r,   divide  s
    zContext.dividec                 C   s8   t |dd}|j|| d}|tu r0td| n|S d S r  )r   r   r   rx   r  r*   r*   r,   
divide_int+  s
    zContext.divide_intc                 C   s8   t |dd}|j|| d}|tu r0td| n|S d S r  )r   r   r   rx   r  r*   r*   r,   r   B  s
    zContext.divmodc                 C   s   t |dd}|j| dS rW  )r   rX   r  r*   r*   r,   rX   W  s    zContext.expc                 C   s   t |dd}|j||| dS rW  )r   r  )r1   r4  r  rN  r*   r*   r,   r  o  s    zContext.fmac                 C   s   t |tstd| S )Nz/is_canonical requires a Decimal as an argument.)re   r   rx   r`  r  r*   r*   r,   r`    s    	
zContext.is_canonicalc                 C   s   t |dd}| S r   )r   ra  r  r*   r*   r,   ra    s    zContext.is_finitec                 C   s   t |dd}| S r   )r   rE  r  r*   r*   r,   rE    s    zContext.is_infinitec                 C   s   t |dd}| S r   )r   r   r  r*   r*   r,   r     s    zContext.is_nanc                 C   s   t |dd}|j| dS rW  )r   rd  r  r*   r*   r,   rd    s    zContext.is_normalc                 C   s   t |dd}| S r   )r   r   r  r*   r*   r,   r     s    zContext.is_qnanc                 C   s   t |dd}| S r   )r   rf  r  r*   r*   r,   rf    s    zContext.is_signedc                 C   s   t |dd}| S r   )r   r   r  r*   r*   r,   r     s    zContext.is_snanc                 C   s   t |dd}|j| dS rW  )r   rg  r  r*   r*   r,   rg    s    zContext.is_subnormalc                 C   s   t |dd}| S r   )r   rh  r  r*   r*   r,   rh  %  s    zContext.is_zeroc                 C   s   t |dd}|j| dS rW  )r   rr  r  r*   r*   r,   rr  6  s    z
Context.lnc                 C   s   t |dd}|j| dS rW  )r   ru  r  r*   r*   r,   ru  L  s    zContext.log10c                 C   s   t |dd}|j| dS rW  )r   rv  r  r*   r*   r,   rv  h  s    zContext.logbc                 C   s   t |dd}|j|| dS rW  )r   r  r  r*   r*   r,   r    s    zContext.logical_andc                 C   s   t |dd}|j| dS rW  )r   r  r  r*   r*   r,   r    s    zContext.logical_invertc                 C   s   t |dd}|j|| dS rW  )r   r  r  r*   r*   r,   r    s    zContext.logical_orc                 C   s   t |dd}|j|| dS rW  )r   r  r  r*   r*   r,   r    s    zContext.logical_xorc                 C   s   t |dd}|j|| dS rW  )r   r   r  r*   r*   r,   r     s    zContext.maxc                 C   s   t |dd}|j|| dS rW  )r   r  r  r*   r*   r,   r    s    zContext.max_magc                 C   s   t |dd}|j|| dS rW  )r   r   r  r*   r*   r,   r     s    zContext.minc                 C   s   t |dd}|j|| dS rW  )r   r  r  r*   r*   r,   r  -  s    zContext.min_magc                 C   s   t |dd}|j| dS rW  )r   r   r  r*   r*   r,   minus>  s    zContext.minusc                 C   s8   t |dd}|j|| d}|tu r0td| n|S d S r  )r   r   r   rx   r  r*   r*   r,   multiplyO  s
    zContext.multiplyc                 C   s   t |dd}|j| dS rW  )r   r  r  r*   r*   r,   r  o  s    zContext.next_minusc                 C   s   t |dd}|j| dS rW  )r   r  r  r*   r*   r,   r    s    zContext.next_plusc                 C   s   t |dd}|j|| dS rW  )r   r  r  r*   r*   r,   r    s     zContext.next_towardc                 C   s   t |dd}|j| dS rW  )r   rC  r  r*   r*   r,   rC    s    zContext.normalizec                 C   s   t |dd}|j| dS rW  )r   r  r  r*   r*   r,   r    s    /zContext.number_classc                 C   s   t |dd}|j| dS rW  )r   r   r  r*   r*   r,   plus  s    zContext.plusc                 C   s:   t |dd}|j||| d}|tu r2td| n|S d S r  )r   r?  r   rx   )r1   r4  r  r  r   r*   r*   r,   power  s
    IzContext.powerc                 C   s   t |dd}|j|| dS rW  )r   r  r  r*   r*   r,   r  e  s    7zContext.quantizec                 C   s   t dS r  r   r   r*   r*   r,   r    s    zContext.radixc                 C   s8   t |dd}|j|| d}|tu r0td| n|S d S r  )r   r   r   rx   r  r*   r*   r,   r     s
    zContext.remainderc                 C   s   t |dd}|j|| dS rW  )r   r   r  r*   r*   r,   r     s    zContext.remainder_nearc                 C   s   t |dd}|j|| dS rW  )r   r  r  r*   r*   r,   r    s    zContext.rotatec                 C   s   t |dd}||S r   )r   rF  r  r*   r*   r,   rF    s    zContext.same_quantumc                 C   s   t |dd}|j|| dS rW  )r   r  r  r*   r*   r,   r  $  s    zContext.scalebc                 C   s   t |dd}|j|| dS rW  )r   r   r  r*   r*   r,   r   7  s    zContext.shiftc                 C   s   t |dd}|j| dS rW  )r   rP  r  r*   r*   r,   rP  U  s    zContext.sqrtc                 C   s8   t |dd}|j|| d}|tu r0td| n|S d S r  )r   r   r   rx   r  r*   r*   r,   subtractu  s
    zContext.subtractc                 C   s   t |dd}|j| dS rW  )r   r   r  r*   r*   r,   r     s    zContext.to_eng_stringc                 C   s   t |dd}|j| dS rW  )r   r   r  r*   r*   r,   to_sci_string  s    zContext.to_sci_stringc                 C   s   t |dd}|j| dS rW  )r   rJ  r  r*   r*   r,   rJ    s    zContext.to_integral_exactc                 C   s   t |dd}|j| dS rW  )r   r  r  r*   r*   r,   r    s    zContext.to_integral_value)	NNNNNNNNN)N)rS   )N)Wr5   r6   r7   r  r  r  r  r  r  r   rN   r  rK  rM   r  rj   r  r  r  r   r   r   rL  r  r  rn   r  r  rV  r   rX  rS  r\  r   r  r   r]  r  r  r   rX   r  r`  ra  rE  r   rd  r   rf  r   rg  rh  rr  ru  rv  r  r  r  r  r   r  r   r  r  r  r  r  r  rC  r  r  r  r  r  r   r   r  rF  r  r   rP  r  r   r  rJ  r  r  r*   r*   r*   r,   r     s      
$

$#% #2
P:&" r   c                   @   s"   e Zd ZdZdddZdd ZdS )ro   rC   rW   rX   Nc                 C   sf   |d u rd | _ d| _d | _nFt|trD|j| _ t|j| _|j| _n|d | _ |d | _|d | _d S )Nr'   r/   r_   )rC   rW   rX   re   r   r;   r<   rQ   )r1   rz   r*   r*   r,   r    s    



z_WorkRep.__init__c                 C   s   d| j | j| jf S )Nz(%r, %r, %r)r  r   r*   r*   r,   r     s    z_WorkRep.__repr__)N)r5   r6   r7   r  r  r   r*   r*   r*   r,   ro     s   
ro   c                 C   s   | j |j k r|}| }n| }|}tt|j}tt|j}|j td|| d  }||j  d |k rpd|_||_ | jd|j |j   9  _|j |_ | |fS )Nr   r_   r/   r   )rX   rl   rf   rW   r   )r   r   rF   tmpr   Ztmp_lenZ	other_lenrX   r*   r*   r,   r     s    r   c                 C   sb   | dkrdS |dkr | d|  S t t| }t|t|d }|| k rPd S | d|   S d S )Nr'   r   rS   )rf   rn   rl   rstrip)r9   r   Zstr_nZval_nr*   r*   r,   r*  (  s    r*  c                 C   sB   | dks|dkrt dd}||kr>|||  |  d?  }}q|S )Nr'   z3Both arguments to _sqrt_nearest should be positive.r/   )rr   )r9   r4  r  r*   r*   r,   _sqrt_nearest=  s    r  c                 C   s2   d|> | |?  }}|d| |d @  |d@  |k S )Nr/   r_   r*   )r-  r   r  r   r*   r*   r,   _rshift_nearestL  s    r  c                 C   s&   t | |\}}|d| |d@  |k S )Nr_   r/   )r   )r4  r  r   r   r*   r*   r,   _div_nearestT  s    r  r$  c           	   	   C   s   | | }d}||kr(t ||| > |ksD||krxt ||| ? |krxt|| d> |t||t||  | }|d7 }qtdtt| d|   }t||}t||}t|d ddD ]}t||t|| | }qt|| |S )Nr'   r/   r]   r   )rn   r  r  r  rW   rl   rf   r  )	r-  MLr0  RTZyshiftwr   r*   r*   r,   _ilog\  s"    


r  c           
      C   s   |d7 }t t| }|| || dk }|dkrd| }|| | }|dkrZ| d| 9 } nt| d|  } t| |}t|}t|| |}|| }	nd}t|d|  }	t|	| dS Nr_   r/   r'   r   r(  )rl   rf   r  r  _log10_digits)
rN  r   r,  rO  r   r  r   log_dZlog_10Zlog_tenpowerr*   r*   r,   rt    s     

rt  c           	      C   s   |d7 }t t| }|| || dk }|dkrr|| | }|dkrR| d| 9 } nt| d|  } t| d| }nd}|rt tt|d }|| dkrt|t||  d| }qd}nd}t|| dS r   )rl   rf   r  r  rn   r  )	rN  r   r,  rO  r   r   r  r>  Z	f_log_tenr*   r*   r,   rp    s"    rp  c                   @   s   e Zd Zdd Zdd ZdS )_Log10Memoizec                 C   s
   d| _ d S )NZ/23025850929940456840179914546843642076011014886)r~   r   r*   r*   r,   r    s    z_Log10Memoize.__init__c                 C   s   |dk rt d|t| jkrd}d|| d  }tttd| |d}|| d  d| krbql|d7 }q"|dd d | _t| jd |d	  S )
Nr'   zp should be nonnegativer]   r   r_   r(  rS   r   r/   )rr   rl   r~   rf   r  r  r  rW   )r1   r,  r>  r  r~   r*   r*   r,   	getdigits  s    	
z_Log10Memoize.getdigitsN)r5   r6   r7   r  r  r*   r*   r*   r,   r    s   r  c           	      C   s   t | |> | }tdtt| d|   }t| |}||> }t|d ddD ]}t| ||  || }qPt|d ddD ]"}||d > }t|||  |}q||| S )Nr  r]   r/   r'   r   r_   )r)  rW   rl   rf   r  r  )	r-  r  r  r  r  r0  ZMshiftr   r   r*   r*   r,   _iexp  s    
r  c           	      C   s   |d7 }t d|tt|  d }|| }|| }|dkrH| d|  }n| d|   }t|t|\}}t|d| }tt|d| d|| d fS )Nr_   r'   r/   r   i  r]   )r   rl   rf   r   r  r  r  )	rN  r   r,  r>  r   r   ZcshiftZquotr3  r*   r*   r,   r^  $  s    r^  c                 C   s   t tt|| }t| ||| d }|| }|dkrJ|| d|  }nt|| d|  }|dkrt t| | dk|dkkrd|d  d d|  }	}
qd| d |  }	}
n,t||d  |d \}	}
t|	d}	|
d7 }
|	|
fS )Nr/   r'   r   )rl   rf   rn   rp  r  r^  )r.  r/  r1  r2  r,  r  Zlxcr   Zpcr   rX   r*   r*   r,   r8  H  s    
r8  r(  F   5   (      ri     r   r   )	r   2345678rD   c                 C   s0   | dkrt dt| }dt| ||d   S )Nr'   z0The argument to _log10_lb should be nonnegative.r(  )rr   rf   rl   )rN  Z
correctionZstr_cr*   r*   r,   r+  r  s    r+  c                 C   sL   t | tr| S t | tr t| S |r8t | tr8t| S |rHtd|  tS )Nr  )re   r   rW   rv   rw   rx   r   )r   r   Zallow_floatr*   r*   r,   r   }  s    


r   c                 C   s   t |tr| |fS t |tjrR| jsDt| jtt| j	|j
 | j} | t|jfS |rrt |tjrr|jdkrr|j}t |trt }|rd|jt< n|td | t|fS ttfS )Nr'   r/   rb   )re   r   _numbersZRationalrR   r:   r;   rf   rW   r<   denominatorrQ   	numeratorZComplexr   r   rv   r   r;  r   rj   rw   r   )r1   r   r   r2   r*   r*   r,   r     s(    

r   r'  i?B i)rF   rE   r:  r;  rG   rD  r   r   r`   )rF   rE   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 | }|d u rtd|  | }|d }|d }|d d u|d< |d rv|d urbtd|  |d urvtd|  |p|d|d< |pd|d< |d	 d u rd
|d	< t|d pd|d< |d d urt|d |d< |d dkr|d d u s|d dv rd|d< |d dkrfd|d< |d u r&t }|d d ur@td|  |d |d< |d |d< |d |d< n*|d d u 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:  >rC   rV   minimumwidthrS   r  r'   r  ZgGnr/   r9   r  thousands_sepzJExplicit thousands separator conflicts with 'n' type in format specifier: groupingdecimal_pointrU   r]   r   )_parse_format_specifier_regexmatchrr   	groupdictrW   _locale
localeconv)format_specr  r{   Zformat_dictr  r  r*   r*   r,   r    sT    

r  c           	      C   s   |d }|d }||t |  t |  }|d }|dkrF| | | }nj|dkr\||  | }nT|dkrr| | | }n>|dkrt |d }|d | |  | ||d   }ntd	|S )
Nr  r  r  <r  =^r_   zUnrecognised alignment field)rl   rr   )	rC   r  r  r  r  Zpaddingr  r   Zhalfr*   r*   r,   r  m  s    "r  c                 C   sp   ddl m}m} | sg S | d dkrJt| dkrJ|| d d || d S | d tjkrd| d d S tdd S )Nr'   )chainrepeatr   r_   r   z unrecognised format for grouping)	itertoolsr'  r(  rl   r!  CHAR_MAXrr   )r  r'  r(  r*   r*   r,   _group_lengths  s    r+  c                 C   s   |d }|d }g }t |D ]}|dkr0tdttt| |d|}|d|t|   | | d    | d |  } ||8 }| s|dkr q|t|8 }qtt| |d}|d|t|   | | d    |t|S )Nr  r  r'   zgroup length should be positiver/   rS   )r+  rr   r   r   rl   rs   rt   reversed)r~   r  	min_widthsepr  groupsrO  r*   r*   r,   _insert_thousands_sep  s     $$r0  c                 C   s$   | rdS |d dv r|d S dS d S )NrV   rC   z +rU   r*   )is_negativer  r*   r*   r,   r    s
    r  c                 C   s   t | |}|s|d r"|d | }|dks6|d dv r\ddddd|d  }|d	||7 }|d d
krp|d
7 }|d r|d t| t| }nd}t|||}t||| |S )NZaltr  r'   r  r  r   r   )r   r   r  r  z{0}{1:+}r  r  r  )r  formatrl   r0  r  )r1  r|   r}   rX   r  rC   Zecharr-  r*   r*   r,   r    s    
r  ZInfz-Infr   r   r_   )N)F)r'   )r$  )r$  )FF)F)N)r/   )y__all__r5   Z	__xname____version__Z__libmpdec_version__Zmathr   Znumbersr  syscollectionsr(   Z_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   r9  r  r  ZcontextvarsZ
ContextVarrH   r   r   r   rc   r   r:   NumberregisterrO   r   ro   r   rW   r   r)  r*  r  r  r  r  rt  rp  r  r  r  r  r^  r8  r+  r   r   r   r   r   recompileVERBOSE
IGNORECASEr  rg   r  r  DOTALLr  Zlocaler!  r  r  r+  r0  r  r  ro  rn  r>   rZ  r6  rY  rA   	hash_infomodulusr   r  r   r   r   r   r   r*   r*   r*   r,   <module>s   s`  #

&


.                          
             ^

0",#
%$+


*


P
%
)