o
    IAfD}                 
   @   sn  	 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y3   d	d
 ZY nw dZdZdZdZdZdZdZdZdZdZe	jdkrTd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w 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_CONTEXTVARZdecimalz1.70z2.4.2    N)
namedtupler   zsign digits exponentc                  G      | S N )argsr*   r*   !/usr/lib/python3.10/_pydecimal.py<lambda>   s    r-   r   r   r   r   r   r   r   r   Tl    l   NZolNZoi@Ti   c                   @      e Zd Z	 dd ZdS )r   c                 G   s   d S r)   r*   selfcontextr+   r*   r*   r,   handle      zDecimalException.handleN__name__
__module____qualname__r3   r*   r*   r*   r,   r      s    r   c                   @      e Zd ZdS )r   Nr6   r7   r8   r*   r*   r*   r,   r          r   c                   @   r/   )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.handleNr5   r*   r*   r*   r,   r	      s    r	   c                   @   r/   )r   c                 G      t S r)   rA   r0   r*   r*   r,   r3     r4   zConversionSyntax.handleNr5   r*   r*   r*   r,   r      s    r   c                   @   r/   )r
   c                 G   s   t | S r)   )_SignedInfinityr1   r2   signr+   r*   r*   r,   r3     s   zDivisionByZero.handleNr5   r*   r*   r*   r,   r
   
  s    r
   c                   @   r/   )r   c                 G   rC   r)   rD   r0   r*   r*   r,   r3   "  r4   zDivisionImpossible.handleNr5   r*   r*   r*   r,   r         r   c                   @   r/   )r   c                 G   rC   r)   rD   r0   r*   r*   r,   r3   -  r4   zDivisionUndefined.handleNr5   r*   r*   r*   r,   r   %  rH   r   c                   @   r9   )r   Nr:   r*   r*   r*   r,   r   0  r;   r   c                   @   r/   )r   c                 G   rC   r)   rD   r0   r*   r*   r,   r3   G  r4   zInvalidContext.handleNr5   r*   r*   r*   r,   r   <  s    
r   c                   @   r9   )r   Nr:   r*   r*   r*   r,   r   J  r;   r   c                   @   r9   )r   Nr:   r*   r*   r*   r,   r   V  r;   r   c                   @   r/   )r   c                 G   s   |j ttttfv rt| S |dkr)|j tkrt| S t|d|j |j	|j d S |dkrE|j t
kr6t| S t|d|j |j	|j d S d S )Nr&   9r.   )roundingr   r   r   r   rE   r   r=   precEmaxr   rF   r*   r*   r,   r3   w  s"   

zOverflow.handleNr5   r*   r*   r*   r,   r   a  s    r   c                   @   r9   )r   Nr:   r*   r*   r*   r,   r     r;   r   c                   @   r9   )r   Nr:   r*   r*   r*   r,   r     r;   r   Zdecimal_contextc                  C   s4   	 zt  W S  ty   t } t |  |  Y S w 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_flagsrM   rP   rQ   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                
   @   sl  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dd8d9Zdd:d;Z e Z!dd<d=Z"d>d? Z#dd@dAZ$ddBdCZ%ddDdEZ&ddFdGZ'ddHdIZ(ddJdKZ)ddLdMZ*ddNdO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?ddqdrZ@dsdt ZAdudv ZBddwdxZCddydzZDd{d| ZEdd}d~ZFdddZGdddZHdddZIdddZJdd ZKdd ZLdddZMdddZNeNZOdddZPdddZQdddZRdd ZSdd ZTdd ZUdd ZVdddZWdddZXdddZYdd ZZdd Z[dddZ\dddZ]dd Z^dd Z_dd Z`dd ZadddZbdd Zcdd Zddd ZedddZfdd Zgdd ZhdddZiddĄ ZjdddƄZkdddȄZlddʄ Zmdd̄ Znddd΄ZodddЄZpddd҄ZqdddԄZrdddքZsddd؄ZtdddڄZuddd܄ZvdddބZwdddZxdd ZydddZzdddZ{dddZ|dd Z}dd Z~dd ZdddZdS )r   )_expr?   r>   _is_special0Nc                 C   s~  	 t | }t|trt| dd}|d u r(|d u r t }|t	d| S |
ddkr3d|_nd|_|
d}|d urd|
d	pEd}t|
d
pMd}tt|| |_|t| |_d|_|S |
d}|d urtt|prdd|_|
drd|_n
d|_nd|_d|_d|_|S t|tr|dkrd|_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rt|dkrtdt|d tr|d dv std|d |_|d dkrd|_|d |_d|_|S g }	|d D ]+}
t|
trMd|
  kr9dkrMn td|	sF|
dkrK|	|
 q%td|d dv rkdtt|	|_|d |_d|_|S t|d trdtt|	p|dg|_|d |_d|_|S tdt|tr|d u rt }|td t|}|j|_|j|_|j|_|j|_|S t d| )N_ zInvalid literal for Decimal: %rrG   -r.   r&   intZfracexprX   FdiagsignalNr<   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.r<   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>   r\   r?   lenrV   rW   lstripabsr   _WorkReprG   r]   listtuple
ValueErrorappendjoinmapfloatr   
from_float	TypeError)clsvaluer2   r1   mintpartfracpartr]   r^   digitsZdigitr*   r*   r,   ri   
  s   









&





zDecimal.__new__c                 C   s   	 t |tr|dkrdnd}d}tt|}n=t |trPt|s&t|r,| t|S t	d|dkr7d}nd}t|
 \}}| d }t|d|  }ntdt||| }| tu ra|S | |S )Nr&   r.   g      ?   zargument must be int or float.)rj   r\   rk   rs   r{   _mathisinfisnanreprcopysignas_integer_ratio
bit_lengthr}   r=   r   )r~   frG   kcoeffr<   dresultr*   r*   r,   r|     s&   

