
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a:} ã                %   @   s¶  d ddddddddd	d
dddddddddddddddddddddd d!d"d#d$g%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k
r¬   d,d-„ ZY nX dZdZdZdZdZdZdZdZd.Zd.Ze	jd/krîd0Zd0Zd1Znd2Zd2Zd3Zeed4  ZG d5d„ deƒZG d6d„ deƒZ G d7d„ deƒZ!G d8d„ de!ƒZ"G d9d	„ 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 d@d„ de'e)ƒZ+G dAd„ de'e)e*ƒZ,G dBd„ de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)l2Z2e2 3dC¡Z4dDd„ Z5dEd„ Z6[2d”dFd„Z7G dGd „ d e8ƒZ9d•dIdJ„Z:ej; <e9¡ G dKdL„ dLe8ƒZ=G dMd„ de8ƒZ>G dNdO„ dOe8ƒZ?d–dPdQ„Z@eAjBZCdRdS„ ZDdTdU„ ZEdVdW„ ZFdXdY„ ZGd—d[d\„ZHd]d^„ ZId_d`„ ZJG dadb„ dbe8ƒZKeKƒ jLZMd˜dcdd„ZNdedf„ ZOdgdh„ ZPdidjdkdldmdndodpdqdrœ	fdsdt„ZQd™dudv„ZRdšdwdx„ZSe>dyee$e+e!gg dzd{d4d(d|�ZTe>d}ee$e+e!e e,gg d~�ZUe>d}eg g d~�ZVd(d)lWZWeW XdeWjYeWjZB ¡j[Z\eW Xd€¡j[Z]eW Xd�¡j[Z^eW Xd‚eWjYeWj_B ¡Z`[Wzd(d)laZbW n ek
�r   Y nX d›dƒd„„Zcd…d†„ Zdd‡dˆ„ Zedœd‰dŠ„Zfd‹dŒ„ Zgd�dŽ„ Zhe9d�ƒZie9d�ƒZje9d‘ƒZke9d(ƒZle9d4ƒZme9d’ƒZneiejfZoe	jpjqZre	jpjsZte	jpjuZvewdperd“ 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)Ú
namedtuplezsign digits exponentc                  G   s   | S ©N© )Úargsr*   r*   ú//opt/alt/python38/lib64/python3.8/_pydecimal.pyÚ<lambda>¤   ó    r-   Tl   ÿÿÿÿ l   ÿÇNÎZolüÿÿÿÿÇNÎZ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   c                   @   s   e Zd ZdS )r   N©r5   r6   r7   r*   r*   r*   r,   r   ×   s   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   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   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   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   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   c                   @   s   e Zd ZdS )r   Nr8   r*   r*   r*   r,   r   0  s   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   c                   @   s   e Zd ZdS )r   Nr8   r*   r*   r*   r,   r   J  s   c                   @   s   e Zd ZdS )r   Nr8   r*   r*   r*   r,   r   V  s   c                   @   s   e Zd Zdd„ ZdS )r   c                 G   sŽ   |j ttttfkrt| S |dk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   c                   @   s   e Zd ZdS )r   Nr8   r*   r*   r*   r,   r   ‡  s   c                   @   s   e Zd ZdS )r   Nr8   r*   r*   r*   r,   r   –  s   Zdecimal_contextc                  C   s8   z
t  ¡ W S  tk
r2   tƒ } t  | ¡ |  Y S X d S r)   )Ú_current_context_varÚgetÚLookupErrorr   Úset©r2   r*   r*   r,   r   ¼  s    

c                 C   s,   | t ttfkr|  ¡ } |  ¡  t | ¡ d S r)   )r   r   r   ÚcopyÚclear_flagsrH   rK   rL   r*   r*   r,   r   Ê  s    c                 C   s   | d krt ƒ } t| ƒS r)   )r   Ú_ContextManager)Zctxr*   r*   r,   r   Ó  s    $ c                
   @   sÊ  e Zd ZdZdñdd„Zedd„ ƒZdd	„ Zd
d„ Zdòdd„Z	dd„ Z
dd„ Zdd„ Zdódd„Zdôdd„Zdõdd„Zdödd„Zd÷dd„Zdødd„Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zdùd)d*„Zdúd+d,„Zdûd-d.„Zdüd/d0„Zdýd2d3„Zdþd4d5„ZeZdÿd6d7„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d�d‚„ZH�ddƒd„„ZI�dd…d†„ZJd‡dˆ„ ZKd‰dŠ„ ZL�dd‹dŒ„ZM�dd�dŽ„ZNeNZO�dd�d�„ZP�dd‘d’„ZQ�dd“d”„ZRd•d–„ ZSd—d˜„ ZTd™dš„ ZUd›dœ„ ZV�dd�dž„ZW�ddŸd „ZX�dd¡d¢„ZYd£d¤„ ZZd¥d¦„ Z[�dd§d¨„Z\�dd©dª„Z]d«d¬„ Z^d­d®„ Z_d¯d°„ Z`d±d²„ Za�dd³d´„Zbdµd¶„ Zcd·d¸„ Zdd¹dº„ Ze�dd»d¼„Zfd½d¾„ Zgd¿dÀ„ Zh�ddÁdÂ„ZidÃdÄ„ Zj�d dÅdÆ„Zk�d!dÇdÈ„ZldÉdÊ„ ZmdËdÌ„ Zn�d"dÍdÎ„Zo�d#dÏdÐ„Zp�d$dÑdÒ„Zq�d%dÓdÔ„Zr�d&dÕdÖ„Zs�d'd×dØ„Zt�d(dÙdÚ„Zu�d)dÛdÜ„Zv�d*dÝdÞ„Zw�d+dßdà„Zxdádâ„ Zy�d,dãdä„Zz�d-dådæ„Z{�d.dçdè„Z|dédê„ Z}dëdì„ Z~dídî„ Z�d/dïdð„Z€dS (0  r   )Ú_expr<   r;   Ú_is_specialÚ0Nc                 C   sˆ  t  | ¡}t|tƒ�r$t| ¡  dd¡ƒ}|d krP|d kr@tƒ }| t	d| ¡S | 
d¡dkrfd|_nd|_| 
d¡}|d k	rÆ| 
d	¡pŠd}t| 
d
¡pšdƒ}tt|| ƒƒ|_|t|ƒ |_d|_nZ| 
d¡}|d k	�rtt|pädƒƒ 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�ròtdƒ‚t|d tƒ�r|d dk�stdƒ‚|d |_|d dk�rHd|_|d |_d|_nÖg }	|d D ]R}
t|
tƒ�rœd|
  k�r|dk�rœn n|	�s�|
dk�r¤|	 |
¡ ntdƒ‚�qT|d dk�rÚd tt|	ƒ¡|_|d |_d|_nDt|d tƒ�rd tt|	�püdgƒ¡|_|d |_d|_ntdƒ‚|S t|tƒ�rx|d k�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ÚexprR   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   rZ   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;   rV   r<   ÚlenrP   rQ   ÚlstripÚabsr   Ú_WorkReprC   rW   ÚlistÚtupleÚ
ValueErrorÚappendÚjoinÚmapÚfloatr   Ú
from_floatÚ	TypeError)ÚclsÚvaluer2   r1   ÚmÚintpartÚfracpartrW   rX   ÚdigitsÚdigitr*   r*   r,   rc   
  s°    
ÿ





(


ÿ
zDecimal.__new__c                 C   sÌ   t |tƒr,|dkrdnd}d}tt|ƒƒ}nzt |tƒržt |¡sJt |¡rV| t|ƒƒS t 	d|¡dkrld}nd}t|ƒ 
¡ \}}| ¡ d }t|d|  ƒ}ntdƒ‚t||| ƒ}| tkrÀ|S | |ƒS d S )Nr'   r/   g      ð?é   zargument must be int or float.)rd   rV   re   rm   ru   Ú_mathZisinfZisnanÚreprZcopysignÚas_integer_ratioÚ
bit_lengthrw   r:   r   )rx   ÚfrC   ÚkÚcoeffr9   ÚdÚresultr*   r*   r,   rv      s$    

zDecimal.from_floatc                 C   s(   | j r$| j}|dkrdS |dkr$dS dS )Nr9   r/   rZ   r^   r'   )rQ   rP   )r1   rW   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'   )rP   r;   ©r1   r*   r*   r,   Ú_isinfinityÜ  s
    
zDecimal._isinfinityc                 C   s|   |   ¡ }|d krd}n|  ¡ }|s&|rx|d kr4tƒ }|dkrJ| td| ¡S |dkr`| td|¡S |rn|  |¡S | |¡S dS )NFr^   ÚsNaNr'   )r‰   r   ri   r	   r=   )r1   Úotherr2   Úself_is_nanÚother_is_nanr*   r*   r,   Ú_check_nansé  s&    
ÿÿ