zDecimal.from_floatc                 C   s*   	 | j r| j}|dkrdS |dkrdS dS )Nr<   r.   r`   rd   r&   )rW   rV   )r1   r]   r*   r*   r,   _isnan  s   zDecimal._isnanc                 C   s   	 | j dkr| jrdS dS dS )Nra   r.   r&   )rV   r>   r1   r*   r*   r,   _isinfinity  s   
zDecimal._isinfinityc                 C   s~   	 |   }|d u rd}n|  }|s|r=|d u rt }|dkr&|td| S |dkr1|td|S |r8| |S ||S dS )NFrd   sNaNr&   )r   r   ro   r	   r@   )r1   otherr2   self_is_nanother_is_nanr*   r*   r,   _check_nans  s(   	

zDecimal._check_nansc                 C   sx   	 |d u rt  }| js|jr:|  r|td| S | r$|td|S |  r/|td| S | r:|td|S dS )Nzcomparison involving sNaNzcomparison involving NaNr&   )r   rW   is_snanro   r	   is_qnanr1   r   r2   r*   r*   r,   _compare_check_nans	  s2   
zDecimal._compare_check_nansc                 C   s   	 | j p| jdkS NrX   rW   r?   r   r*   r*   r,   __bool__*  s   zDecimal.__bool__c                 C   s  	 | j s|j r|  }| }||krdS ||k rdS dS | s)|s#dS d|j  S |s0d| j S |j| jk r8dS | j|jk r@dS |  }| }||krw| jd| j|j   }|jd|j| j   }||krhdS ||k rrd| j  S d| j S ||krd| j S d| j  S )Nr&   r   r.   rX   )rW   r   r>   adjustedr?   rV   )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   rB   r*   r*   r,   __lt__y     zDecimal.__lt__c                 C   s<   t | |\} }|tu r|S | ||}|rdS | |dkS r   r   r   r*   r*   r,   __le__  r   zDecimal.__le__c                 C   s<   t | |\} }|tu r|S | ||}|rdS | |dkS r   r   r   r*   r*   r,   __gt__  r   zDecimal.__gt__c                 C   s<   t | |\} }|tu r|S | ||}|rdS | |dkS r   r   r   r*   r*   r,   __ge__  r   zDecimal.__ge__c                 C   s@   	 t |dd}| js|r|jr| ||}|r|S t| |S NTraiseit)_convert_otherrW   r   r   r   r   r*   r*   r,   compare  s   zDecimal.comparec                 C   s   	 | j r|  rtd|  rt| S | jrt S tS | jdkr*t	d| jt
}nt	t| j t
}t| j| t
 }| dkrA|n| }|dkrJdS |S )Nz"Cannot hash a signaling NaN value.r&   
   r   )rW   r   r}   is_nanrh   __hash__r>   _PyHASH_INFrV   pow_PyHASH_MODULUS_PyHASH_10INVr\   r?   )r1   Zexp_hashZhash_rB   r*   r*   r,   r     s   

zDecimal.__hash__c                 C   s   	 t | jttt| j| jS r)   )r   r>   rv   rz   r\   r?   rV   r   r*   r*   r,   as_tuple  s   zDecimal.as_tuplec                 C   s   	 | j r|  rtdtd| sdS t| j}| jdkr)|d| j  d}}n@| j }|dkrI|d dkrI|d }|d8 }|dkrI|d dks7| j }t|| @  d |}|rc||L }||8 }d| |> }| j	ro| }||fS )Nz#cannot convert NaN to integer ratioz(cannot convert Infinity to integer ratiorc   r&   r   r.   r   )
rW   r   rw   OverflowErrorr\   r?   rV   minr   r>   )r1   r<   r   Zd5Zd2Zshift2r*   r*   r,   r     s0   

zDecimal.as_integer_ratioc                 C   s   	 dt |  S )NzDecimal('%s'))rk   r   r*   r*   r,   __repr__  s   zDecimal.__repr__Fc           	      C   s`  	 ddg| j  }| jr'| jdkr|d S | jdkr |d | j S |d | j S | jt| j }| jdkr;|d	kr;|}n|s@d
}n| jdkrN|d
 d d
 }n|d
 d d
 }|dkrgd}dd|   | j }n&|t| jkr}| jd|t| j   }d}n| jd | }d| j|d   }||krd}n|d u rt }ddg|j d||   }|| | | S )NrZ   r[   ra   ZInfinityr<   NaNr   r&   r.   rX   rb   .eEz%+d)r>   rW   rV   r?   rq   r   capitals)	r1   engr2   rG   
leftdigitsdotplacer   r   r]   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   sT   	 | j r| j|d}|r|S |d u rt }| s!|jtkr!|  }n|  }||S NrQ   )rW   r   r   rJ   r   copy_abscopy_negate_fixr1   r2   rB   r*   r*   r,   __neg__D  s   

zDecimal.__neg__c                 C   sT   	 | j r| j|d}|r|S |d u rt }| s!|jtkr!|  }nt| }||S r   )rW   r   r   rJ   r   r   r   r   r   r*   r*   r,   __pos__Z  s   

zDecimal.__pos__Tc                 C   sN   	 |s|   S | jr| j|d}|r|S | jr| j|d}|S | j|d}|S r   )r   rW   r   r>   r   r   )r1   roundr2   rB   r*   r*   r,   __abs__o  s   zDecimal.__abs__c           
      C   s^  	 t |}|tu r|S |d u rt }| js|jrB| ||}|r"|S |  r:| j|jkr6| r6|tdS t	| S | rBt	|S t
| j|j}d}|jtkrX| j|jkrXd}| st|stt
| j|j}|rgd}t|d|}||}|S | st||j|j d }|||j}||}|S |st|| 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.   rX   )r&   r&   )r   r   r   rW   r   r   r>   ro   r	   r   r   rV   rJ   r   r=   r   maxrK   _rescalert   
_normalizerG   r\   r]   )
r1   r   r2   rB   r]   ZnegativezerorG   op1op2r   r*   r*   r,   __add__  s~   






zDecimal.__add__c                 C   sJ   	 t |}|tu r|S | js|jr| j||d}|r|S | j| |dS r   )r   r   rW   r   r   r   r   r*   r*   r,   __sub__  s   zDecimal.__sub__c                 C   $   	 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rH| ||}|r(|S |  r8|s4|tdS t	| S | rH| sD|tdS t	| S | j
|j
 }| rR|s_t|d|}||}|S | jdkrrt||j|}||}|S |jdkrt|| j|}||}|S t| }t|}t|t|j|j |}||}|S )Nz(+-)INF * 0z0 * (+-)INFrX   1)r   r   r   r>   rW   r   r   ro   r	   rE   rV   r=   r   r?   rt   rk   r\   )r1   r   r2   Z
resultsignrB   Z	resultexpr   r   r*   r*   r,   __mul__  sJ   





zDecimal.__mul__c                 C   s  	 t |}|tu rtS |d u rt }| j|jA }| js|jrP| ||}|r(|S |  r6| r6|tdS |  r>t	| S | rP|t
d t|d| S |sa| sZ|tdS |td|S | sl| j|j }d}nnt|jt| j |j d }| j|j | }t| }t|}	|dkrt|jd|  |	j\}}
nt|j|	jd|   \}}
|
r|d	 dkr|d7 }n"| j|j }||k r|d dkr|d }|d7 }||k r|d dkst|t||}||S )
Nz(+-)INF/(+-)INFzDivision by infinityrX   z0 / 0zx / 0r&   r.   r   r   )r   r   r   r>   rW   r   r   ro   r	   rE   r   r=   Etinyr   r
   rV   rq   r?   rK   rt   divmodr\   rk   r   )r1   r   r2   rG   rB   r]   r   shiftr   r   	remainder	ideal_expr*   r*   r,   __truediv__,  sV   
zDecimal.__truediv__c                 C   s  	 | j |j A }| r| j}nt| j|j}|  |  }| r(| s(|dkr5t|dd| ||jfS ||jkrt	| }t	|}|j
|j
krV| jd|j
|j
  9  _n| jd|j
|j
  9  _t|j|j\}}	|d|j k rt|t|dt| j t|	|fS |td}
|
|
fS )Nr   rX   r&   r   z%quotient too large in //, % or divmod)r>   r   rV   r   r   r=   r   rJ   rK   rt   r]   r\   r   rk   ro   r   )r1   r   r2   rG   r   expdiffr   r   qrrB   r*   r*   r,   _divideg  s2   

zDecimal._dividec                 C   r   r   )r   r   r   r   r*   r*   r,   __rtruediv__  
   zDecimal.__rtruediv__c                 C   s   	 t |}|tu r|S |d u rt }| ||}|r||fS | j|jA }|  r@| r6|td}||fS t| |tdfS |s[| sN|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   ro   r	   rE   r   r
   r   r   )r1   r   r2   rB   rG   Zquotientr   r*   r*   r,   
__divmod__  s6   


zDecimal.__divmod__c                 C   r   r   )r   r   r   r   r*   r*   r,   __rdivmod__  r   zDecimal.__rdivmod__c                 C   s   	 t |}|tu r|S |d u rt }| ||}|r|S |  r&|tdS |s6| r0|tdS |tdS | ||d }|	|}|S )Nr   r   z0 % 0r.   )
r   r   r   r   r   ro   r	   r   r   r   )r1   r   r2   rB   r   r*   r*   r,   __mod__  s$   
zDecimal.__mod__c                 C   r   r   )r   r   r   r   r*   r*   r,   __rmod__  r   zDecimal.__rmod__c                 C   s  	 |d u rt  }t|dd}| ||}|r|S |  r"|tdS |s2| r,|tdS |tdS | r?t| }||S t	| j
|j
}| sTt| jd|}||S |  |  }||jd krh|tS |dkrx| ||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)rX   r.   r   r   rd   r&   )r   r   r   r   ro   r	   r   r   r   r   rV   r=   r>   r   rK   r   r   rJ   rt   r]   r\   r   rk   )r1   r   r2   rB   ideal_exponentr   r   r   r   r   rG   r*   r*   r,   remainder_near  sb   






zDecimal.remainder_nearc                 C   s   	 t |}|tu r|S |d u rt }| ||}|r|S |  r2| r*|tdS t| j|jA  S |sG| rA|t	d| j|jA S |t
dS | ||d S )Nz
INF // INFr   z0 // 0r&   )r   r   r   r   r   ro   r	   rE   r>   r
   r   r   r   r*   r*   r,   __floordiv__'  s(   
zDecimal.__floordiv__c                 C   r   r   )r   r   r   r   r*   r*   r,   __rfloordiv__C  r   zDecimal.__rfloordiv__c                 C   s@   	 |   r|  rtd| jrdnd}t|S t| }t|S )Nz%Cannot convert signaling NaN to floatz-nannan)r   r   rw   r>   rk   r{   r1   sr*   r*   r,   	__float__J  s   zDecimal.__float__c                 C   sp   	 | j r|  rtd|  rtdd| j }| jdkr*|t| j d| j  S |t| jd | j p5d S )NzCannot convert NaN to integerz"Cannot convert infinity to integerr   r&   r   rX   )	rW   r   rw   r   r   r>   rV   r\   r?   r   r*   r*   r,   __int__T  s   

zDecimal.__int__c                 C   r(   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   r(   r)   r*   r   r*   r*   r,   	conjugatek  r4   zDecimal.conjugatec                 C   s   t t| S r)   )complexr{   r   r*   r*   r,   __complex__n     zDecimal.__complex__c                 C   sT   	 | j }|j|j }t||kr&|t|| d  d}t| j|| jdS t| S )NrX   T)	r?   rK   clamprq   rr   r=   r>   rV   r   )r1   r2   payloadZmax_payload_lenr*   r*   r,   r@   q  s   zDecimal._fix_nanc                 C   sB  	 | j r|  r| |S t| S | }| }| sA|j|g|j }tt	| j
||}|| j
kr=|t t| jd|S t| S t| j| j
 |j }||krd|td| j}|t |t |S ||k }|rl|}| j
|k rt| j| j
 | }	|	dk rt| jd|d } d}	| j|j }
|
| |	}| jd |	 pd}|dkrt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r| j
|kr|t | jd| j
|   }t| j||S t| S )NrX   
above Emaxr&   r   r.   r   )rW   r   r@   r   r   EtoprL   r  r   r   rV   ro   r   r=   r>   rq   r?   rK   r   r   r   _pick_rounding_functionrJ   rk   r\   r   r   )r1   r2   r   r	  exp_maxZnew_expZexp_minrB   Zself_is_subnormalr   Zrounding_methodchangedr   r   r*   r*   r,   r   }  sp   	













zDecimal._fixc                 C   s   	 t | j|r	dS dS )Nr&   r   )
_all_zerosr?   r1   rK   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 )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 )Nr   _exact_halfr?   r  r  r*   r*   r,   _round_half_down  s   
zDecimal._round_half_downc                 C   s6   	 t | j|r|dks| j|d  dv rdS | |S )Nr&   r.   02468r   r  r  r*   r*   r,   _round_half_even  s
   
zDecimal._round_half_evenc                 C   s   	 | j r	| |S | | S r)   r>   r  r  r*   r*   r,   _round_ceiling     
zDecimal._round_ceilingc                 C   s   	 | j s	| |S | | S r)   r  r  r*   r*   r,   _round_floor  r  zDecimal._round_floorc                 C   s.   	 |r| j |d  dvr| |S | | 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rt |tstdtdd| }| |S | jr)|  r%tdtdt| 	dt
S )Nz+Second argument to round should be integralr&   r   cannot round a NaNcannot round an infinity)rj   r\   r}   r=   quantizerW   r   rw   r   r   r   )r1   r<   r]   r*   r*   r,   	__round__&  s   .