zDecimal._check_nansc                 C   sv   |d k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   rQ   Úis_snanri   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 ©NrR   ©rQ   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rÎdS ||k râd| j  S d| j S n ||k�rd| j S d| j  S d S )Nr'   rŠ   r/   rR   )rQ   rŒ   r;   Úadjustedr<   rP   )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k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k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kr|S |  ||¡}|r.dS |  |¡dkS r¡   r¢   r£   r*   r*   r,   Ú__le__‚  s    zDecimal.__le__c                 C   s<   t | |ƒ\} }|tkr|S |  ||¡}|r.dS |  |¡dkS r¡   r¢   r£   r*   r*   r,   Ú__gt__‹  s    zDecimal.__gt__c                 C   s<   t | |ƒ\} }|tk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_otherrQ   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rŽdS |S )Nz"Cannot hash a signaling NaN value.r'   é
   rŠ   éþÿÿÿ)rQ   r’   rw   Úis_nanÚ_PyHASH_NANr;   Ú_PyHASH_INFrP   ÚpowÚ_PyHASH_MODULUSÚ_PyHASH_10INVrV   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;   rp   rt   rV   r<   rP   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   )
rQ   r¯   rq   ÚOverflowErrorrV   r<   rP   Ú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'))re   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rÌd}dd|   | j }nL|t| jƒkrø| jd|t| jƒ   }d}n | jd |… }d| j|d …  }||k�r(d}n*|d k�r8tƒ }ddg|j d||   }|| | | S )NrT   rU   r[   ZInfinityr9   ÚNaNr�   r'   éúÿÿÿr/   rR   r\   Ú.ÚeÚEz%+d)r;   rQ   rP   r<   rk   r   Úcapitals)	r1   Úengr2   rC   Ú
leftdigitsÚdotplacer{   r|   rW   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 kr(tƒ }| s@|jtkr@|  ¡ }n|  ¡ }| |¡S ©NrL   )rQ   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 kr(tƒ }| s@|jtkr@|  ¡ }nt| ƒ}| |¡S rÆ   )rQ   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Ç   rQ   r‘   r;   rË   rÌ   )r1   Úroundr2   r?   r*   r*   r,   Ú__abs__o  s    zDecimal.__abs__c           
      C   sh  t |ƒ}|tkr|S |d kr"tƒ }| js.|jr‚|  ||¡}|rB|S |  ¡ rr| j|jkrj| ¡ rj| td¡S t	| ƒS | ¡ r‚t	|ƒS t
| j|jƒ}d}|jtkr®| j|jkr®d}| sæ|sæt
| j|jƒ}|rÌd}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�r´t|d|ƒ}| |¡}|S |j|jk �rÌ|| }}|jdk�ròd|	_|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/   rR   )r'   r'   )r«   rŸ   r   rQ   r‘   rŒ   r;   ri   r	   r   r¸   rP   rE   r   r:   rÉ   ÚmaxrF   Ú_rescalern   Ú
_normalizerC   rV   rW   )
r1   rŽ   r2   r?   rW   ZnegativezerorC   Úop1Úop2rˆ   r*   r*   r,   Ú__add__…  s|    





zDecimal.__add__c                 C   sH   t |ƒ}|tkr|S | js |jr6| j||d�}|r6|S | j| ¡ |d�S rÆ   )r«   rŸ   rQ   r‘   rÔ   rÈ   r£   r*   r*   r,   Ú__sub__Ý  s    zDecimal.__sub__c                 C   s"   t |ƒ}|tkr|S |j| |d�S rÆ   )r«   rŸ   rÕ   r”   r*   r*   r,   Ú__rsub__ë  s    zDecimal.__rsub__c                 C   s@  t |ƒ}|tkr|S |d k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¢|s¼t|d|ƒ}| |¡}|S | jdkrât||j|ƒ}| |¡}|S |jdk�r
t|| j|ƒ}| |¡}|S t| ƒ}t|ƒ}t|t|j|j ƒ|ƒ}| |¡}|S )Nz(+-)INF * 0z0 * (+-)INFrR   Ú1)r«   rŸ   r   r;   rQ   r‘   rŒ   ri   r	   rA   rP   r:   rÉ   r<   rn   re   rV   )r1   rŽ   r2   Z
resultsignr?   Z	resultexprÒ   rÓ   r*   r*   r,   Ú__mul__ó  sH    




zDecimal.__mul__c                 C   sÆ  t |ƒ}|tkrtS |d k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}nÖt|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 }�q€t|t|ƒ|ƒ}| |¡S )
Nz(+-)INF/(+-)INFzDivision by infinityrR   z0 / 0zx / 0r'   r/   r­   r   )r«   rŸ   r   r;   rQ   r‘   rŒ   ri   r	   rA   r   r:   ÚEtinyr   r
   rP   rk   r<   rF   rn   ÚdivmodrV   re   rÉ   )r1   rŽ   r2   rC   r?   rW   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®   rR   r'   r­   z%quotient too large in //, % or divmod)r;   rŒ   rP   r¸   r™   r:   rÐ   rE   rF   rn   rW   rV   rÚ   re   ri   r   )r1   rŽ   r2   rC   rÝ   ÚexpdiffrÒ   rÓ   ÚqÚrr?   r*   r*   r,   Ú_divideg  s0    
ÿÿÿzDecimal._dividec                 C   s"   t |ƒ}|tkr|S |j| |d�S rÆ   )r«   rŸ   rÞ   r”   r*   r*   r,   Ú__rtruediv__ˆ  s    zDecimal.__rtruediv__c                 C   sÖ   t |ƒ}|tkr|S |d k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Œ   ri   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kr|S |j| |d�S rÆ   )r«   rŸ   rç   r”   r*   r*   r,   Ú__rdivmod__³  s    zDecimal.__rdivmod__c                 C   sˆ   t |ƒ}|tkr|S |d k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Œ   ri   r	   r   râ   rÉ   )r1   rŽ   r2   r?   rÜ   r*   r*   r,   Ú__mod__º  s"    
zDecimal.__mod__c                 C   s"   t |ƒ}|tkr|S |j| |d�S rÆ   )r«   rŸ   ré   r”   r*   r*   r,   Ú__rmod__Õ  s    zDecimal.__rmod__c                 C   sÐ  |d k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
ƒ}| s¦t| 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 �r¶d|
 }
|	 }	t|
t|	ƒ|ƒ}| |¡S )NTr©   zremainder_near(infinity, x)zremainder_near(x, 0)zremainder_near(0, 0)rR   r/   r®   r­   r^   r'   )r   r«   r‘   rŒ   ri   r	   r   r   rÉ   r¸   rP   r:   r;   r™   rF   r   rÐ   rE   rn   rW   rV   rÚ   re   )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kr|S |d k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Œ   ri   r	   rA   r;   r
   r   râ   r£   r*   r*   r,   Ú__floordiv__'  s&    
ÿzDecimal.__floordiv__c                 C   s"   t |ƒ}|tk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’   rq   r;   re   ru   ©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­   rR   )	rQ   r‰   rq   rŒ   r·   r;   rP   rV   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)   )Úcomplexru   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 )NrR   T)	r<   rF   Úclamprk   rl   r:   r;   rP   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 �rüt| jƒ| j
 | }	|	dk �rt| jd|d ƒ} d}	| j|j }
|
| |	ƒ}| jd |	… �p>d}|dk�r~tt|ƒd ƒ}t|ƒ|jk�r~|d d… }|d7 }||k�rš| 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 )NrR   ú
above Emaxr'   r×   r/   rŠ   )rQ   r‰   r=   r   rÙ   ÚEtoprG   rû   r¸   rÏ   rP   ri   r   r:   r;   rk   r<   rF   r   r   r   Ú_pick_rounding_functionrE   re   rV   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k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k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k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 k	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)rd   rV   rw   r:   ÚquantizerQ   r¯   rq   r·   rÐ   r   )r1   r9   rW   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'   )rQ   r¯   rq   r·   rV   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  )rQ   r¯   rq   r·   rV   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 k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©   rZ   r�   r9   r[   zINF * 0 in fmaz0 * INF in fma)r«   rQ   r   rP   ri   r	   rA   r;   r:   re   rV   r<   rÔ   )r1   rŽ   Zthirdr2   Úproductr*   r*   r,   Úfma‚  s<    




ÿ
ÿ
þzDecimal.fmac                 C   sÒ  t |ƒ}|tkr|S t |ƒ}|tkr(|S |d k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	|ƒ}�q t||	j|ƒ}t|t|ƒdƒS )
Nr^   r�   z@pow() 3rd argument not allowed unless all arguments are integersr'   zApow() 2nd argument cannot be negative when 3rd argument specifiedzpow() 3rd argument cannot be 0zSinsufficient precision: pow() 3rd argument must not have more than precision digitszXat least one of pow() 1st argument and 2nd argument must be nonzero; 0**0 is not definedr­   )r«   rŸ   r   r‰   ri   r	   r=   Ú
_isintegerr™   rF   Ú_isevenr;   rm   rV   rn   Úto_integral_valuer²   rW   Úranger:   re   )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 r¤d 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k�r¼|| @ |k�rBd S t	|ƒd }|d d }|t
t|ƒƒk�rpd S t|| |ƒ}t|| |ƒ}|d k�s |d k�r¤d S ||k�r²d S d	| }nÊ|d	k�r‚t	|ƒd
 d }td	| |ƒ\}}|�ròd S |d	 dk�r|d	 }|d8 }�qò|d d }|t
t|ƒƒk�r6d S t|| |ƒ}t|| |ƒ}|d k�sf|d k�rjd S ||k�rxd S d| }nd S |d| k�r˜d S | | }tdt|ƒ|ƒS |dk�rÐ|d|  d }}nÜ|dk�rút
tt|| ƒƒƒ| k�rúd 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�r”dk�r¬n n|d	 }|d	 }�qt|dk�rX|dk�rÎ||k�rÎd S t||ƒ\}}|dk�rêd 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�ržd S t|ƒ}| ¡ �râ|jdk�râ| jt|ƒ }
t||
 |t
|ƒ ƒ}nd}td|d|  || ƒS )Nr­   r'   r/   r×   rR   )r^   é   é   é   é]   éA   r   é   r\   r^   éd   )rn   rV   rW   rC   r  r;   rP   r¸   r:   Ú_nbitsrk   re   Ú_decimal_lshift_exactrÚ   rm   Ú	_log10_lb)r1   rŽ   ÚpÚxÚxcÚxeÚyÚycÚyer  rë   ZzerosZ
last_digitr½   ZemaxrÜ   rz   r9   Zxc_bitsÚremÚarà   rá   Zstr_xcr*   r*   r,   Ú_power_exact  sÐ    :