zDecimal.__round__c                 C   0   	 | j r|  rtdtdt| dtS Nr  r  r&   )rW   r   rw   r   r\   r   r   r   r*   r*   r,   	__floor__d     zDecimal.__floor__c                 C   r   r!  )rW   r   rw   r   r\   r   r   r   r*   r*   r,   __ceil__s  r#  zDecimal.__ceil__c                 C   s  	 t |dd}t |dd}| js|jrn|d u rt }| jdkr&|td| S |jdkr2|td|S | jdkr:| }nL|jdkrB|}nD| jdkrX|sO|tdS t| j|jA  }n.|jdkrm| se|tdS t| j|jA  }nt| j|jA t	t
| jt
|j | j|j }|||S )	NTr   r`   r   r<   ra   zINF * 0 in fmaz0 * INF in fma)r   rW   r   rV   ro   r	   rE   r>   r=   rk   r\   r?   r   )r1   r   thirdr2   productr*   r*   r,   fma  s@   







zDecimal.fmac                 C   s  	 t |}|tu r|S t |}|tu r|S |d u rt }|  }| }| }|s.|s.|rb|dkr9|td| S |dkrD|td|S |dkrO|td|S |rV| |S |r]||S ||S |  rn| rn| st|tdS |dk r~|tdS |s|tdS | |j	kr|tdS |s| s|tdS |
 rd}n| j}tt|}t|  }t| }	|j| td	|j| | }t|	jD ]}
t|d	|}qt||	j|}t|t|dS )
Nrd   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   ro   r	   r@   
_isintegerr   rK   _isevenr>   rs   r\   rt   to_integral_valuer   r]   ranger=   rk   )r1   r   modulor2   r   r   Zmodulo_is_nanrG   baseexponentir*   r*   r,   _power_modulo  s   


zDecimal._power_moduloc                 C   sT  	 t | }|j|j}}|d dkr |d }|d7 }|d dkst |}|j|j}}|d dkr?|d }|d7 }|d dks1|dkr||9 }|d dkr[|d }|d7 }|d dksM|dk rad S |d|  }	|jdkro|	 }	| r|jdkr| jt| }
t|	|
 |d }nd}tddd|  |	| S |jdkrg|d }|dv r|| @ |krd S t	|d }|d d }|t
t|krd S t|| |}t|| |}|d u s|d u rd S ||krd S d	| }nj|d	krOt	|d
 d }td	| |\}}|rd S |d	 dkr|d	 }|d8 }|d	 dks	|d d }|t
t|kr)d S t|| |}t|| |}|d u sA|d u rCd S ||krJd S d| }nd S |d| krZd S | | }tdt||S |dkrv|d|  d}}n|dkrt
tt|| | krd S t	|}|dkrt
tt|| | krd S |d|  }}|d |d   krdkrn n|d }|d }|d |d   krdksn |d	 |d	   krdkrn n|d	 }|d	 }|d	 |d	   krdksn |dkrW|dkr||krd S t||\}}|dkr!d S dt	| |  > }	 t|||d  \}}||kr=n||d  | | }q,||krS|dksUd S |}|dkri||d t| krid S || }||9 }|d| krzd S t|}| r|jdkr| jt| }
t||
 |t
| }nd}td|d|  || S )Nr   r&   r.   r   rX   )rd            ]   A   r      rb   rd   Td   )rt   r\   r]   rG   r(  r>   rV   r   r=   _nbitsrq   rk   _decimal_lshift_exactr   rs   	_log10_lb)r1   r   pxxcxeyycyer.  r   ZzerosZ
last_digitr   Zemaxr   r   r<   Zxc_bitsremar   r   Zstr_xcr*   r*   r,   _power_exact  s   9






&&$"$"


 zDecimal._power_exactc                 C   s*  	 |d ur|  |||S t|}|tu r|S |d u rt }| ||}|r'|S |s3| s1|tdS tS d}| jdkrQ|	 rE|
 sDd}n| rM|tdS |  } | sb|jdkr^t|ddS t| S |  ru|jdkrot| S t|ddS | tkr|	 r|jdkrd}n||jkr|j}nt|}| j| }|d|j k rd|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rt|d|jd }n| }|
tt| krt|d|d }|d u r@| ||jd }|d ur@|dkr>td|j|j}d}	|d u r|j}t| }|j|j}}t|}|j|j}}|jdkrg| }d	}	 t|||||| \}}|d
dtt|| d    rn|d	7 }qjt|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|S |$|}|S )Nz0 ** 0r&   r.   z+x ** y with x negative and y not an integerrX   r   FTrb   r   r   r  )*r0  r   r   r   r   ro   r	   _Oner>   r(  r)  r   r=   rE   r   rK   r\   rV   r   r   r   _log10_exp_boundrq   rk   rL   r   rD  r?   rt   r]   rG   _dpowerrR   rS   _signalstrapsr   flagsr   r   r   r   )r1   r   r,  r2   rB   Zresult_signZ
multiplierr]   Zself_adjexactZboundr   r;  r<  r=  r>  r?  r@  rA  extrar   r   Z
newcontext	exceptionr*   r*   r,   __pow__  s   














"




zDecimal.__pow__c                 C   r   r   )r   r   rN  r   r*   r*   r,   __rpow__	  r   zDecimal.__rpow__c                 C   s   	 |d u rt  }| jr| j|d}|r|S | |}| r |S |s)t|jddS |j| g|j	 }t
|j}|j}|j|d  dkr]||k r]|d7 }|d8 }|j|d  dkr]||k sHt|j|jd | |S )NrQ   rX   r&   r.   )r   rW   r   r   r   r=   r>   rL   r	  r  rq   r?   rV   )r1   r2   rB   dupr  endr]   r*   r*   r,   	normalize	  s(   

zDecimal.normalizec                 C   s  	 t |dd}|d u rt }|d u r|j}| js|jr?| ||}|r%|S | s-|  r?| r9|  r9t| S |tdS |	 |j
  krM|jksTn |tdS | sct| jd|j
}||S |  }||jkrr|tdS ||j
 d |jkr|tdS | |j
|}| |jkr|tdS t|j|jkr|tdS |r| |jk r|t |j
| j
kr|| kr|t |t ||}|S )	NTr   zquantize with one INFz)target exponent out of bounds in quantizerX   z9exponent of quantize result too large for current contextr.   z7quantize result has too many digits for current context)r   r   rJ   rW   r   r   r   ro   r	   r   rV   rL   r=   r>   r   r   rK   r   rq   r?   Eminr   r   r   )r1   r]   rJ   r2   rB   r   r*   r*   r,   r  	  sb   





zDecimal.quantizec                 C   sF   	 t |dd}| js|jr|  r| p|  o| S | j|jkS r   )r   rW   r   is_infiniterV   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|   |S t| j| j | }|dk r>t| jd|d } d}| j| }|| |}| jd | pPd}|dkr]tt	|d }t| j||S )NrX   r&   r   r.   )
rW   r   r=   r>   rV   r?   rq   r
  rk   r\   )r1   r]   rJ   r   Zthis_functionr  r   r*   r*   r,   r   4
  s&   



zDecimal._rescalec                 C   sh   	 |dkr	t d| js| st| S | |  d | |}| |  kr2|| d | |}|S )Nr&   z'argument should be at least 1 in _roundr.   )rw   rW   r   r   r   )r1   placesrJ   rB   r*   r*   r,   _roundV
  s   	
zDecimal._roundc                 C   s   	 | j r| j|d}|r|S t| S | jdkrt| S | s$t| jddS |d u r+t }|d u r2|j}| d|}|| krA|	t
 |	t |S )NrQ   r&   rX   )rW   r   r   rV   r=   r>   r   rJ   r   ro   r   r   r1   rJ   r2   rB   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}|r|S t| S | jdkr)t| S | d|S )NrQ   r&   )r   rJ   rW   r   r   rV   r   rX  r*   r*   r,   r*  
  s   
zDecimal.to_integral_valuec                 C   s  	 |d u rt  }| jr"| j|d}|r|S |  r"| jdkr"t| S | s3t| jd| jd }||S | jdkr>|	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rn|| d? }q|	o|| |k}	|	r|dkr|d|  }n|d|  9 }||7 }n
|d
 dkr|d7 }tdt||}| }|t}||}||_|S )NrQ   r&   rX   rd   r.   zsqrt(-x), x > 0r   r7  Tr   )r   rW   r   r   r>   r   r=   rV   r   ro   r	   rK   rt   r]   r\   rq   r?   r   rk   _shallow_copy_set_roundingr   rJ   )r1   r2   rB   rK   opr   clr   rK  r   r<   r   rJ   r*   r*   r,   sqrt
  sd   








zDecimal.sqrtc                 C   s   	 t |dd}|d u rt }| js|jr@|  }| }|s |r@|dkr-|dkr-| |S |dkr:|dkr:||S | ||S | |}|dkrN| |}|dkrU|}n| }||S NTr   r.   r&   r   r   r   rW   r   r   r   r   compare_totalr1   r   r2   ZsnZonr]  rB   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r-|dkr-| |S |dkr:|dkr:||S | ||S | |}|dkrN| |}|dkrU| }n|}||S r`  ra  rc  r*   r*   r,   r   *  s(   




zDecimal.minc                 C   s:   	 | j rdS | jdkrdS | j| jd  }|dt| kS )NFr&   TrX   )rW   rV   r?   rq   )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  )rV   r?   r   r*   r*   r,   r)  U  s   zDecimal._isevenc                 C   s.   	 z| j t| j d W S  ty   Y dS w )Nr.   r&   )rV   rq   r?   r}   r   r*   r*   r,   r   [  s   zDecimal.adjustedc                 C   s   	 | S r)   r*   r   r*   r*   r,   	canonicalc     zDecimal.canonicalc                 C   s0   	 t |dd}| ||}|r|S | j||dS NTr   rQ   )r   r   r   r   r*   r*   r,   compare_signalk  s   zDecimal.compare_signalc                 C   sR  	 t |dd}| jr|jstS | js|jrtS | j}|  }| }|s&|r||krPt| j| jf}t|j|jf}||k rD|rBtS tS ||krN|rLtS tS tS |rk|dkrXtS |dkr^tS |dkrdtS |dkrjtS n|dkrqtS |dkrwtS |dkr}tS |dkrtS | |k rtS | |krtS | j|jk r|rtS tS | j|jkr|rtS tS tS )NTr   r.   rd   )	r   r>   _NegativeOnerE  r   rq   r?   _ZerorV   )r1   r   r2   rG   Zself_nanZ	other_nanZself_keyZ	other_keyr*   r*   r,   rb  w  sj   zDecimal.compare_totalc                 C   s(   	 t |dd}|  }| }||S r   )r   r   rb  )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?   rV   rW   r   r*   r*   r,   r        zDecimal.copy_absc                 C   s0   	 | j rtd| j| j| jS td| j| j| jS )Nr&   r.   )r>   r=   r?   rV   rW   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?   rV   rW   r   r*   r*   r,   	copy_sign  s
   
zDecimal.copy_signc                 C   s  	 |d u rt  }| j|d}|r|S |  dkrtS | stS |  dkr(t| S |j}|  }| jdkrK|t	t
|jd d krKtdd|jd }n| jdkrj|t	t
|  d d krjtdd| d }nr| jdkr|| k rtddd|d   d | }nX| jdkr|| d k rtdd|d  | d }n>t| }|j|j}}|jdkr| }d}	 t|||| \}	}
|	d
dt	t
|	| d    rn|d7 }qtdt
|	|
}| }|t}||}||_|S )NrQ   r   r.   r&   rb   r   rX   rI   Tr   r   )r   r   r   rj  rE  r   rK   r   r>   rq   rk   rL   r=   r   rt   r\   r]   rG   _dexprZ  r[  r   r   rJ   )r1   r2   rB   r;  adjr\  r]  r   rL  r   r]   rJ   r*   r*   r,   r]     sN   $( 
 

zDecimal.expc                 C   s   	 dS )NTr*   r   r*   r*   r,   is_canonical'  rf  zDecimal.is_canonicalc                 C   s
   	 | j  S r)   )rW   r   r*   r*   r,   	is_finite/     zDecimal.is_finitec                 C      	 | j dkS )Nra   rV   r   r*   r*   r,   rT  7     