&&$$


 zDecimal._power_exactc                 C   s4  |d k	r|   |||¡S t|ƒ}|tkr*|S |d kr8tƒ }|  ||¡}|rL|S |sd| s`| td¡S tS d}| jdkr | 	¡ rˆ| 
¡ s˜d}n| r˜| td¡S |  ¡ } | sÂ|jdkrºt|ddƒS t| S |  ¡ rè|jdkrÜt| S t|ddƒS | tk�rŽ| 	¡ �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�rÀt|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 k�rŒ|  ||jd ¡}|d k	�rŒ|dk�rˆtd|j|jƒ}d}	|d k�r8|j}t| ƒ}|j|j }}t|ƒ}|j|j }}|jdk�rÚ| }d	}t|||||| ƒ\}}|d
dtt|ƒƒ| d    �r�q(|d	7 }�qÞt|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 integerrR   r×   FTr\   r   r­   rü   )*r   r«   rŸ   r   r‘   ri   r	   Ú_Oner;   r  r  rÈ   r:   rA   rŒ   rF   rV   rP   r   r   r™   Ú_log10_exp_boundrk   re   rG   rÙ   r4  r<   rn   rW   rC   Ú_dpowerrM   rN   Ú_signalsÚtrapsrÉ   Úflagsr   r   r   r   )r1   rŽ   r  r2   r?   Zresult_signZ
multiplierrW   Zself_adjÚexactZboundrÙ   r+  r,  r-  r.  r/  r0  r1  Úextrar†   rß   Z
newcontextZ	exceptionr*   r*   r,   Ú__pow__ð  sÌ    
ÿ













"ÿ



zDecimal.__pow__c                 C   s"   t |ƒ}|tkr|S |j| |d�S rÆ   )r«   rŸ   r=  r”   r*   r*   r,   Ú__rpow__È	  s    zDecimal.__rpow__c                 C   s¸   |d krt ƒ }| jr(| j|d�}|r(|S |  |¡}| ¡ 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   rR   r'   r/   )r   rQ   r‘   rÉ   rŒ   r:   r;   rG   rý   rû   rk   r<   rP   )r1   r2   r?   Úduprÿ   ÚendrW   r*   r*   r,   Ú	normalizeÏ	  s$    


zDecimal.normalizec                 C   s¦  t |dd�}|d krtƒ }|d kr(|j}| js4|jr||  ||¡}|rH|S | ¡ sX|  ¡ r|| ¡ rp|  ¡ rpt| ƒS | td¡S | 	¡ |j
  kr˜|jks¦n | td¡S | sÄt| 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 quantizerR   z9exponent of quantize result too large for current contextr/   z7quantize result has too many digits for current context)r«   r   rE   rQ   r‘   rŒ   r   ri   r	   rÙ   rP   rG   r:   r;   rÉ   r™   rF   rÐ   rk   r<   ÚEminr   r   r   )r1   rW   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«   rQ   r¯   Úis_infiniterP   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 |… pžd}|dkr¸tt	|ƒd ƒ}t| j||ƒS )NrR   r'   r×   r/   )
rQ   r   r:   r;   rP   r<   rk   rþ   re   rV   )r1   rW   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/   )rq   rQ   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 krTtƒ }|d krb|j}|  d|¡}|| kr€| 	t
¡ | 	t¡ |S )NrL   r'   rR   )rQ   r‘   r   rP   r:   r;   r   rE   rÐ   ri   r   r   ©r1   rE   r2   r?   r*   r*   r,   Úto_integral_exactm
  s$    



zDecimal.to_integral_exactc                 C   s`   |d krt ƒ }|d kr|j}| jr>| j|d�}|r6|S t| ƒS | jdkrPt| ƒS |  d|¡S d S )NrL   r'   )r   rE   rQ   r‘   r   rP   rÐ   rG  r*   r*   r,   r  Š
  s    
zDecimal.to_integral_valuec                 C   sÞ  |d k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'   rR   r^   r/   zsqrt(-x), x > 0r­   r'  Tr   )r   rQ   r‘   rŒ   r;   r   r:   rP   rÉ   ri   r	   rF   rn   rW   rV   rk   r<   rÚ   re   Ú_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 k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   rQ   r‰   rÉ   r‘   rœ   Úcompare_total©r1   rŽ   r2   ZsnZonrL  r?   r*   r*   r,   rÏ      s&    


	
zDecimal.maxc                 C   s¶   t |dd�}|d k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 rO  rP  rR  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'   TrR   )rQ   rP   r<   rk   )r1   Úrestr*   r*   r,   r  L  s    
zDecimal._isintegerc                 C   s&   | r| j dkrdS | jd| j   dkS )Nr'   TrŠ   r	  )rP   r<   r‹   r*   r*   r,   r  U  s    zDecimal._isevenc                 C   s2   z| j t| jƒ d W S  tk
r,   Y dS X d S )Nr/   r'   )rP   rk   r<   rw   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r t| jƒ| jf}t|jƒ|jf}||k rˆ|r„tS tS ||krœ|r˜tS tS tS |rÖ|dkr°tS |dkr¼tS |dkrÈtS |dkrÔtS n2|dkrâtS |dkrîtS |dkrútS |dk�rtS | |k �rtS | |k�r$tS | j|jk �r@|�r<tS tS | j|jk�r\|�rXtS tS tS )NTr©   r/   r^   )	r«   r;   Ú_NegativeOner5  r‰   rk   r<   Ú_ZerorP   )r1   rŽ   r2   rC   Zself_nanZ	other_nanZself_keyZ	other_keyr*   r*   r,   rQ  w  sf    



zDecimal.compare_totalc                 C   s&   t |dd�}|  ¡ }| ¡ }| |¡S r¨   )r«   rÇ   rQ  )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<   rP   rQ   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<   rP   rQ   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<   rP   rQ   r”   r*   r*   r,   Ú	copy_signÖ  s
    
 ÿzDecimal.copy_signc                 C   sì  |d k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r–tdd|jd ƒ}�n0| jdkrÔ|t	t
| ¡  d d ƒƒkrÔt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 ƒ}n‚t| ƒ}|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×   rR   rD   r   r­   )r   r‘   rŒ   rX  r5  r   rF   r™   r;   rk   re   rG   r:   rÙ   rn   rV   rW   rC   Ú_dexprI  rJ  r   rÉ   rE   )r1   r2   r?   r+  ÚadjrK  rL  r½   r<  r†   rW   rE   r*   r*   r,   rW   Ü  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)   )rQ   r‹   r*   r*   r,   Ú	is_finite/  s    zDecimal.is_finitec                 C   s
   | j dkS )Nr[   ©rP   r‹   r*   r*   r,   rC  7  s    zDecimal.is_infinitec                 C   s
   | j dkS )Nr`   r`  r‹   r*   r*   r,   r¯   ;  s    zDecimal.is_nanc                 C   s*   | j s
| sdS |d krtƒ }|j|  ¡ kS ©NF)rQ   r   rB  r™   rÄ   r*   r*   r,   Ú	is_normal?  s
    
zDecimal.is_normalc                 C   s
   | j dkS )Nr9   r`  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 )NrZ   r`  r‹   r*   r*   r,   r’   O  s    zDecimal.is_snanc                 C   s*   | j s
| sdS |d krtƒ }|  ¡ |jk S ra  )rQ   r   r™   rB  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r¨t|d|   ƒ}t|ƒ}t|ƒt|ƒ ||k  S |ttd|  | ƒƒ d S )Nr/   é   r­   r®   rŠ   r'   ©rP   rk   r<   re   rn   rV   rW   ©r1   r]  rK  rL  r½   ÚnumZdenr*   r*   r,   Ú_ln_exp_bound_  s    zDecimal._ln_exp_boundc           
      C   s  |d k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    rºqÄ|d7 }qˆtt|dk ƒtt|ƒƒ| ƒ}| ¡ }| t¡}	| |¡}|	|_|S )	NrL   r/   zln of a negative valuer^   r   r­   r\   r'   )r   r‘   Ú_NegativeInfinityrŒ   Ú	_Infinityr5  rX  r;   ri   r	   rn   rV   rW   rF   rk  Ú_dlogrk   re   rm   r:   rI  rJ  r   rÉ   rE   ©
r1   r2   r?   rK  rL  r½   r+  rE  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r t|d|   ƒ}td| ƒ}t|ƒt|ƒ ||k  d S td|  | ƒ}t|ƒ| |dk  d S )	Nr/   r®   rŠ   r'   r­   éç   r^   Z231rh  ri  r*   r*   r,   r6  ª  s    zDecimal._log10_exp_boundc           
      C   sF  |d k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r˜t