zDecimal.is_infinitec                 C   s   	 | j dv S )Nrf   ru  r   r*   r*   r,   r   ;  rv  zDecimal.is_nanc                 C   s,   	 | j s| sdS |d u rt }|j|  kS NF)rW   r   rS  r   r   r*   r*   r,   	is_normal?     
zDecimal.is_normalc                 C   rt  )Nr<   ru  r   r*   r*   r,   r   G  rv  zDecimal.is_qnanc                 C   rt  Nr.   )r>   r   r*   r*   r,   	is_signedK  rv  zDecimal.is_signedc                 C   rt  )Nr`   ru  r   r*   r*   r,   r   O  rv  zDecimal.is_snanc                 C   s,   	 | j s| sdS |d u rt }|  |jk S rw  )rW   r   r   rS  r   r*   r*   r,   is_subnormalS  ry  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rtt|d d d S |dkr-ttd| d d d S t| }|j|j}}|dkrUt|d|   }t|}t|t| ||k  S |ttd|  |  d S )Nr.      r   r   r   r&   rV   rq   r?   rk   rt   r\   r]   r1   rp  r\  r]  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r$tS | jdkr/|t	dS t
| }|j|j}}|j}||   d }	 t|||}|ddttt|| d    r_n|d7 }qFtt|d	k tt|| }| }|t}	||}|	|_|S )
NrQ   r.   zln of a negative valuerd   Tr   r   rb   r&   )r   r   _NegativeInfinityr   	_InfinityrE  rj  r>   ro   r	   rt   r\   r]   rK   r  _dlogrq   rk   rs   r=   rZ  r[  r   r   rJ   
r1   r2   rB   r\  r]  r   r;  rV  r   rJ   r*   r*   r,   lnx  s@   
$

z
Decimal.lnc                 C   s   	 | j t| j d }|dkrtt|d S |dkr%ttd| d S t| }|j|j}}|dkrQt|d|   }td| }t|t| ||k  d S td|  | }t|| |dk  d S )	Nr.   r   r   r&   r      rd   Z231r  r  r*   r*   r,   rF    s   zDecimal._log10_exp_boundc           
      C   sH  	 |d u rt  }| j|d}|r|S | stS |  dkrtS | jdkr)|tdS | jd dkrM| jdd  dt	| jd  krMt
| jt	| j d }nDt| }|j|j}}|j}||   d }	 t|||}|d	d
t	tt|| d    r}n|d7 }qdtt|dk tt|| }| }|t}	||}|	|_|S )NrQ   r.   zlog10 of a negative valuer&   r   rX   rd   Tr   r   rb   )r   r   r  r   r  r>   ro   r	   r?   rq   r   rV   rt   r\   r]   rK   rF  _dlog10rk   rs   r=   rZ  r[  r   r   rJ   r  r*   r*   r,   log10  s@   
.$

zDecimal.log10c                 C   sX   	 | j |d}|r|S |d u rt }|  rtS | s!|tddS t|  }||S )NrQ   zlogb(0)r.   )	r   r   r   r  ro   r
   r   r   r   r   r*   r*   r,   logb  s   
zDecimal.logbc                 C   s8   	 | j dks| jdkrdS | jD ]	}|dvr dS qdS )Nr&   FZ01T)r>   rV   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r3d| | }||fS |dk r?||j  d  }||fS )Nr&   rX   )rK   rq   )r1   r2   opaopbZdifr*   r*   r,   _fill_logical'  s   zDecimal._fill_logicalc                 C   |   	 |d u rt  }t|dd}|  r| s|tS | || j|j\}}ddd t||D }t	d|
dp;ddS )NTr   rZ   c                 S   s$   g | ]\}}t t|t|@ qS r*   rk   r\   .0rC  br*   r*   r,   
<listcomp>B     $ z'Decimal.logical_and.<locals>.<listcomp>r&   rX   r   r   r  ro   r	   r  r?   ry   zipr=   rr   r1   r   r2   r  r  r   r*   r*   r,   logical_and4     
zDecimal.logical_andc                 C   s*   	 |d u rt  }| tdd|j d|S )Nr&   r   )r   logical_xorr=   rK   r   r*   r*   r,   logical_invertE  s   zDecimal.logical_invertc                 C   r  )NTr   rZ   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&   rX   r  r  r*   r*   r,   
logical_orL  r  zDecimal.logical_orc                 C   r  )NTr   rZ   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&   rX   r  r  r*   r*   r,   r  ]  r  zDecimal.logical_xorc                 C   s   	 t |dd}|d u rt }| js|jr@|  }| }|s |r@|dkr-|dkr-| |S |dkr:|dkr:||S | ||S |  | }|dkrR| |}|dkrY|}n| }||S r`  	r   r   rW   r   r   r   r   r   rb  rc  r*   r*   r,   max_magn  (   



zDecimal.max_magc                 C   s   	 t |dd}|d u rt }| js|jr@|  }| }|s |r@|dkr-|dkr-| |S |dkr:|dkr:||S | ||S |  | }|dkrR| |}|dkrY| }n|}||S r`  r  rc  r*   r*   r,   min_mag  r  zDecimal.min_magc                 C   s   	 |d u rt  }| j|d}|r|S |  dkrtS |  dkr+tdd|j | S | }|t	 |
  | |}|| krC|S | tdd| d |S )NrQ   r   r.   r&   rI   r   )r   r   r   r  r=   rK   r	  rR   r[  r   _ignore_all_flagsr   r   r   r1   r2   rB   Znew_selfr*   r*   r,   
next_minus  &   

zDecimal.next_minusc                 C   s   	 |d u rt  }| j|d}|r|S |  dkrtS |  dkr+tdd|j | S | }|t	 |
  | |}|| krC|S | tdd| d |S )NrQ   r.   r   rI   r&   r   )r   r   r   r  r=   rK   r	  rR   r[  r   r  r   r   r   r  r*   r*   r,   	next_plus  r  zDecimal.next_plusc                 C   s   	 t |dd}|d u rt }| ||}|r|S | |}|dkr&| |S |dkr0| |}n| |}| rM|t	d|j
 |t |t |S | |jk ro|t |t |t |t |so|t |S )NTr   r&   r   z Infinite result from next_toward)r   r   r   r   rn  r  r  r   ro   r   r>   r   r   r   rS  r   r   r   )r1   r   r2   rB   Z
comparisonr*   r*   r,   next_toward  s:   









zDecimal.next_towardc                 C   s   	 |   rdS |  rdS |  }|dkrdS |dkrdS |  r(| jr&dS dS |d u r/t }| j|d	r<| jr:d
S dS | jrAdS dS )Nr   r   r.   z	+Infinityr   z	-Infinityz-Zeroz+ZerorQ   z
-Subnormalz
+Subnormalz-Normalz+Normal)r   r   r   r}  r>   r   r|  )r1   r2   infr*   r*   r,   number_class  s.   zDecimal.number_classc                 C   
   	 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r"|tS |j t|  kr1|jks7n |tS |  r?t	| S t|}| j
}|jt| }|dkrXd| | }n|dk rc|| d  }||d  |d |  }t| j|dpxd| jS NTr   r&   rX   r   r   r   rV   ro   r	   rK   r\   r   r   r?   rq   r=   r>   rr   )r1   r   r2   rB   torotrotdigtopadZrotatedr*   r*   r,   rotate4  s0   

 
zDecimal.rotatec                 C   s   	 |d u rt  }t|dd}| ||}|r|S |jdkr"|tS d|j|j  }d|j|j  }|t|  kr>|ksDn |tS | 	 rLt
| S t| j| j| jt| }||}|S )NTr   r&   r   rd   )r   r   r   rV   ro   r	   rL   rK   r\   r   r   r=   r>   r?   r   )r1   r   r2   rB   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r"|tS |j t|  kr1|jks7n |tS |  r?t	| S t|}| j
}|jt| }|dkrXd| | }n|dk rc|| d  }|dk rn|d | }n|d|  }||j d  }t| j|dpd| jS r  r  )r1   r   r2   rB   r  r  r  Zshiftedr*   r*   r,   r   n  s6   

 
zDecimal.shiftc                 C   s   | j t| ffS r)   )	__class__rk   r   r*   r*   r,   
__reduce__  s   zDecimal.__reduce__c                 C      t | tu r| S | t| S r)   typer   r  rk   r   r*   r*   r,   __copy__     zDecimal.__copy__c                 C   r  r)   r  )r1   memor*   r*   r,   __deepcopy__  r  zDecimal.__deepcopy__c                 C   s.  	 |d u rt  }t||d}| jr-t| j|}t|  }|d dkr'|d7 }t|||S |d d u r<ddg|j |d< |d dkrMt	| j| j
| jd } |j}|d }|d ur|d dv rg| |d	 |} n!|d d
v ru| | |} n|d dv rt| j
|kr| ||} | s| jdkr|d d
v r| d|} | jt| j
 }	|d dv r| s|d urd	| }
n d	}
n|d d
v r|	}
n|d dv r| jdkr|	dkr|	}
nd	}
|
dk rd}d|
  | j
 }n'|
t| j
kr| j
d|
t| j
   }d}n| j
d |
 pd}| j
|
d  }|	|
 }t| j||||S )N)_localeconvr  %gGrd   	precisioneEr.   zfF%ZgGr&   r   rX   rZ   )r   _parse_format_specifierrW   _format_signr>   rk   r   _format_alignr   r=   r?   rV   rJ   rW  r   rq   _format_number)r1   Z	specifierr2   r  specrG   bodyrJ   r  r   r   r   r   r]   r*   r*   r,   
__format__  s\   
zDecimal.__format__)rX   N)NNr)   )FN)TN)r6   r7   r8   	__slots__ri   classmethodr|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __radd__r   r   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'  r0  rD  rN  rO  rR  r  rU  r   rW  rY  r*  to_integralr_  r   r   r(  r)  r   re  rh  rb  rl  r   r   rn  r]   rq  rr  rT  r   rx  r   r{  r   r|  r}  r  r  rF  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r*   r*   r*   r,   r     s   
 
,
 !
@

	
	
	
	2

4
	


V


7
;
!

$



K



f	
>

,U 
n 
Y


="



c
*"	


I

K


2

3









.*

!
'r   Fc                 C   s(   	 t t}| |_||_||_||_|S r)   )rh   ri   r   r>   r?   rV   rW   )rG   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 )rT   c                 C   s   |  | _d S r)   )rR   new_context)r1   r  r*   r*   r,   __init__     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__  r  z_ContextManager.__exit__N)r6   r7   r8   r  r  r  r*   r*   r*   r,   rT     s
    rT   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w |d ur|n|
j| _|d ur|n|
j| _|d ur(|n|
j| _|d ur2|n|
j| _|d ur<|n|
j| _|d urF|n|
j| _|	d u rRg | _n|	| _d u r`|
j	
 | _	nttsttfddt D | _	n| _	 d u rttd| _d S t tst fddt  D | _d S  | _d S )Nc                 3        | ]}|t | v fV  qd S r)   r\   r  r   rI  r*   r,   	<genexpr>I      z#Context.__init__.<locals>.<genexpr>r&   c                 3   r  r)   r  r  rJ  r*   r,   r  P  r  )r   	NameErrorrK   rJ   rS  rL   r   r  _ignored_flagsrI  rR   rj   r  rH  fromkeysrJ  )r1   rK   rJ   rS  rL   r   r  rJ  rI  r  Zdcr*   )rJ  rI  r,   r  0  s0   

 
zContext.__init__c                 C   s   t |tstd| |dkr||krtd||||f n%|dkr1||k r0td||||f n||k s9||krCt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)rj   r\   r}   rw   rh   __setattr__)r1   namer   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r(td| qt| ||S )Nz%s must be a signal dictz%s is not a valid signal dict)rj   r  r}   rH  KeyErrorrh   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r|  ||ddS |dkr$|  ||ddS |dkr0|  ||ddS |d	kr<|  ||ddS |d
krQ|tvrJtd| t| ||S |dksY|dkr_| ||S |dkrjt| ||S td| )NrK   r.   r  rS  r  r&   rL   r   r  rJ   z%s: invalid rounding moderJ  rI  r  z.'decimal.Context' object has no attribute '%s')r  _rounding_modesr}   rh   r  r  AttributeError)r1   r  r   r*   r*   r,   r  m  s*   zContext.__setattr__c                 C   s   t d| )Nz%s cannot be deleted)r  )r1   r  r*   r*   r,   __delattr__  r  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      g | ]\}}|r|qS r*   r*   r  sigr  r*   r*   r,   r        z&Context.__reduce__.<locals>.<listcomp>c                 S   r  r*   r*   r  r*   r*   r,   r    r  )
rJ  itemsrI  r  rK   rJ   rS  rL   r   r  )r1   rJ  rI  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      g | ]	\}}|r|j qS r*   r6   )r  r   r  r*   r*   r,   r        z$Context.__repr__.<locals>.<listcomp>zflags=[z, ]c                 S   r  r*   r  )r  r  r  r*   r*   r,   r    r  ztraps=[))rx   varsrJ  r  ry   rI  )r1   r   namesr*   r*   r,   r     s   zContext.__repr__c                 C      	 | j D ]}d| j |< qd S r   r  r1   flagr*   r*   r,   rS        
zContext.clear_flagsc                 C   r  r   r  r  r*   r*   r,   clear_traps  r   zContext.clear_trapsc              
   C   s0   	 t | j| j| j| j| j| j| j| j| j		}|S r)   )
r   rK   rJ   rS  rL   r   r  rJ  rI  r  r1   Zncr*   r*   r,   rZ    s   zContext._shallow_copyc              
   C   s8   	 t | j| j| j| j| j| j| j | j	 | j
	}|S r)   )r   rK   rJ   rS  rL   r   r  rJ  rR   rI  r  r  r*   r*   r,   rR     s   zContext.copyc                 G   s\   	 t ||}|| jv r| j| g|R  S d| j|< | j| s*| j| g|R  S ||rz  )_condition_maprN   r  r3   rJ  rI  )r1   Z	conditionZexplanationr+   errorr*   r*   r,   ro     s   


zContext._raise_errorc                 C   s   	 | j t S r)   )_ignore_flagsrH  r   r*   r*   r,   r    rv  zContext._ignore_all_flagsc                 G   s   	 | j t| | _ t|S r)   )r  ru   )r1   rJ  r*   r*   r,   r    s   zContext._ignore_flagsc                 G   s:   	 |rt |d ttfr|d }|D ]}| j| qd S r   )rj   rv   ru   r  remove)r1   rJ  r  r*   r*   r,   _regard_flags  s   zContext._regard_flagsc                 C      	 t | j| j d S rz  )r\   rS  rK   r   r*   r*   r,   r     rm  zContext.Etinyc                 C   r  rz  )r\   rL   rK   r   r*   r*   r,   r	    rm  zContext.Etopc                 C   s   	 | j }|| _ |S r)   )rJ   )r1   r  rJ   r*   r*   r,   r[    s   zContext._set_roundingrX   c                 C   sl   	 t |tr|| ksd|v r| tdS t|| d}| r1t|j| j	| j
 kr1| tdS || S )NrY   zAtrailing or leading whitespace and underscores are not permitted.rQ   zdiagnostic info too long in NaN)rj   rk   rm   ro   r   r   r   rq   r?   rK   r  r   )r1   r  r   r*   r*   r,   create_decimal  s   
zContext.create_decimalc                 C   s   	 t |}|| S r)   )r   r|   r   )r1   r   r   r*   r*   r,   create_decimal_from_float  s   