| jt	| jƒ d ƒ}nˆt| ƒ}|j|j }}|j}||  ¡  d }t|||ƒ}|dd	t	tt|ƒƒƒ| d    rø�q|d
7 }qÄtt|dk ƒtt|ƒƒ| ƒ}| ¡ }| t¡}	| |¡}|	|_|S )NrL   r/   zlog10 of a negative valuer'   r×   rR   r^   r   r­   r\   )r   r‘   rl  rŒ   rm  r;   ri   r	   r<   rk   r   rP   rn   rV   rW   rF   r6  Ú_dlog10re   rm   r:   rI  rJ  r   rÉ   rE   ro  r*   r*   r,   Úlog10È  s:    
ÿ.$


zDecimal.log10c                 C   sV   | j |d�}|r|S |d kr"tƒ }|  ¡ r.tS | s@| tdd¡S t|  ¡ ƒ}| |¡S )NrL   zlogb(0)r/   )	r‘   r   rŒ   rm  ri   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kr dS qdS )Nr'   FZ01T)r;   rP   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'   rR   )rF   rk   )r1   r2   ÚopaÚopbZdifr*   r*   r,   Ú_fill_logical'  s    zDecimal._fill_logicalc                 C   sz   |d krt ƒ }t|dd�}|  ¡ r*| ¡ s4| t¡S |  || j|j¡\}}d dd„ t||ƒD ƒ¡}t	d| 
d¡ptddƒS )NTr©   rT   c                 S   s$   g | ]\}}t t|ƒt|ƒ@ ƒ‘qS r*   ©re   rV   ©Ú.0r3  Úbr*   r*   r,   Ú
<listcomp>B  s     z'Decimal.logical_and.<locals>.<listcomp>r'   rR   ©r   r«   rv  ri   r	   ry  r<   rs   Úzipr:   rl   ©r1   rŽ   r2   rw  rx  rˆ   r*   r*   r,   Úlogical_and4  s    
zDecimal.logical_andc                 C   s(   |d k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 krt ƒ }t|dd�}|  ¡ r*| ¡ s4| t¡S |  || j|j¡\}}d dd„ t||ƒD ƒ¡}t	d| 
d¡ptddƒS )NTr©   rT   c                 S   s$   g | ]\}}t t|ƒt|ƒB ƒ‘qS r*   rz  r{  r*   r*   r,   r~  Z  s     z&Decimal.logical_or.<locals>.<listcomp>r'   rR   r  r�  r*   r*   r,   Ú
logical_orL  s    
zDecimal.logical_orc                 C   sz   |d krt ƒ }t|dd�}|  ¡ r*| ¡ s4| t¡S |  || j|j¡\}}d dd„ t||ƒD ƒ¡}t	d| 
d¡ptddƒS )NTr©   rT   c                 S   s$   g | ]\}}t t|ƒt|ƒA ƒ‘qS r*   rz  r{  r*   r*   r,   r~  k  s     z'Decimal.logical_xor.<locals>.<listcomp>r'   rR   r  r�  r*   r*   r,   rƒ  ]  s    
zDecimal.logical_xorc                 C   s¾   t |dd�}|d k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 rO  ©	r«   r   rQ   r‰   rÉ   r‘   rÇ   rœ   rQ  rR  r*   r*   r,   Úmax_magn  s&    


zDecimal.max_magc                 C   s¾   t |dd�}|d k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 rO  r†  rR  r*   r*   r,   Úmin_magŒ  s&    


zDecimal.min_magc                 C   s    |d k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Œ   rl  r:   rF   rý   rM   rJ  r   Ú_ignore_all_flagsrÉ   rÕ   rÙ   ©r1   r2   r?   Znew_selfr*   r*   r,   Ú
next_minusª  s$    

ÿzDecimal.next_minusc                 C   s    |d k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Œ   rm  r:   rF   rý   rM   rJ  r   r‰  rÉ   rÔ   rÙ   rŠ  r*   r*   r,   Ú	next_plusÁ  s$    

ÿzDecimal.next_plusc                 C   sÞ   t |dd�}|d k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Œ   ri   r   r;   r   r   r™   rB  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 kr\tƒ }| j|d	�rv| jrrd
S dS | jr€dS dS d S )Nr�   rº   r/   z	+InfinityrŠ   z	-Infinityz-Zeroz+ZerorL   z
-Subnormalz
+Subnormalz-Normalz+Normal)r’   r“   rŒ   rf  r;   r   re  )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 k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r®d| | }n|dk rÄ|| d … }||d … |d |…  }t| j| d¡pîd| jƒS ©NTr©   r'   rR   ©r   r«   r‘   rP   ri   r	   rF   rV   rŒ   r   r<   rk   r:   r;   rl   )r1   rŽ   r2   r?   ÚtorotÚrotdigÚtopadZrotatedr*   r*   r,   Úrotate4  s0    

 
 ÿzDecimal.rotatec                 C   s¾   |d krt ƒ }t|dd�}|  ||¡}|r.|S |jdkrB| t¡S d|j|j  }d|j|j  }|t|ƒ  krz|ks†n | t¡S |  	¡ r–t
| ƒS t| j| j| jt|ƒ ƒ}| |¡}|S )NTr©   r'   r®   r^   )r   r«   r‘   rP   ri   r	   rG   rF   rV   rŒ   r   r:   r;   r<   rÉ   )r1   rŽ   r2   r?   ZliminfZlimsupr‡   r*   r*   r,   ÚscalebU  s"    



zDecimal.scalebc                 C   s  |d k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r®d| | }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  s6    

 
 ÿzDecimal.shiftc                 C   s   | j t| ƒffS r)   )Ú	__class__re   r‹   r*   r*   r,   Ú
__reduce__•  s    zDecimal.__reduce__c                 C   s   t | ƒtkr| S |  t| ƒ¡S r)   ©Útyper   r™  re   r‹   r*   r*   r,   Ú__copy__˜  s    zDecimal.__copy__c                 C   s   t | ƒtkr| S |  t| ƒ¡S r)   r›  )r1   Zmemor*   r*   r,   Ú__deepcopy__�  s    zDecimal.__deepcopy__c                 C   sJ  |d krt ƒ }t||d�}| jrXt| j|ƒ}t|  ¡ ƒ}|d dkrL|d7 }t|||ƒS |d d krvddg|j |d< |d dkr˜t	| j| j
| jd ƒ} |j}|d }|d k	�r|d dkrÎ|  |d	 |¡} nF|d d
krê|  | |¡} n*|d dk�rt| j
ƒ|k�r|  ||¡} | �s@| jdk�r@|d d
k�r@|  d|¡} | jt| j
ƒ }	|d dk�r~| �sx|d k	�rxd	| }
nd	}
nB|d d
k�r’|	}
n.|d dk�rÀ| jdk�r¼|	dk�r¼|	}
nd	}
|
dk �ràd}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»   rR   rT   )r   Ú_parse_format_specifierrQ   Ú_format_signr;   re   rÇ   Ú_format_alignr¿   r:   r<   rP   rE   rF  rÐ   rk   Ú_format_number)r1   Z	specifierr2   rŸ  ÚspecrC   ÚbodyrE   r£  rÁ   rÂ   r{   r|   rW   r*   r*   r,   Ú
__format__¤  sZ    
 

zDecimal.__format__)rR   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__rc   Úclassmethodrv   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   r4  r=  r>  rA  r  rD  rÐ   rF  rH  r  Úto_integralrN  rÏ   r¸   r  r  r™   rT  rV  rQ  rZ  rÇ   rÈ   r[  rW   r^  r_  rC  r¯   rb  r“   rd  r’   re  rf  rk  rp  r6  rs  rt  rv  ry  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.*!'Fc                 C   s&   t  t¡}| |_||_||_||_|S r)   )rb   rc   r   r;   r<   rP   rQ   )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d¥dd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZeZd¦dd„Zdd„ Zdd„ Zdd„ ZdZd d!„ Zd"d#„ Zd$d%„ Zd§d'd(„Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Z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€„ ZCd�d‚„ ZDdƒd„„ ZEd…d†„ ZFd¨d‡dˆ„ZGd‰dŠ„ ZHd‹dŒ„ ZId�dŽ„ ZJd�d�„ ZKd‘d’„ ZLd“d”„ ZMd•d–„ ZNd—d˜„ ZOd™dš„ ZPd›dœ„ ZQd�dž„ ZRdŸd „ ZSd¡d¢„ ZTd£d¤„ ZUeUZVdS )©r   Nc
                    s>  zt }