z!Context.create_decimal_from_floatc                 C      	 t |dd}|j| dS rg  )r   r   r1   rC  r*   r*   r,   rs   !  s   zContext.absc                 C   4   	 t |dd}|j|| d}|tu rtd| |S NTr   rQ   Unable to convert %s to Decimal)r   r   r   r}   r1   rC  r  r   r*   r*   r,   add6     zContext.addc                 C   s   t || S r)   )rk   r   r  r*   r*   r,   _applyK  r  zContext._applyc                 C      	 t |ts
td| S )Nz,canonical requires a Decimal as an argument.)rj   r   r}   re  r  r*   r*   r,   re  N     
zContext.canonicalc                 C      	 t |dd}|j|| dS rg  )r   r   r1   rC  r  r*   r*   r,   r   [  s    zContext.comparec                 C   r  rg  )r   rh  r  r*   r*   r,   rh       zContext.compare_signalc                 C      	 t |dd}||S r   )r   rb  r  r*   r*   r,   rb    s   
zContext.compare_totalc                 C   r  r   )r   rl  r  r*   r*   r,   rl    s   
zContext.compare_total_magc                 C      	 t |dd}| S r   )r   r   r  r*   r*   r,   r        	zContext.copy_absc                 C   s   	 t |dd}t|S r   )r   r   r  r*   r*   r,   copy_decimal  r  zContext.copy_decimalc                 C   r  r   )r   r   r  r*   r*   r,   r     r  zContext.copy_negatec                 C   r  r   )r   rn  r  r*   r*   r,   rn       
zContext.copy_signc                 C   r  r  )r   r   r   r}   r  r*   r*   r,   divide  s   zContext.dividec                 C   r  r  )r   r   r   r}   r  r*   r*   r,   
divide_int+     zContext.divide_intc                 C   r  r  )r   r   r   r}   r  r*   r*   r,   r   B  r  zContext.divmodc                 C   r  rg  )r   r]   r  r*   r*   r,   r]   W     zContext.expc                 C   s   	 t |dd}|j||| dS rg  )r   r'  )r1   rC  r  r]  r*   r*   r,   r'  o  s   zContext.fmac                 C   r  )Nz/is_canonical requires a Decimal as an argument.)rj   r   r}   rq  r  r*   r*   r,   rq    r  zContext.is_canonicalc                 C   r  r   )r   rr  r  r*   r*   r,   rr    s   zContext.is_finitec                 C   r  r   )r   rT  r  r*   r*   r,   rT       zContext.is_infinitec                 C   r  r   )r   r   r  r*   r*   r,   r        zContext.is_nanc                 C   r  rg  )r   rx  r  r*   r*   r,   rx    s   zContext.is_normalc                 C   r  r   )r   r   r  r*   r*   r,   r     r"  zContext.is_qnanc                 C   r  r   )r   r{  r  r*   r*   r,   r{       zContext.is_signedc                 C   r  r   )r   r   r  r*   r*   r,   r     r#  zContext.is_snanc                 C   r  rg  )r   r|  r  r*   r*   r,   r|       zContext.is_subnormalc                 C   r  r   )r   r}  r  r*   r*   r,   r}  %  r$  zContext.is_zeroc                 C   r  rg  )r   r  r  r*   r*   r,   r  6  r%  z
Context.lnc                 C   r  rg  )r   r  r  r*   r*   r,   r  L     zContext.log10c                 C   r  rg  )r   r  r  r*   r*   r,   r  h  s   zContext.logbc                 C   r  rg  )r   r  r  r*   r*   r,   r       zContext.logical_andc                 C   r  rg  )r   r  r  r*   r*   r,   r    s   zContext.logical_invertc                 C   r  rg  )r   r  r  r*   r*   r,   r    r'  zContext.logical_orc                 C   r  rg  )r   r  r  r*   r*   r,   r    r'  zContext.logical_xorc                 C   r  rg  )r   r   r  r*   r*   r,   r     r'  zContext.maxc                 C   r  rg  )r   r  r  r*   r*   r,   r       zContext.max_magc                 C   r  rg  )r   r   r  r*   r*   r,   r     r'  zContext.minc                 C   r  rg  )r   r  r  r*   r*   r,   r  -  r(  zContext.min_magc                 C   r  rg  )r   r   r  r*   r*   r,   minus>     zContext.minusc                 C   r  r  )r   r   r   r}   r  r*   r*   r,   multiplyO  s   zContext.multiplyc                 C   r  rg  )r   r  r  r*   r*   r,   r  o     zContext.next_minusc                 C   r  rg  )r   r  r  r*   r*   r,   r    r,  zContext.next_plusc                 C   r  rg  )r   r  r  r*   r*   r,   r    r  zContext.next_towardc                 C   r  rg  )r   rR  r  r*   r*   r,   rR    r!  zContext.normalizec                 C   r  rg  )r   r  r  r*   r*   r,   r    s   .zContext.number_classc                 C   r  rg  )r   r   r  r*   r*   r,   plus  r*  zContext.plusc                 C   s6   	 t |dd}|j||| d}|tu rtd| |S r  )r   rN  r   r}   )r1   rC  r  r,  r   r*   r*   r,   power  s   HzContext.powerc                 C   r  rg  )r   r  r  r*   r*   r,   r  e  s   6zContext.quantizec                 C   r  r  r   r   r*   r*   r,   r    rs  zContext.radixc                 C   r  r  )r   r   r   r}   r  r*   r*   r,   r     s   zContext.remainderc                 C   r  rg  )r   r   r  r*   r*   r,   r     s   zContext.remainder_nearc                 C   r  rg  )r   r  r  r*   r*   r,   r    s   zContext.rotatec                 C   r  r   )r   rU  r  r*   r*   r,   rU    r  zContext.same_quantumc                 C   r  rg  )r   r  r  r*   r*   r,   r  $  s   zContext.scalebc                 C   r  rg  )r   r   r  r*   r*   r,   r   7  s   zContext.shiftc                 C   r  rg  )r   r_  r  r*   r*   r,   r_  U  s   zContext.sqrtc                 C   r  r  )r   r   r   r}   r  r*   r*   r,   subtractu  r   zContext.subtractc                 C   r  rg  )r   r   r  r*   r*   r,   r     r&  zContext.to_eng_stringc                 C   r  rg  )r   r   r  r*   r*   r,   to_sci_string  s   zContext.to_sci_stringc                 C   r  rg  )r   rY  r  r*   r*   r,   rY    s   zContext.to_integral_exactc                 C   r  rg  )r   r*  r  r*   r*   r,   r*    s   zContext.to_integral_value)	NNNNNNNNNr)   )rX   )Wr6   r7   r8   r  r  r  r  r  r  r   rS   r  rZ  rR   r  ro   r  r  r  r   r   r	  r[  r	  r
  rs   r  r  re  r   rh  rb  rl  r   r  r   rn  r  r  r   r]   r'  rq  rr  rT  r   rx  r   r{  r   r|  r}  r  r  r  r  r  r  r  r   r  r   r  r)  r+  r  r  r  rR  r  r-  r.  r  r  r   r   r  rU  r  r   r_  r/  r   r0  rY  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 )rt   rG   r\   r]   Nc                 C   sj   |d u rd | _ d| _d | _d S t|tr$|j| _ t|j| _|j| _d S |d | _ |d | _|d | _d S )Nr&   r.   rd   )rG   r\   r]   rj   r   r>   r?   rV   )r1   r   r*   r*   r,   r    s   



z_WorkRep.__init__c                 C   s   d| j | j| jf S )Nz(%r, %r, %r)r1  r   r*   r*   r,   r     s   z_WorkRep.__repr__r)   )r6   r7   r8   r  r  r   r*   r*   r*   r,   rt     s    
rt   c                 C   s   	 | j |j k r|}| }n| }|}tt|j}tt|j}|j td|| d  }||j  d |k r9d|_||_ | jd|j |j   9  _|j |_ | |fS )Nr   rd   r.   r   )r]   rq   rk   r\   r   )r   r   rK   tmpr   Ztmp_lenZ	other_lenr]   r*   r*   r,   r     s   r   c                 C   s`   	 | dkrdS |dkr| d|  S t t| }t|t|d }|| k r)d S | d|   S )Nr&   r   rX   )rk   rs   rq   rstrip)r<   r   Zstr_nZval_nr*   r*   r,   r9  (  s   
r9  c                 C   sJ   	 | dks	|dkrt dd}||kr#|||  |  d? }}||ks|S )Nr&   z3Both arguments to _sqrt_nearest should be positive.r.   )rw   )r<   rC  r  r*   r*   r,   _sqrt_nearest=  s   r4  c                 C   s4   	 d|> | |? }}|d| |d @  |d@  |k S )Nr.   rd   r*   )r<  r   r  r   r*   r*   r,   _rshift_nearestL  s    r5  c                 C   s(   	 t | |\}}|d| |d@  |k S )Nrd   r.   )r   )rC  r  r   r   r*   r*   r,   _div_nearestT  s   r6  r3  c           	   	   C   s  	 | | }d}||krt ||| > |ks#||krXt ||| ? |krXt|| d> |t||t||  | }|d7 }||krJt ||| > |ks#||krXt ||| ? |ks#tdtt| d|   }t||}t||}t|d ddD ]}t||t|| | }qyt|| |S )Nr&   r.   rb   r   )rs   r6  r4  r5  r\   rq   rk   r+  )	r<  MLr?  RTZyshiftwr   r*   r*   r,   _ilog\  s"   

r=  c           
      C   s   	 |d7 }t t| }|| || dk }|dkrKd| }|| | }|dkr.| d| 9 } nt| d|  } t| |}t|}t|| |}|| }	n
d}t|d|  }	t|	| dS Nrd   r.   r&   r   r7  )rq   rk   r6  r=  _log10_digits)
r]  r   r;  r^  r   r8  r   log_dZlog_10Zlog_tenpowerr*   r*   r,   r    s"   

r  c           	      C   s   	 |d7 }t t| }|| || dk }|dkr:|| | }|dkr*| d| 9 } nt| d|  } t| d| }nd}|r_t tt|d }|| dkr\t|t||  d| }nd}nd}t|| dS r>  )rq   rk   r6  r=  rs   r?  )	r]  r   r;  r^  r   r   r@  rL  Z	f_log_tenr*   r*   r,   r    s$   r  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rBd}	 d|| d  }tttd| |d}|| d  d| kr3n|d7 }q|dd d	 | _t| jd |d
  S )Nr&   zp should be nonnegativerb   Tr   rd   r7  rX   r   r.   )rw   rq   r   rk   r6  r=  r3  r\   )r1   r;  rL  r8  r   r*   r*   r,   	getdigits  s   	z_Log10Memoize.getdigitsN)r6   r7   r8   r  rB  r*   r*   r*   r,   rA    s    rA  c           	      C   s   	 t | |> | }tdtt| d|   }t| |}||> }t|d ddD ]}t| ||  || }q)t|d ddD ]}||d > }t|||  |}q?|| S )Nr7  rb   r.   r&   r   rd   )r8  r\   rq   rk   r6  r+  )	r<  r8  r9  r:  r;  r?  ZMshiftr/  r   r*   r*   r,   _iexp  s   
rC  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 )Nrd   r&   r.   r   i  rb   )r   rq   rk   r   r?  r6  rC  )	r]  r   r;  rL  r   r   ZcshiftZquotrB  r*   r*   r,   ro  $  s    ro  c                 C   s   	 t tt|| }t| ||| d }|| }|dkr&|| d|  }n
t|| d|  }|dkrat t| | dk|dkkrSd|d  d d| }	}
|	|
fS d| d | }	}
|	|
fS t||d  |d \}	}
t|	d}	|
d7 }
|	|
fS )Nr.   r&   r   )rq   rk   rs   r  r6  ro  )r=  r>  r@  rA  r;  r  Zlxcr   Zpcr   r]   r*   r*   r,   rG  H  s"   
rG  r7  F   5   (      r~     r   r   )	r   2345678rI   c                 C   s2   	 | dkr	t dt| }dt| ||d   S )Nr&   z0The argument to _log10_lb should be nonnegative.r7  )rw   rk   rq   )r]  Z
correctionZstr_cr*   r*   r,   r:  r  s
   r:  c                 C   sN   	 t | tr| S t | trt| S |rt | trt| S |r%td|  tS )Nr  )rj   r   r\   r{   r|   r}   r   )r   r   Zallow_floatr*   r*   r,   r   }  s   


r   c                 C   s   	 t |tr
| |fS t |tjr*| js#t| jtt| j	|j
 | j} | t|jfS |r:t |tjr:|jdkr:|j}t |trWt }|rJd|jt< n|td | t|fS ttfS )Nr&   r.   rg   )rj   r   _numbersZRationalrW   r=   r>   rk   r\   r?   denominatorrV   	numeratorZComplexr  r   r{   r   rJ  r   ro   r|   r   )r1   r   r   r2   r*   r*   r,   r     s*   

r   r6  i?B i)rK   rJ   rI  rJ  rL   rS  r   r  re   )rK   rJ   rI  rJ  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 r<|d ur2td|  |d ur<td|  |p?d|d< |pEd|d< |d	 d u rRd
|d	< t|d pXd|d< |d d urjt|d |d< |d dkr|d d u s||d dv rd|d< |d dkrd|d< |d u rt }|d d urtd|  |d |d< |d |d< |d |d< |S |d d u rd|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:  >rG   r[   minimumwidthrX   r  r&   r  ZgGnr.   r<   r  thousands_sepzJExplicit thousands separator conflicts with 'n' type in format specifier: groupingdecimal_pointrZ   rb   r   )_parse_format_specifier_regexmatchrw   	groupdictr\   _locale
localeconv)format_specr  r   Zformat_dictrS  rT  r*   r*   r,   r    sX   
r  c           	      C   s   	 |d }|d }||t |  t |  }|d }|dkr%| | | }|S |dkr1||  | }|S |dkr=| | | }|S |dkrYt |d }|d | |  | ||d   }|S td	)
NrX  rS  rT  <rW  =^rd   zUnrecognised alignment field)rq   rw   )	rG   r  r  rX  rS  ZpaddingrT  r   Zhalfr*   r*   r,   r  m  s&   	 r  c                 C   sn   	 ddl m}m} | sg S | d dkr&t| dkr&|| d d || d S | d tjkr3| d d S td)Nr&   )chainrepeatr   rd   r   z unrecognised format for grouping)	itertoolsre  rf  rq   r_  CHAR_MAXrw   )rZ  re  rf  r*   r*   r,   _group_lengths  s   ri  c                 C   s   	 |d }|d }g }t |D ]@}|dkrtdttt| |d|}|d|t|   | | d    | d |  } ||8 }| sI|dkrI n!|t|8 }qtt| |d}|d|t|   | | d    |t|S )NrY  rZ  r&   zgroup length should be positiver.   rX   )ri  rw   r   r   rq   rx   ry   reversed)r   r  	min_widthseprZ  groupsr^  r*   r*   r,   _insert_thousands_sep  s"   $$rn  c                 C   s"   	 | rdS |d dv r|d S dS )Nr[   rG   z +rZ   r*   )is_negativer  r*   r*   r,   r    s   r  c                 C   s   	 t | |}|s|d r|d | }|dks|d dv r/ddddd|d  }|d	||7 }|d d
kr9|d
7 }|d rJ|d t| t| }nd}t|||}t||| |S )NZaltr[  r&   r  r  r   r   )r   r   r  r  z{0}{1:+}r  rU  rX  )r  formatrq   rn  r  )ro  r   r   r]   r  rG   Zecharrk  r*   r*   r,   r    s   
r  ZInfz-Infr   r   rd   r)   )F)r&   )r3  )FF)r.   )y__all__r6   Z	__xname____version__Z__libmpdec_version__mathr   ZnumbersrP  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   r}   r   rH  r  r  ZcontextvarsZ
ContextVarrM   r   r   r   rh   r   r=   NumberregisterrT   r   rt   r   r\   r   r8  r9  r4  r5  r6  r=  r  r  rA  rB  r?  rC  ro  rG  r:  r   r   r   r   r   recompileVERBOSE
IGNORECASEr]  rl   r  r  DOTALLr\  localer_  r  r  ri  rn  r  r  r  r  rA   rj  rE  ri  rE   	hash_infomodulusr   r  r   r   Z_PyHASH_NANr   r   r*   r*   r*   r,   <module>   sl  c#

&


.                          
             ^

0",#
%$
+

*


P
%
)