W n tk
r   Y nX |d k	r*|n|
j| _|d k	r>|n|
j| _|d k	rR|n|
j| _|d k	rf|n|
j| _|d k	rz|n|
j| _|d k	rŽ|n|
j| _|	d kr¦g | _n|	| _ˆd krÂ|
j	 
¡ | _	n.tˆtƒsêt‡fdd„tˆ D ƒƒ| _	nˆ| _	ˆ d k�r
t td¡| _n0tˆ tƒ�s4t‡ fdd„tˆ  D ƒƒ| _nˆ | _d S )Nc                 3   s   | ]}|t |ˆ kƒfV  qd S r)   ©rV   ©r|  rñ   ©r9  r*   r,   Ú	<genexpr>I  s     z#Context.__init__.<locals>.<genexpr>r'   c                 3   s   | ]}|t |ˆ kƒfV  qd S r)   r¼  r½  ©r:  r*   r,   r¿  P  s     )r   Ú	NameErrorrF   rE   rB  rG   r¿   rû   Ú_ignored_flagsr9  rM   rd   r²  r8  Úfromkeysr:  )r1   rF   rE   rB  rG   r¿   rû   r:  r9  rÂ  Zdcr*   )r:  r9  r,   rµ  0  s.    

zContext.__init__c                 C   s”   t |tƒstd| ƒ‚|dkr<||kr†td||||f ƒ‚nJ|dkrb||k r†td||||f ƒ‚n$||k sr||kr†t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)rd   rV   rw   rq   rb   Ú__setattr__)r1   Únamery   ZvminZvmaxr*   r*   r,   Ú_set_integer_checkT  s    
zContext._set_integer_checkc                 C   s`   t |tƒstd| ƒ‚|D ]}|tkrtd| ƒ‚qtD ]}||kr8td| ƒ‚q8t | ||¡S )Nz%s must be a signal dictz%s is not a valid signal dict)rd   r²  rw   r8  ÚKeyErrorrb   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kr”td| ƒ‚t | ||¡S |dks²|dkr¾|  ||¡S |dkrÔt | ||¡S td| ƒ‚d S )NrF   r/   rŽ  rB  rÄ  r'   rG   r¿   rû   rE   z%s: invalid rounding moder:  r9  rÂ  z.'decimal.Context' object has no attribute '%s')rÇ  Ú_rounding_modesrw   rb   rÅ  rÊ  ÚAttributeError)r1   rÆ  ry   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~  ‹  s      z&Context.__reduce__.<locals>.<listcomp>c                 S   s   g | ]\}}|r|‘qS r*   r*   rÎ  r*   r*   r,   r~  Œ  s      )
r:  Úitemsr9  r™  rF   rE   rB  rG   r¿   rû   )r1   r:  r9  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~  ˜  s      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~  š  s      ztraps=[ú))rr   Úvarsr:  rÏ  rs   r9  )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   rB  rG   r¿   rû   r:  r9  rÂ  ©r1   Zncr*   r*   r,   rI  ¨  s       þzContext._shallow_copyc              
   C   s6   t | j| j| j| j| j| j| j ¡ | j	 ¡ | j
ƒ	}|S r)   )r   rF   rE   rB  rG   r¿   rû   r:  rM   r9  rÂ  rØ  r*   r*   r,   rM   ¯  s      ýzContext.copyc                 G   sZ   t  ||¡}|| jkr(|ƒ j| f|žŽ S d| j|< | j| sN|ƒ j| f|žŽ S ||ƒ‚d S rc  )Ú_condition_maprI   rÂ  r3   r:  r9  )r1   Z	conditionZexplanationr+   Úerrorr*   r*   r,   ri   ¸  s    


zContext._raise_errorc                 C   s
   | j tŽ S r)   )Ú_ignore_flagsr8  r‹   r*   r*   r,   r‰  Î  s    zContext._ignore_all_flagsc                 G   s   | j t|ƒ | _ t|ƒS r)   )rÂ  ro   )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õ   )rd   rp   ro   rÂ  Úremove)r1   r:  rÖ  r*   r*   r,   Ú_regard_flagsÙ  s    zContext._regard_flagsc                 C   s   t | j| j d ƒS rc  )rV   rB  rF   r‹   r*   r*   r,   rÙ   ã  s    zContext.Etinyc                 C   s   t | j| j d ƒS rc  )rV   rG   rF   r‹   r*   r*   r,   rý   ç  s    zContext.Etopc                 C   s   | j }|| _ |S r)   )rE   )r1   rœ  rE   r*   r*   r,   rJ  ë  s    zContext._set_roundingrR   c                 C   sj   t |tƒr*|| ¡ ksd|kr*|  td¡S t|| d�}| ¡ r`t|jƒ| j	| j
 kr`|  td¡S | | ¡S )NrS   zAtrailing or leading whitespace and underscores are not permitted.rL   zdiagnostic info too long in NaN)rd   re   rg   ri   r   r   r‰   rk   r<   rF   rû   rÉ   )r1   rj  r‡   r*   r*   r,   Úcreate_decimalþ  s    ÿÿzContext.create_decimalc                 C   s   t  |¡}| | ¡S r)   )r   rv   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 rU  )r«   rÎ   ©r1   r3  r*   r*   r,   rm   !  s    zContext.absc                 C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S ©NTr©   rL   úUnable to convert %s to Decimal)r«   rÔ   rŸ   rw   ©r1   r3  r}  rá   r*   r*   r,   Úadd6  s
    zContext.addc                 C   s   t | | ¡ƒS r)   )re   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.)rd   r   rw   rT  rà  r*   r*   r,   rT  N  s    	
zContext.canonicalc                 C   s   t |dd�}|j|| d�S rU  )r«   r¬   ©r1   r3  r}  r*   r*   r,   r¬   [  s    !zContext.comparec                 C   s   t |dd�}|j|| d�S rU  )r«   rV  ræ  r*   r*   r,   rV    s     zContext.compare_signalc                 C   s   t |dd�}| |¡S r¨   )r«   rQ  ræ  r*   r*   r,   rQ  ¢  s    zContext.compare_totalc                 C   s   t |dd�}| |¡S r¨   )r«   rZ  ræ  r*   r*   r,   rZ  ¿  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kr0td| ƒ‚n|S d S rá  )r«   rÞ   rŸ   rw   rã  r*   r*   r,   Údivide  s
    zContext.dividec                 C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S rá  )r«   rí   rŸ   rw   rã  r*   r*   r,   Ú
divide_int+  s
    zContext.divide_intc                 C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S rá  )r«   rç   rŸ   rw   rã  r*   r*   r,   rÚ   B  s
    zContext.divmodc                 C   s   t |dd�}|j| d�S rU  )r«   rW   rà  r*   r*   r,   rW   W  s    zContext.expc                 C   s   t |dd�}|j||| d�S rU  )r«   r  )r1   r3  r}  rL  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.)rd   r   rw   r^  rà  r*   r*   r,   r^  †  s    	
zContext.is_canonicalc                 C   s   t |dd�}| ¡ S r¨   )r«   r_  rà  r*   r*   r,   r_  “  s    zContext.is_finitec                 C   s   t |dd�}| ¡ S r¨   )r«   rC  rà  r*   r*   r,   rC  ©  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 rU  )r«   rb  rà  r*   r*   r,   rb  È  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«   rd  rà  r*   r*   r,   rd  î  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 rU  )r«   re  rà  r*   r*   r,   re    s    zContext.is_subnormalc                 C   s   t |dd�}| ¡ S r¨   )r«   rf  rà  r*   r*   r,   rf  %  s    zContext.is_zeroc                 C   s   t |dd�}|j| d�S rU  )r«   rp  rà  r*   r*   r,   rp  6  s    z
Context.lnc                 C   s   t |dd�}|j| d�S rU  )r«   rs  rà  r*   r*   r,   rs  L  s    zContext.log10c                 C   s   t |dd�}|j| d�S rU  )r«   rt  rà  r*   r*   r,   rt  h  s    zContext.logbc                 C   s   t |dd�}|j|| d�S rU  )r«   r‚  ræ  r*   r*   r,   r‚  ‚  s    zContext.logical_andc                 C   s   t |dd�}|j| d�S rU  )r«   r„  rà  r*   r*   r,   r„  �  s    zContext.logical_invertc                 C   s   t |dd�}|j|| d�S rU  )r«   r…  ræ  r*   r*   r,   r…  °  s    zContext.logical_orc                 C   s   t |dd�}|j|| d�S rU  )r«   rƒ  ræ  r*   r*   r,   rƒ  Ë  s    zContext.logical_xorc                 C   s   t |dd�}|j|| d�S rU  )r«   rÏ   ræ  r*   r*   r,   rÏ   æ  s    zContext.maxc                 C   s   t |dd�}|j|| d�S rU  )r«   r‡  ræ  r*   r*   r,   r‡    s    zContext.max_magc                 C   s   t |dd�}|j|| d�S rU  )r«   r¸   ræ  r*   r*   r,   r¸     s    zContext.minc                 C   s   t |dd�}|j|| d�S rU  )r«   rˆ  ræ  r*   r*   r,   rˆ  -  s    zContext.min_magc                 C   s   t |dd�}|j| d�S rU  )r«   rË   rà  r*   r*   r,   Úminus>  s    zContext.minusc                 C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S rá  )r«   rØ   rŸ   rw   rã  r*   r*   r,   ÚmultiplyO  s
    zContext.multiplyc                 C   s   t |dd�}|j| d�S rU  )r«   r‹  rà  r*   r*   r,   r‹  o  s    zContext.next_minusc                 C   s   t |dd�}|j| d�S rU  )r«   rŒ  rà  r*   r*   r,   rŒ  ƒ  s    zContext.next_plusc                 C   s   t |dd�}|j|| d�S rU  )r«   r�  ræ  r*   r*   r,   r�  —  s     zContext.next_towardc                 C   s   t |dd�}|j| d�S rU  )r«   rA  rà  r*   r*   r,   rA  º  s    zContext.normalizec                 C   s   t |dd�}|j| d�S rU  )r«   r�  rà  r*   r*   r,   r�  Ò  s    /zContext.number_classc                 C   s   t |dd�}|j| d�S rU  )r«   rÌ   rà  r*   r*   r,   Úplus  s    zContext.plusc                 C   s:   t |dd�}|j||| d�}|tkr2td| ƒ‚n|S d S rá  )r«   r=  rŸ   rw   )r1   r3  r}  r  rá   r*   r*   r,   Úpower  s
    IzContext.powerc                 C   s   t |dd�}|j|| d�S rU  )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kr0td| ƒ‚n|S d S rá  )r«   ré   rŸ   rw   rã  r*   r*   r,   rÜ   §  s
    zContext.remainderc                 C   s   t |dd�}|j|| d�S rU  )r«   rì   ræ  r*   r*   r,   rì   Í  s    zContext.remainder_nearc                 C   s   t |dd�}|j|| d�S rU  )r«   r—  ræ  r*   r*   r,   r—  ï  s    zContext.rotatec                 C   s   t |dd�}| |¡S r¨   )r«   rD  ræ  r*   r*   r,   rD    s    zContext.same_quantumc                 C   s   t |dd�}|j|| d�S rU  )r«   r˜  ræ  r*   r*   r,   r˜  $  s    zContext.scalebc                 C   s   t |dd�}|j|| d�S rU  )r«   rÛ   ræ  r*   r*   r,   rÛ   7  s    zContext.shiftc                 C   s   t |dd�}|j| d�S rU  )r«   rN  rà  r*   r*   r,   rN  U  s    zContext.sqrtc                 C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S rá  )r«   rÕ   rŸ   rw   rã  r*   r*   r,   Úsubtractu  s
    zContext.subtractc                 C   s   t |dd�}|j| d�S rU  )r«   rÅ   rà  r*   r*   r,   rÅ   Œ  s    zContext.to_eng_stringc                 C   s   t |dd�}|j| d�S rU  )r«   rÃ   rà  r*   r*   r,   Úto_sci_string¨  s    zContext.to_sci_stringc                 C   s   t |dd�}|j| d�S rU  )r«   rH  rà  r*   r*   r,   rH  °  s    zContext.to_integral_exactc                 C   s   t |dd�}|j| d�S rU  )r«   r  rà  r*   r*   r,   r  Î  s    zContext.to_integral_value)	NNNNNNNNN)N)rR   )N)Wr5   r6   r7   rµ  rÇ  rÊ  rÅ  rÍ  rš  r¹   rN   r×  rI  rM   r�  ri   r‰  rÛ  rÝ  rµ   rÙ   rý   rJ  rÞ  rß  rm   rä  rå  rT  r¬   rV  rQ  rZ  rÇ   rç  rÈ   r[  rè  ré  rÚ   rW   r  r^  r_  rC  r¯   rb  r“   rd  r’   re  rf  rp  rs  rt  r‚  r„  r…  rƒ  rÏ   r‡  r¸   rˆ  rê  rë  r‹  rŒ  r�  rA  r�  rì  rí  r  r‘  rÜ   rì   r—  rD  r˜  rÛ   rN  rî  rÅ   rï  rH  r  r³  r*   r*   r*   r,   r     s´            þ
$

$#% #2
P:&" c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )rn   ©rC   rV   rW   Nc                 C   sf   |d krd | _ d| _d | _nFt|tƒrD|j| _ t|jƒ| _|j| _n|d | _ |d | _|d | _d S )Nr'   r/   r^   )rC   rV   rW   rd   r   r;   r<   rP   )r1   ry   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,   rn   î  s   
rn   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­   )rW   rk   re   rV   r¸   )rÒ   rÓ   rF   ZtmprŽ   Ztmp_lenZ	other_lenrW   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­   rR   )re   rm   rk   Ú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/   )rq   )r9   r3  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Ú   )r3  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|| |ƒ }qºt|| |ƒS )Nr'   r/   éöÿÿÿr\   rŠ   )rm   rô  rò  ró  rV   rk   re   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r”d| }|| | }|dkrZ| d| 9 } nt| d|  ƒ} t| |ƒ}t|ƒ}t|| |ƒ}|| }	nd}t|d|  ƒ}	t|	| dƒS ©Nr^   r/   r'   r­   r'  )rk   re   rô  rû  Ú_log10_digits)
rL  r½   r+  rM  r„   rö  r…   Úlog_dZlog_10Zlog_tenpowerr*   r*   r,   rr  Œ  s     

rr  c           	      C   sÎ   |d7 }t t| ƒƒ}|| || dk }|dkrr|| | }|dkrR| d| 9 } nt| d|  ƒ} t| d| ƒ}nd}|r¼t tt|ƒƒƒd }|| dkr¶t|t|| ƒ d| ƒ}qÀd}nd}t|| dƒS rü  )rk   re   rô  rû  rm   rý  )	rL  r½   r+  rM  r„   r…   rþ  r<  Z	f_log_tenr*   r*   r,   rn  ®  s"    rn  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r€d}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'  rR   rŠ   r/   )rq   rk   r}   re   rô  rû  rñ  rV   )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(  rV   rk   re   rô  r  )	r,  rö  r÷  rø  rù  r/  ZMshiftr  r…   r*   r*   r,   Ú_iexpÿ  s    
r  c           	      C   s–   |d7 }t d|tt| ƒƒ d ƒ}|| }|| }|dkrH| d|  }n| d|   }t|t|ƒƒ\}}t|d| ƒ}tt|d| ƒdƒ|| d fS )Nr^   r'   r/   r­   iè  r\   )rÏ   rk   re   rÚ   rý  rô  r  )	rL  r½   r+  r<  rà   rÛ   ZcshiftZquotr2  r*   r*   r,   r\  $  s    r\  c                 C   sè   t tt|ƒƒƒ| }t| ||| d ƒ}|| }|dkrJ|| d|  }nt|| d|  ƒ}|dkr´t t| ƒƒ| dk|dkkržd|d  d d|  }	}
qàd| d |  }	}
n,t||d  |d ƒ\}	}
t|	dƒ}	|
d7 }
|	|
fS )Nr/   r'   r­   )rk   re   rm   rn  rô  r\  )r-  r.  r0  r1  r+  r}  ZlxcrÛ   Zpcr†   rW   r*   r*   r,   r7  H  s    
r7  r'  éF   é5   é(   é   rg  é   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'  )rq   re   rk   )rL  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â  )rd   r   rV   ru   rv   rw   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ƒr¬tƒ }|r’d|jt< n| td¡ | t |¡fS ttfS )Nr'   r/   ra   )rd   r   Ú_numbersZRationalrQ   r:   r;   re   rV   r<   ÚdenominatorrP   Ú	numeratorZComplexr÷   rô   ru   r   r:  r   ri   rv   rŸ   )r1   rŽ   r�   r2   r*   r*   r,   rž   �  s(    
þ
ÿrž   r&  i?B iÁ½ðÿ)rF   rE   r9  r:  rG   rB  r¿   rû   r_   )rF   rE   r9  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 krtd|  ƒ‚| ¡ }|d }|d }|d d k	|d< |d rv|d k	rbtd|  ƒ‚|d k	rvtd|  ƒ‚|p|d|d< |pˆd|d< |d	 d kr¢d
|d	< t|d p®dƒ|d< |d d k	rÒt|d ƒ|d< |d dkrþ|d d ksö|d dkrþd|d< |d dk�rfd|d< |d k�r&t ¡ }|d d k	�r@td|  ƒ‚|d |d< |d |d< |d |d< n*|d d k�r|d|d< ddg|d< d|d< |S )NzInvalid format specifier: ÚfillÚalignÚzeropadz7Fill character conflicts with '0' in format specifier: z2Alignment conflicts with '0' in format specifier: ú ú>rC   rU   ÚminimumwidthrR   r£  r'   rœ  ZgGnr/   r9   r¡  Úthousands_sepzJExplicit thousands separator conflicts with 'n' type in format specifier: ÚgroupingÚdecimal_pointrT   r\   r¼   )Ú_parse_format_specifier_regexÚmatchrq   Ú	groupdictrV   Ú_localeÚ
localeconv)Úformat_specrŸ  rz   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r¨t |ƒd }|d |… |  | ||d …  }ntd	ƒ‚|S )
Nr  r  r  ú<r  ú=ú^r^   zUnrecognised alignment field)rk   rq   )	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$  rk   r  ÚCHAR_MAXrq   )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/   rR   )r'  rq   r¸   rÏ   rk   rr   rs   Úreversed)r}   r©  Ú	min_widthÚsepr  ÚgroupsrM  r*   r*   r,   Ú_insert_thousands_sepŸ  s     $$r,  c                 C   s$   | rdS |d dkr|d S dS d S )NrU   rC   z +rT   r*   )Úis_negativer©  r*   r*   r,   r¦  Ä  s
    r¦  c                 C   s²   t | |ƒ}|s|d r"|d | }|dks6|d dk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¦  Úformatrk   r,  r§  )r-  r{   r|   rW   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   rw   r   r8  rÙ  rË  ZcontextvarsZ
ContextVarrH   r   r   r   rb   r   r:   ÚNumberÚregisterrO   r   rn   rÑ   rV   rƒ   r(  r)  rò  ró  rô  rû  rr  rn  rÿ  r   rý  r  r\  r7  r*  r«   rž   r   r   r   ÚreÚcompileÚVERBOSEÚ
IGNORECASEr  rf   r  r  ÚDOTALLr  Zlocaler  r¥  r§  r'  r,  r¦  r¨  rm  rl  r>   rX  r5  rW  rA   Ú	hash_infoÚmodulusr³   rŽ  r±   rï   r°   r²   r´   r*   r*   r*   r,   Ú<module>u   sÐ                          à#

&
   ÿ   ý   ÿ

.                          
             ^

0",#
%$+       þ

* ù ý ý
ï
ó
P
%
)