509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \Tƒ ã            $   @   sF  d ddddddddd	d
dddddddddddddddddddddd d!d"d#g$Z eZd$Zd%Zd&Zd'd(lZd'd(lZd'd(l	Z	yd'd)l
mZ edd*ƒZ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e	jd”krèd1Zd1Zd•Znd2Zd2Zd–Zeed0  ZG d3d„ deƒZG d4d„ deƒZG d5d„ deƒZ G d6d„ de ƒZ!G d7d	„ d	ee"ƒZ#G d8d„ de ƒZ$G d9d„ 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 d?d„ de&e(e)ƒZ+G d@d„ dee,ƒZ-ee#e&e*e(e+e e)e-g	Z.e!e e$e e%e e'e iZ/eeeeeeeefZ0yd'd(l1Z1W n. ek
�rd   G dAdB„ dBe2ƒZ3e3ƒ Z1[3Y nX y
e1j4 W n> e5k
�r®   e6e1j7ƒ dCƒ�rše1j7ƒ `8dDd„ Z9dEd„ Z:Y n6X e1j4ƒ Z4e6e4dCƒ�rÈe4`8e4fdFd„Z:e4fdGd„Z9[1[4d—dHd„Z;G dId „ d e2ƒZ<d˜dKdL„Z=ej>j?e<ƒ G dMdN„ dNe2ƒZ@G dOd„ de2ƒZAG dPdQ„ dQe2ƒZBd™dRdS„ZCeDjEZFdTdU„ ZGdVdW„ ZHdXdY„ ZIdZd[„ ZJdšd]d^„ZKd_d`„ ZLdadb„ ZMG dcdd„ dde2ƒZNeNƒ jOZPd›dedf„ZQdgdh„ ZRdidj„ ZSdkdldmdndodpdqdrdsdtœ	fdudv„ZTdœdwdx„ZUd�dydz„ZVeAd{ee#e*e gg d|džd0d'd}�ZWeAd~ee#e*e ee+gg d�ZXeAd~eg g d�ZYd'd(lZZZeZj[d€eZj\eZj]B ƒj^Z_eZj[d�ƒj^Z`eZj[d‚ƒj^ZaeZj[dƒeZj\eZjbB ƒZc[Zyd'd(ldZeW n ek
�rª   Y nX dŸd„d…„Zfd†d‡„ Zgdˆd‰„ Zhd dŠd‹„ZidŒd�„ ZjdŽd�„ Zke<d�ƒZle<d‘ƒZme<d’ƒZne<d'ƒZoe<d0ƒZpe<d¡ƒZqelemfZre	jsjtZue	jsjvZwe	jsjxZyezdreud. euƒZ{[	d(S )¢ÚDecimalÚContextÚDecimalTupleÚDefaultContextÚBasicContextÚExtendedContextÚDecimalExceptionÚClampedÚInvalidOperationÚDivisionByZeroÚInexactÚRoundedÚ	SubnormalÚOverflowÚ	UnderflowÚFloatOperationÚDivisionImpossibleÚInvalidContextÚConversionSyntaxÚDivisionUndefinedÚ
ROUND_DOWNÚROUND_HALF_UPÚROUND_HALF_EVENÚROUND_CEILINGÚROUND_FLOORÚROUND_UPÚROUND_HALF_DOWNÚ
ROUND_05UPÚ
setcontextÚ
getcontextÚlocalcontextÚMAX_PRECÚMAX_EMAXÚMIN_EMINÚ	MIN_ETINYÚHAVE_THREADSÚdecimalz1.70z2.4.2é    N)Ú
namedtuplezsign digits exponentc              G   s   | S )N© )Úargsr(   r(   ú"/usr/lib64/python3.6/_pydecimal.pyÚ<lambda>¡   s    r+   Té   é?   é   l   ÿÇNÎZoi@üTc               @   s   e Zd Zdd„ ZdS )r   c             G   s   d S )Nr(   )ÚselfÚcontextr)   r(   r(   r*   ÚhandleÏ   s    zDecimalException.handleN)Ú__name__Ú
__module__Ú__qualname__r1   r(   r(   r(   r*   r   ¼   s   c               @   s   e Zd ZdS )r   N)r2   r3   r4   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ƒ}|j|ƒS tS )Nr&   ÚnT)Ú_dec_from_tripleÚ_signÚ_intÚ_fix_nanÚ_NaN)r/   r0   r)   Úansr(   r(   r*   r1   ö   s    
zInvalidOperation.handleN)r2   r3   r4   r1   r(   r(   r(   r*   r	   ß   s   c               @   s   e Zd Zdd„ ZdS )r   c             G   s   t S )N)r:   )r/   r0   r)   r(   r(   r*   r1     s    zConversionSyntax.handleN)r2   r3   r4   r1   r(   r(   r(   r*   r   ü   s   c               @   s   e Zd Zdd„ ZdS )r
   c             G   s   t | S )N)Ú_SignedInfinity)r/   r0   Úsignr)   r(   r(   r*   r1     s    zDivisionByZero.handleN)r2   r3   r4   r1   r(   r(   r(   r*   r
     s   c               @   s   e Zd Zdd„ ZdS )r   c             G   s   t S )N)r:   )r/   r0   r)   r(   r(   r*   r1     s    zDivisionImpossible.handleN)r2   r3   r4   r1   r(   r(   r(   r*   r     s   c               @   s   e Zd Zdd„ ZdS )r   c             G   s   t S )N)r:   )r/   r0   r)   r(   r(   r*   r1   )  s    zDivisionUndefined.handleN)r2   r3   r4   r1   r(   r(   r(   r*   r   !  s   c               @   s   e Zd ZdS )r   N)r2   r3   r4   r(   r(   r(   r*   r   ,  s   
c               @   s   e Zd Zdd„ ZdS )r   c             G   s   t S )N)r:   )r/   r0   r)   r(   r(   r*   r1   C  s    zInvalidContext.handleN)r2   r3   r4   r1   r(   r(   r(   r*   r   8  s   c               @   s   e Zd ZdS )r   N)r2   r3   r4   r(   r(   r(   r*   r   F  s   
c               @   s   e Zd ZdS )r   N)r2   r3   r4   r(   r(   r(   r*   r   R  s   	c               @   s   e Zd Zdd„ ZdS )r   c             G   sŽ   |j ttttfkrt| S |dk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   r<   r   r6   ÚprecÚEmaxr   )r/   r0   r=   r)   r(   r(   r*   r1   s  s    


zOverflow.handleN)r2   r3   r4   r1   r(   r(   r(   r*   r   ]  s   c               @   s   e Zd ZdS )r   N)r2   r3   r4   r(   r(   r(   r*   r   ƒ  s   c               @   s   e Zd ZdS )r   N)r2   r3   r4   r(   r(   r(   r*   r   ’  s   c               @   s   e Zd Zefdd„ZdS )ÚMockThreadingc             C   s
   |j t S )N)ÚmodulesÚ	__xname__)r/   Úsysr(   r(   r*   Úlocal¼  s    zMockThreading.localN)r2   r3   r4   rE   rF   r(   r(   r(   r*   rB   »  s   rB   Ú__decimal_context__c             C   s,   | t ttfkr| jƒ } | jƒ  | tjƒ _d S )N)r   r   r   ÚcopyÚclear_flagsÚ	threadingÚcurrent_threadrG   )r0   r(   r(   r*   r   Ë  s    c              C   s4   y
t jƒ jS  tk
r.   tƒ } | t jƒ _| S X d S )N)rJ   rK   rG   ÚAttributeErrorr   )r0   r(   r(   r*   r   Ò  s    

c             C   s,   y| j S  tk
r&   tƒ }|| _ |S X d S )N)rG   rL   r   )Ú_localr0   r(   r(   r*   r   æ  s    c             C   s(   | t ttfkr| jƒ } | jƒ  | |_d S )N)r   r   r   rH   rI   rG   )r0   rM   r(   r(   r*   r   ô  s    c             C   s   | d krt ƒ } t| ƒS )N)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ÿd0d1„Z�d d2d3„Z�dd5d6„Z�dd7d8„ZeZ�dd9d:„Z�dd;d<„Z�dd=d>„Z e Z!�dd?d@„Z"dAdB„ Z#�ddCdD„Z$�ddEdF„Z%�d	dGdH„Z&�d
dIdJ„Z'�ddKdL„Z(�ddMdN„Z)�ddOdP„Z*�ddQdR„Z+dSdT„ Z,dUdV„ Z-e-Z.dWdX„ Z/e0e/ƒZ/dYdZ„ Z1e0e1ƒZ1d[d\„ Z2d]d^„ Z3d_d`„ Z4dadb„ Z5dcdd„ Z6dedf„ Z7dgdh„ Z8didj„ Z9dkdl„ Z:dmdn„ Z;dodp„ Z<dqdr„ Z=e>e6e7e8e9e:e;e<e=ds�Z?�ddtdu„Z@dvdw„ ZAdxdy„ ZB�ddzd{„ZC�dd|d}„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�d0dædç„Zz�d1dèdé„Z{�d2dêdë„Z|dìdí„ Z}dîdï„ Z~dðdñ„ Z�d3dòdó„Z€dS (4  r   Ú_expr8   r7   Ú_is_specialÚ0Nc             C   sŒ  t j| ƒ}t|tƒ�r$t|jƒ jddƒƒ}|d krP|d kr@tƒ }|jt	d| ƒS |j
dƒdkrfd|_nd|_|j
dƒ}|d k	rÆ|j
d	ƒpŠd}t|j
d
ƒpšdƒ}tt|| ƒƒ|_|t|ƒ |_d|_nZ|j
dƒ}|d k	�rtt|pädƒƒjdƒ|_|j
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ƒ�o|d dk�stdƒ‚|d |_|d dk�rHd|_|d |_d|_nÚg }	x^|d D ]R}
t|
tƒ�ržd|
  k�ozdkn  �rž|	�s’|
dk�r¦|	j|
ƒ ntdƒ‚�qVW |d dk�rÞdjtt|	ƒƒ|_|d |_d|_nDt|d tƒ�rdjtt|	�p dgƒƒ|_|d |_d|_ntdƒ‚|S t|tƒ�r||d k�rBtƒ }|jtdƒ tj|ƒ}|j|_|j|_|j|_|j|_|S t d| ƒ‚d S )NÚ_Ú zInvalid literal for Decimal: %rr=   ú-r.   r&   ÚintZfracÚexprQ   FÚdiagÚsignalÚNr5   ÚFTé   ztInvalid tuple size in creation of Decimal from list or tuple.  The list or tuple should have exactly three elements.z|Invalid sign.  The first value in the tuple should be an integer; either 0 for a positive number or 1 for a negative number.r,   é	   zTThe second value in the tuple must be composed of integers in the range 0 through 9.zUThe third value in the tuple must be an integer, or one of the strings 'F', 'n', 'N'.z;strict semantics for mixing floats and Decimals are enabledzCannot convert %r to Decimal)r&   r.   )r5   rY   )!ÚobjectÚ__new__Ú
isinstanceÚstrÚ_parserÚstripÚreplacer   Ú_raise_errorr   Úgroupr7   rU   r8   ÚlenrO   rP   ÚlstripÚabsr   Ú_WorkRepr=   rV   ÚlistÚtupleÚ
ValueErrorÚappendÚjoinÚmapÚfloatr   Ú
from_floatÚ	TypeError)ÚclsÚvaluer0   r/   ÚmÚintpartÚfracpartrV   rW   ÚdigitsÚdigitr(   r(   r*   r^   4  s¬    







(



zDecimal.__new__c             C   s¬   t |tƒr| |ƒS t |tƒs$tdƒ‚tj|ƒs8tj|ƒrD| t|ƒƒS tjd|ƒdkrZd}nd}t	|ƒj
ƒ \}}|jƒ d }t|t|d|  ƒ| ƒ}| tkr |S | |ƒS d S )Nzargument must be int or float.g      ð?r&   r.   é   )r_   rU   rp   rr   Ú_mathZisinfZisnanÚreprZcopysignrh   Úas_integer_ratioÚ
bit_lengthr6   r`   r   )rs   Úfr=   r5   ÚdÚkÚresultr(   r(   r*   rq   Ê  s    

zDecimal.from_floatc             C   s(   | j r$| j}|dkrdS |dkr$dS dS )Nr5   r.   rY   r,   r&   )rP   rO   )r/   rV   r(   r(   r*   Ú_isnanò  s    zDecimal._isnanc             C   s   | j dkr| jrdS dS dS )NrZ   r.   r&   éÿÿÿÿ)rO   r7   )r/   r(   r(   r*   Ú_isinfinity  s
    
zDecimal._isinfinityc             C   s|   | j ƒ }|d krd}n|j ƒ }|s&|rx|d kr4tƒ }|dkrJ|jtd| ƒS |dkr`|jtd|ƒS |rn| j|ƒS |j|ƒS dS )NFr,   ÚsNaNr&   )rƒ   r   rd   r	   r9   )r/   Úotherr0   Ú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| jƒ r0|jtd| ƒS |jƒ rF|jtd|ƒS | jƒ r\|jtd| ƒS |jƒ rr|jtd|ƒS dS )Nzcomparison involving sNaNzcomparison involving NaNr&   )r   rP   Úis_snanrd   r	   Úis_qnan)r/   r‡   r0   r(   r(   r*   Ú_compare_check_nans.  s(    zDecimal._compare_check_nansc             C   s   | j p| jdkS )NrQ   )rP   r8   )r/   r(   r(   r*   Ú__bool__O  s    zDecimal.__bool__c             C   s  | j s|j r8| jƒ }|jƒ }||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 | jƒ }|jƒ }||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.   rQ   r„   r„   r„   r„   r„   r„   r„   r„   )rP   r…   r7   Úadjustedr8   rO   )r/   r‡   Zself_infZ	other_infÚself_adjustedZother_adjustedÚself_paddedZother_paddedr(   r(   r*   Ú_cmpV  s>    



zDecimal._cmpc             C   s<   t | |dd�\} }|tkr|S | j||ƒr.dS | j|ƒdkS )NT)Úequality_opFr&   )Ú_convert_for_comparisonÚNotImplementedrŠ   r’   )r/   r‡   r0   r(   r(   r*   Ú__eq__–  s    zDecimal.__eq__c             C   s<   t | |ƒ\} }|tkr|S | j||ƒ}|r.dS | j|ƒdk S )NFr&   )r”   r•   r�   r’   )r/   r‡   r0   r;   r(   r(   r*   Ú__lt__ž  s    zDecimal.__lt__c             C   s<   t | |ƒ\} }|tkr|S | j||ƒ}|r.dS | j|ƒdkS )NFr&   )r”   r•   r�   r’   )r/   r‡   r0   r;   r(   r(   r*   Ú__le__§  s    zDecimal.__le__c             C   s<   t | |ƒ\} }|tkr|S | j||ƒ}|r.dS | j|ƒdkS )NFr&   )r”   r•   r�   r’   )r/   r‡   r0   r;   r(   r(   r*   Ú__gt__°  s    zDecimal.__gt__c             C   s<   t | |ƒ\} }|tkr|S | j||ƒ}|r.dS | j|ƒdkS )NFr&   )r”   r•   r�   r’   )r/   r‡   r0   r;   r(   r(   r*   Ú__ge__¹  s    zDecimal.__ge__c             C   s>   t |dd�}| js|r0|jr0| j||ƒ}|r0|S t| j|ƒƒS )NT)Úraiseit)Ú_convert_otherrP   rŠ   r   r’   )r/   r‡   r0   r;   r(   r(   r*   ÚcompareÂ  s    zDecimal.comparec             C   s’   | j r4| jƒ rtdƒ‚n| jƒ 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.   r,   r„   éþÿÿÿ)rP   r‹   rr   Úis_nanÚ_PyHASH_NANr7   Ú_PyHASH_INFrO   ÚpowÚ_PyHASH_MODULUSÚ_PyHASH_10INVrU   r8   )r/   Zexp_hashZhash_r;   r(   r(   r*   Ú__hash__Ô  s    

zDecimal.__hash__c             C   s   t | jttt| jƒƒ| jƒS )N)r   r7   rk   ro   rU   r8   rO   )r/   r(   r(   r*   Úas_tupleî  s    zDecimal.as_tuplec             C   sØ   | j r | jƒ rtdƒ‚ntdƒ‚| s(dS t| jƒ}| jdkrR|d| j  d }}nr| j }x(|dkr‚|d dkr‚|d }|d8 }q\W | j }t|| @ jƒ d |ƒ}|r¸||L }||8 }d| |> }| j	rÐ| }||fS )Nz#cannot convert NaN to integer ratioz(cannot convert Infinity to integer ratior&   r.   rž   rz   )r&   r.   )
rP   r    rl   ÚOverflowErrorrU   r8   rO   Úminr~   r7   )r/   r5   r€   Zd5Zd2Zshift2r(   r(   r*   r}   õ  s,    


zDecimal.as_integer_ratioc             C   s   dt | ƒ S )NzDecimal('%s'))r`   )r/   r(   r(   r*   Ú__repr__'  s    zDecimal.__repr__Fc       	      C   sd  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 }nN|t| jƒk� rú| jd|t| jƒ   }d}n | jd |… }d| j|d …  }||k�r*d}n*|d k�r:tƒ }ddg|j d||   }|| | | S )NrS   rT   rZ   ZInfinityr5   ÚNaNr†   r&   é   r.   rQ   r[   Ú.ÚeÚEz%+diúÿÿÿ)r7   rP   rO   r8   rf   r   Úcapitals)	r/   Úengr0   r=   Ú
leftdigitsÚdotplacerv   rw   rV   r(   r(   r*   Ú__str__,  s:    




zDecimal.__str__c             C   s   | j d|d�S )NT)r±   r0   )r´   )r/   r0   r(   r(   r*   Úto_eng_string`  s    zDecimal.to_eng_stringc             C   sT   | j r| j|d�}|r|S |d kr(tƒ }|  rB|jtkrB| jƒ }n| jƒ }|j|ƒS )N)r0   )rP   rŠ   r   r?   r   Úcopy_absÚcopy_negateÚ_fix)r/   r0   r;   r(   r(   r*   Ú__neg__i  s    
zDecimal.__neg__c             C   sT   | j r| j|d�}|r|S |d kr(tƒ }|  rB|jtkrB| jƒ }nt| ƒ}|j|ƒS )N)r0   )rP   rŠ   r   r?   r   r¶   r   r¸   )r/   r0   r;   r(   r(   r*   Ú__pos__  s    
zDecimal.__pos__Tc             C   sJ   |s| j ƒ S | jr&| j|d�}|r&|S | jr:| j|d�}n| j|d�}|S )N)r0   )r¶   rP   rŠ   r7   r¹   rº   )r/   Úroundr0   r;   r(   r(   r*   Ú__abs__”  s    zDecimal.__abs__c       
      C   sl  t |ƒ}|tkr|S |d kr"tƒ }| js.|jr‚| j||ƒ}|rB|S | jƒ rr| j|jkrj|jƒ rj|jtdƒS t	| ƒS |jƒ r‚t	|ƒS t
| j|jƒ}d}|jtkr®| j|jkr®d}|  rê| rêt
| j|jƒ}|rÐd}t|d|ƒ}|j|ƒ}|S | �s"t||j|j d ƒ}|j||jƒ}|j|ƒ}|S |�sZt|| j|j d ƒ}| j||jƒ}|j|ƒ}|S t| ƒ}t|ƒ}t|||jƒ\}}tƒ }	|j|jk�rþ|j|jk�r¸t|d|ƒ}|j|ƒ}|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	|	ƒ}|j|ƒ}|S )Nz
-INF + INFr&   r.   rQ   )r&   r&   )rœ   r•   r   rP   rŠ   r…   r7   rd   r	   r   r©   rO   r?   r   r6   r¸   Úmaxr@   Ú_rescaleri   Ú
_normalizer=   rU   rV   )
r/   r‡   r0   r;   rV   Znegativezeror=   Ú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|jƒ |d�S )N)r0   )rœ   r•   rP   rŠ   rÂ   r·   )r/   r‡   r0   r;   r(   r(   r*   Ú__sub__  s    zDecimal.__sub__c             C   s"   t |ƒ}|tkr|S |j| |d�S )N)r0   )rœ   r•   rÃ   )r/   r‡   r0   r(   r(   r*   Ú__rsub__  s    zDecimal.__rsub__c             C   sD  t |ƒ}|tkr|S |d kr"tƒ }| j|jA }| js:|jrŽ| j||ƒ}|rN|S | jƒ rn|sf|jtdƒS t	| S |jƒ rŽ| s†|jtdƒS t	| S | j
|j
 }|  s¦| rÀt|d|ƒ}|j|ƒ}|S | jdkræt||j|ƒ}|j|ƒ}|S |jdk�rt|| j|ƒ}|j|ƒ}|S t| ƒ}t|ƒ}t|t|j|j ƒ|ƒ}|j|ƒ}|S )Nz(+-)INF * 0z0 * (+-)INFrQ   Ú1)rœ   r•   r   r7   rP   rŠ   r…   rd   r	   r<   rO   r6   r¸   r8   ri   r`   rU   )r/   r‡   r0   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ž| j||ƒ}|rN|S | jƒ rj|jƒ rj|jtdƒS | jƒ rzt	| S |jƒ rž|jt
dƒ t|d|jƒ ƒS |sÀ| s²|jtdƒS |jtd|ƒS | sÖ| j|j }d}nÚt|jƒt| jƒ |j d }| j|j | }t| ƒ}t|ƒ}	|dk�r:t|jd|  |	jƒ\}}
nt|j|	jd|   ƒ\}}
|
�rt|d	 dk�r°|d7 }n<| j|j }x.||k �r®|d dk�r®|d }|d7 }�q‚W t|t|ƒ|ƒ}|j|ƒS )
Nz(+-)INF/(+-)INFzDivision by infinityrQ   z0 / 0zx / 0r&   r.   rž   rz   )rœ   r•   r   r7   rP   rŠ   r…   rd   r	   r<   r   r6   ÚEtinyr   r
   rO   rf   r8   r@   ri   ÚdivmodrU   r`   r¸   )r/   r‡   r0   r=   r;   rV   ÚcoeffÚshiftrÀ   rÁ   Ú	remainderÚ	ideal_expr(   r(   r*   Ú__truediv__Q  sP    

zDecimal.__truediv__c             C   s   | j |j A }|jƒ r| j}nt| j|jƒ}| jƒ |jƒ  }|  sP|jƒ sP|dkrjt|ddƒ| j||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 |jtdƒ}
|
|
fS )Nr,   rQ   r&   rž   z%quotient too large in //, % or divmodrŸ   )r7   r…   rO   r©   r�   r6   r¾   r?   r@   ri   rV   rU   rÈ   r`   rd   r   )r/   r‡   r0   r=   rÌ   ÚexpdiffrÀ   rÁ   ÚqÚrr;   r(   r(   r*   Ú_divideŒ  s*    
zDecimal._dividec             C   s"   t |ƒ}|tkr|S |j| |d�S )N)r0   )rœ   r•   rÍ   )r/   r‡   r0   r(   r(   r*   Ú__rtruediv__­  s    zDecimal.__rtruediv__c             C   sÖ   t |ƒ}|tkr|S |d kr"tƒ }| j||ƒ}|r:||fS | j|jA }| jƒ r~|jƒ rj|jtdƒ}||fS t| |jtdƒfS |s´| sš|jt	dƒ}||fS |jt
d|ƒ|jtdƒfS | j||ƒ\}}|j|ƒ}||fS )Nzdivmod(INF, INF)zINF % xzdivmod(0, 0)zx // 0zx % 0)rœ   r•   r   rŠ   r7   r…   rd   r	   r<   r   r
   rÑ   r¸   )r/   r‡   r0   r;   r=   ZquotientrË   r(   r(   r*   Ú
__divmod__´  s0    
zDecimal.__divmod__c             C   s"   t |ƒ}|tkr|S |j| |d�S )N)r0   )rœ   r•   rÓ   )r/   r‡   r0   r(   r(   r*   Ú__rdivmod__Ø  s    zDecimal.__rdivmod__c             C   sˆ   t |ƒ}|tkr|S |d kr"tƒ }| j||ƒ}|r6|S | jƒ rJ|jtdƒS |sj| r^|jtdƒS |jtdƒS | j||ƒd }|j	|ƒ}|S )NzINF % xzx % 0z0 % 0r.   )
rœ   r•   r   rŠ   r…   rd   r	   r   rÑ   r¸   )r/   r‡   r0   r;   rË   r(   r(   r*   Ú__mod__ß  s"    
zDecimal.__mod__c             C   s"   t |ƒ}|tkr|S |j| |d�S )N)r0   )rœ   r•   rÕ   )r/   r‡   r0   r(   r(   r*   Ú__rmod__ú  s    zDecimal.__rmod__c             C   sÐ  |d krt ƒ }t|dd�}| j||ƒ}|r.|S | jƒ rB|jtdƒS |sb| rV|jtdƒS |jtdƒS |jƒ r|t| ƒ}|j|ƒS t	| j
|j
ƒ}| s¦t| jd|ƒ}|j|ƒS | jƒ |jƒ  }||jd krÎ|jtƒS |dkrî| j||jƒ}|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˜|jtƒS | j}
|	d
k �r¶d|
 }
|	 }	t|
t|	ƒ|ƒ}|j|ƒS )NT)r›   zremainder_near(infinity, x)zremainder_near(x, 0)zremainder_near(0, 0)rQ   r.   r,   rž   r&   rŸ   )r   rœ   rŠ   r…   rd   r	   r   r   r¸   r©   rO   r6   r7   r�   r@   r   r¾   r?   ri   rV   rU   rÈ   r`   )r/   r‡   r0   r;   Úideal_exponentrÎ   rÀ   rÁ   rÏ   rÐ   r=   r(   r(   r*   Úremainder_near  sZ    






zDecimal.remainder_nearc             C   sœ   t |ƒ}|tkr|S |d kr"tƒ }| j||ƒ}|r6|S | jƒ rb|jƒ rR|jtdƒS t| j|jA  S |sŒ| r€|jt	d| j|jA ƒS |jt
dƒS | j||ƒd S )Nz
INF // INFzx // 0z0 // 0r&   )rœ   r•   r   rŠ   r…   rd   r	   r<   r7   r
   r   rÑ   )r/   r‡   r0   r;   r(   r(   r*   Ú__floordiv__L  s$    zDecimal.__floordiv__c             C   s"   t |ƒ}|tkr|S |j| |d�S )N)r0   )rœ   r•   rÙ   )r/   r‡   r0   r(   r(   r*   Ú__rfloordiv__h  s    zDecimal.__rfloordiv__c             C   s8   | j ƒ r(| jƒ rtdƒ‚| jr"dnd}nt| ƒ}t|ƒS )Nz%Cannot convert signaling NaN to floatz-nanÚnan)rƒ   r‹   rl   r7   r`   rp   )r/   Úsr(   r(   r*   Ú	__float__o  s    zDecimal.__float__c             C   st   | j r(| jƒ rtdƒ‚n| jƒ r(tdƒ‚d| j }| jdkrT|t| jƒ d| j  S |t| jd | j… pjdƒ S d S )NzCannot convert NaN to integerz"Cannot convert infinity to integerr.   r&   rž   rQ   r„   )	rP   rƒ   rl   r…   r¨   r7   rO   rU   r8   )r/   rÜ   r(   r(   r*   Ú__int__y  s    


zDecimal.__int__c             C   s   | S )Nr(   )r/   r(   r(   r*   Úrealˆ  s    zDecimal.realc             C   s   t dƒS )Nr&   )r   )r/   r(   r(   r*   ÚimagŒ  s    zDecimal.imagc             C   s   | S )Nr(   )r/   r(   r(   r*   Ú	conjugate�  s    zDecimal.conjugatec             C   s   t t| ƒƒS )N)Úcomplexrp   )r/   r(   r(   r*   Ú__complex__“  s    zDecimal.__complex__c             C   sR   | j }|j|j }t|ƒ|krJ|t|ƒ| d … jdƒ}t| j|| jdƒS t| ƒS )NrQ   T)	r8   r@   Úclamprf   rg   r6   r7   rO   r   )r/   r0   ZpayloadZmax_payload_lenr(   r(   r*   r9   –  s    zDecimal._fix_nanc             C   sX  | j r | jƒ r| j|ƒS t| ƒS |jƒ }|jƒ }| s€|j|g|j }tt	| j
|ƒ|ƒ}|| j
krx|jtƒ t| jd|ƒS t| ƒS t| jƒ| j
 |j }||krÆ|jtd| jƒ}|jtƒ |jtƒ |S ||k }|rÖ|}| j
|k �rüt| jƒ| j
 | }	|	dk �rt| jd|d ƒ} d}	| j|j }
|
| |	ƒ}| jd |	… �p>d}|dk�r~tt|ƒd ƒ}t|ƒ|jk�r~|d d… }|d7 }||k�rš|jtd| jƒ}nt| j||ƒ}|�r¾|�r¾|jtƒ |�rÎ|jtƒ |�rÞ|jtƒ |jtƒ |�sø|jtƒ |S |�r|jtƒ |jdk�rP| j
|k�rP|jtƒ | jd| j
|   }t| j||ƒS t| ƒS )NrQ   z
above Emaxr&   rÅ   r.   r„   )rP   rƒ   r9   r   rÇ   ÚEtoprA   rä   r©   r½   rO   rd   r   r6   r7   rf   r8   r@   r   r   r   Ú_pick_rounding_functionr?   r`   rU   r   r   )r/   r0   rÇ   rå   Úexp_maxZnew_expZexp_minr;   Zself_is_subnormalrx   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.   r„   )Ú
_all_zerosr8   )r/   r@   r(   r(   r*   Ú_round_down  s    zDecimal._round_downc             C   s   | j |ƒ S )N)rê   )r/   r@   r(   r(   r*   Ú	_round_up  s    zDecimal._round_upc             C   s*   | j | dkrdS t| j |ƒr"dS dS d S )NZ56789r.   r&   r„   )r8   ré   )r/   r@   r(   r(   r*   Ú_round_half_up  s
    zDecimal._round_half_upc             C   s   t | j|ƒrdS | j|ƒS d S )Nr.   r„   )Ú_exact_halfr8   rì   )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 | j|ƒS d S )Nr&   r.   Ú02468r„   )rí   r8   rì   )r/   r@   r(   r(   r*   Ú_round_half_even#  s    zDecimal._round_half_evenc             C   s    | j r| j|ƒS | j|ƒ S d S )N)r7   rê   )r/   r@   r(   r(   r*   Ú_round_ceiling+  s    
zDecimal._round_ceilingc             C   s    | j s| j|ƒS | j|ƒ S d S )N)r7   rê   )r/   r@   r(   r(   r*   Ú_round_floor2  s    
zDecimal._round_floorc             C   s0   |r | j |d  dkr | j|ƒS | j|ƒ S d S )Nr.   Z05)r8   rê   )r/   r@   r(   r(   r*   Ú_round_05up9  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| ƒ}| j|ƒS | jrR| jƒ rJtdƒ‚ntdƒ‚t| j	dt
ƒƒS )Nz+Second argument to round should be integralr&   rÅ   zcannot round a NaNzcannot round an infinity)r_   rU   rr   r6   ÚquantizerP   r    rl   r¨   r¾   r   )r/   r5   rV   r(   r(   r*   Ú	__round__K  s    /


zDecimal.__round__c             C   s0   | j r | jƒ rtdƒ‚ntdƒ‚t| jdtƒƒS )Nzcannot round a NaNzcannot round an infinityr&   )rP   r    rl   r¨   rU   r¾   r   )r/   r(   r(   r*   Ú	__floor__‰  s
    
zDecimal.__floor__c             C   s0   | j r | jƒ rtdƒ‚ntdƒ‚t| jdtƒƒS )Nzcannot round a NaNzcannot round an infinityr&   )rP   r    rl   r¨   rU   r¾   r   )r/   r(   r(   r*   Ú__ceil__˜  s
    
zDecimal.__ceil__c             C   s  t |dd�}t |dd�}| js$|jrÚ|d kr2tƒ }| jdkrJ|jtd| ƒS |jdkrb|jtd|ƒS | jdkrr| }nf|jdkr‚|}nV| jdkr®|sœ|jtdƒS t| j|jA  }n*|jdkrØ| sÈ|jtdƒS t| j|jA  }n0t| j|jA t	t
| jƒt
|jƒ ƒ| j|j ƒ}|j||ƒS )	NT)r›   rY   r†   r5   rZ   zINF * 0 in fmaz0 * INF in fma)rœ   rP   r   rO   rd   r	   r<   r7   r6   r`   rU   r8   rÂ   )r/   r‡   Zthirdr0   Úproductr(   r(   r*   Úfma§  s6    





zDecimal.fmac             C   sÚ  t |ƒ}|tkr|S t |ƒ}|tkr(|S |d kr6tƒ }| jƒ }|jƒ }|jƒ }|sZ|sZ|rÂ|dkrp|jtd| ƒS |dkr†|jtd|ƒS |dkrœ|jtd|ƒS |rª| j|ƒS |r¸|j|ƒS |j|ƒS | jƒ oØ|jƒ oØ|jƒ sæ|jtdƒS |dk rú|jtdƒS |�s|jtdƒS |jƒ |j	k�r(|jtdƒS | �rD|  �rD|jtdƒS |j
ƒ �rTd}n| j}tt|ƒƒ}t| jƒ ƒ}t|jƒ ƒ}	|j| td	|j|ƒ | }x t|	jƒD ]}
t|d	|ƒ}�q¦W 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ƒ   rd   r	   r9   Ú
_isintegerr�   r@   Ú_isevenr7   rh   rU   ri   Úto_integral_valuer£   rV   Úranger6   r`   )r/   r‡   Úmodulor0   rˆ   r‰   Zmodulo_is_nanr=   ÚbaseÚexponentÚir(   r(   r*   Ú_power_moduloÓ  sl    



zDecimal._power_moduloc             C   s  t | ƒ}|j|j }}x |d dkr6|d }|d7 }qW t |ƒ}|j|j }}x |d dkrn|d }|d7 }qPW |dk�r||9 }x |d dkr¢|d }|d7 }q„W |dk r°d S |d|  }	|jdkrÌ|	 }	|jƒ oÜ|jdk�r| jt|ƒ }
t|	|
 |d ƒ}nd}tddd|  |	| ƒS |jdk�rÄ|d }|dk�rÊ|| @ |k�rPd S t	|ƒd }|d
 d }|t
t|ƒƒk�r~d 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 x$|d dk�r$|d }|d8 }�qW |d d }|t
t|ƒƒk�rHd S t|| |ƒ}t|| |ƒ}|d k�sx|d k�r|d S ||k�rŠd 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|   }}x:|d |d   k�oldkn  �rˆ|d }|d }�qPW x:|d |d   k�o¨dkn  �rÄ|d }|d }�qŒW |dk�rt|dk�rè||k�rèd S t||ƒ\}}|dk�rd S dt	|ƒ |  > }x>t|||d  ƒ\}}||k�r>P n||d  | | }�qW ||k�oh|dk�spd S |}|dk�r˜||d t|ƒ k�r˜d S || }||9 }|d| k�rºd S t|ƒ}|jƒ �rþ|jdk�rþ| jt|ƒ }
t||
 |t
|ƒ ƒ}nd}td|d|  || ƒS )Nrž   r&   r.   rÅ   rQ   r,   é   r¬   é   é]   éA   rz   é   r[   éd   )r,   r  r¬   r  )ri   rU   rV   r=   rú   r7   rO   r©   r6   Ú_nbitsrf   r`   Ú_decimal_lshift_exactrÈ   rh   Ú	_log10_lb)r/   r‡   ÚpÚxÚxcÚxeÚyÚycÚyer   r×   ZzerosZ
last_digitr®   ZemaxrË   ru   r5   Zxc_bitsÚremÚarÏ   rÐ   Zstr_xcr(   r(   r*   Ú_power_exact(  sÒ    :









&&&&


 zDecimal._power_exactc             C   s@  |d k	r| j |||ƒS t|ƒ}|tkr*|S |d kr8tƒ }| j||ƒ}|rL|S |sd| s`|jtdƒS tS d}| jdkr |j	ƒ rˆ|j
ƒ s˜d}n| r˜|jtdƒS | jƒ } | sÂ|jdkrºt|ddƒS t| S | jƒ rè|jdkrÜt| S t|ddƒS | tk�rŽ|j	ƒ �rZ|jdk�rd}n||jk�r"|j}nt|ƒ}| j| }|d|j k �rxd|j }|jtƒ n|jtƒ |jtƒ d|j }t|dd|   |ƒS | jƒ }|jƒ �rÈ|jdk|dk k�rÀt|ddƒS t| S d }d}	| jƒ |jƒ  }
|dk|jdkk�r|
tt|jƒƒk�rHt|d|jd ƒ}n,|jƒ }|
tt| ƒƒk�rHt|d|d ƒ}|d k�rŒ| j||jd ƒ}|d k	�rŒ|dk�rˆtd|j|jƒ}d}	|d k�r:|j}t| ƒ}|j|j }}t|ƒ}|j|j }}|jdk�rÚ| }d	}xJt|||||| ƒ\}}|d
dtt|ƒƒ| d    �rP |d	7 }�qàW t|t|ƒ|ƒ}|	�r2|j	ƒ  �r2t|jƒ|jk�r�|jd t|jƒ }t|j|jd|  |j| ƒ}|j ƒ }|j!ƒ  xt"D ]}d|j#|< �q¦W |j$|ƒ}|jtƒ |j%t& �rä|jt'ƒ |j%t( �r |jt(d|jƒ x:t't&ttt)fD ]}|j%| �r|j|ƒ �qW n
|j$|ƒ}|S )Nz0 ** 0r&   r.   z+x ** y with x negative and y not an integerrQ   rÅ   FTr[   rz   rž   z
above Emax)*r  rœ   r•   r   rŠ   rd   r	   Ú_Oner7   rú   rû   r·   r6   r<   r…   r@   rU   rO   r   r   r�   Ú_log10_exp_boundrf   r`   rA   rÇ   r  r8   ri   rV   r=   Ú_dpowerrH   rI   Ú_signalsÚtrapsr¸   Úflagsr   r   r   r   )r/   r‡   rþ   r0   r;   Zresult_signZ
multiplierrV   Zself_adjÚexactZboundrÇ   r  r  r  r  r  r  r  ÚextrarÉ   rÎ   Z
newcontextZ	exceptionr(   r(   r*   Ú__pow__	  sÊ    














"




zDecimal.__pow__c             C   s"   t |ƒ}|tkr|S |j| |d�S )N)r0   )rœ   r•   r  )r/   r‡   r0   r(   r(   r*   Ú__rpow__í	  s    zDecimal.__rpow__c             C   s¼   |d krt ƒ }| jr(| j|d�}|r(|S | j|ƒ}|jƒ r>|S |sPt|jddƒS |j|jƒ g|j	 }t
|jƒ}|j}x.|j|d  dkr¢||k r¢|d7 }|d8 }qvW t|j|jd |… |ƒS )N)r0   rQ   r&   r.   )r   rP   rŠ   r¸   r…   r6   r7   rA   rå   rä   rf   r8   rO   )r/   r0   r;   Úduprç   ÚendrV   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|| j||ƒ}|rH|S |jƒ sX| jƒ r||jƒ rp| jƒ rpt| ƒS |jtdƒS |j	ƒ |j
  ko–|jkn  s¨|jtdƒS | sÆt| jd|j
ƒ}|j|ƒS | jƒ }||jkrä|jtdƒS ||j
 d |jk�r|jtdƒS | j|j
|ƒ}|jƒ |jk�r0|jtdƒS t|jƒ|jk�rN|jtdƒS |�rn|jƒ |jk �rn|jtƒ |j
| j
k�rš|| k�r�|jtƒ |jtƒ |j|ƒ}|S )	NT)r›   zquantize with one INFz)target exponent out of bounds in quantizerQ   z9exponent of quantize result too large for current contextr.   z7quantize result has too many digits for current context)rœ   r   r?   rP   rŠ   r…   r   rd   r	   rÇ   rO   rA   r6   r7   r¸   r�   r@   r¾   rf   r8   ÚEminr   r   r   )r/   rV   r?   r0   r;   r�   r(   r(   r*   rô   
  sT     






zDecimal.quantizec             C   sD   t |dd�}| js|jr8| jƒ r(|jƒ p6| jƒ o6|jƒ S | j|jkS )NT)r›   )rœ   rP   r    Úis_infiniterO   )r/   r‡   r0   r(   r(   r*   Úsame_quantumJ
  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 )NrQ   r&   rÅ   r.   )
rP   r   r6   r7   rO   r8   rf   ræ   r`   rU   )r/   rV   r?   rx   Zthis_functionrè   rÉ   r(   r(   r*   r¾   Y
  s"    


zDecimal._rescalec             C   sh   |dkrt dƒ‚| js|  r$t| ƒS | j| jƒ d | |ƒ}|jƒ | jƒ krd|j|jƒ d | |ƒ}|S )Nr&   z'argument should be at least 1 in _roundr.   )rl   rP   r   r¾   r�   )r/   Úplacesr?   r;   r(   r(   r*   Ú_round{
  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}| jd|ƒ}|| kr€|j	t
ƒ |j	tƒ |S )N)r0   r&   rQ   )rP   rŠ   r   rO   r6   r7   r   r?   r¾   rd   r   r   )r/   r?   r0   r;   r(   r(   r*   Úto_integral_exact’
  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 | jd|ƒS d S )N)r0   r&   )r   r?   rP   rŠ   r   rO   r¾   )r/   r?   r0   r;   r(   r(   r*   rü   ¯
  s    
zDecimal.to_integral_valuec             C   sà  |d krt ƒ }| jrB| j|d�}|r(|S | jƒ rB| jdkrBt| ƒS | sdt| jd| jd ƒ}|j|ƒS | jdkrz|j	t
dƒS |jd }t| ƒ}|jd? }|jd@ r¾|jd }t| jƒd? d }n|j}t| jƒd d? }|| }|dkrø|d| 9 }d	}	nt|d|  ƒ\}}
|
 }	||8 }d| }x(|| }||k�r:P n|| d? }�q$W |	�o\|| |k}	|	�r”|dk�r||d|  }n|d|  9 }||7 }n|d
 dk�rª|d7 }tdt|ƒ|ƒ}|jƒ }|jtƒ}|j|ƒ}||_|S )N)r0   r&   rQ   r,   r.   zsqrt(-x), x > 0rž   r  Trz   )r   rP   rŠ   r…   r7   r   r6   rO   r¸   rd   r	   r@   ri   rV   rU   rf   r8   rÈ   r`   Ú_shallow_copyÚ_set_roundingr   r?   )r/   r0   r;   r@   Úopr®   ÚcÚlrÊ   r  rË   r5   rÏ   r?   r(   r(   r*   ÚsqrtÂ
  s`    










zDecimal.sqrtc             C   s¶   t |dd�}|d krtƒ }| js&|jr~| jƒ }|jƒ }|s>|r~|dkrX|dkrX| j|ƒS |dkrr|dkrr|j|ƒS | j||ƒS | j|ƒ}|dkrš| j|ƒ}|dkr¨|}n| }|j|ƒS )NT)r›   r.   r&   r„   )rœ   r   rP   rƒ   r¸   rŠ   r’   Úcompare_total)r/   r‡   r0   ÚsnÚonr,  r;   r(   r(   r*   r½   %  s&    


	
zDecimal.maxc             C   s¶   t |dd�}|d krtƒ }| js&|jr~| jƒ }|jƒ }|s>|r~|dkrX|dkrX| j|ƒS |dkrr|dkrr|j|ƒS | j||ƒS | j|ƒ}|dkrš| j|ƒ}|dkr¨| }n|}|j|ƒS )NT)r›   r.   r&   r„   )rœ   r   rP   rƒ   r¸   rŠ   r’   r/  )r/   r‡   r0   r0  r1  r,  r;   r(   r(   r*   r©   O  s&    



zDecimal.minc             C   s8   | j r
dS | jdkrdS | j| jd … }|dt|ƒ kS )NFr&   TrQ   )rP   rO   r8   rf   )r/   Úrestr(   r(   r*   rú   q  s    
zDecimal._isintegerc             C   s(   |  s| j dkrdS | jd| j   dkS )Nr&   Tr.   rï   r„   )rO   r8   )r/   r(   r(   r*   rû   z  s    zDecimal._isevenc             C   s.   y| j t| jƒ d S  tk
r(   dS X d S )Nr.   r&   )rO   rf   r8   rr   )r/   r(   r(   r*   r�   €  s    zDecimal.adjustedc             C   s   | S )Nr(   )r/   r(   r(   r*   Ú	canonicalˆ  s    zDecimal.canonicalc             C   s.   t |dd�}| j||ƒ}|r |S | j||d�S )NT)r›   )r0   )rœ   r�   r�   )r/   r‡   r0   r;   r(   r(   r*   Úcompare_signal�  s
    zDecimal.compare_signalc             C   sf  t |dd�}| jr|j rtS | j r0|jr0tS | j}| jƒ }|jƒ }|sP|�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 n4|dkrætS |dkròtS |dk�r tS |dk�rtS | |k �rtS | |k�r*tS | j|jk �rF|�rBtS tS | j|jk�rb|�r^tS tS tS )NT)r›   r.   r,   )	rœ   r7   Ú_NegativeOner  rƒ   rf   r8   Ú_ZerorO   )r/   r‡   r0   r=   Zself_nanZ	other_nanZself_keyZ	other_keyr(   r(   r*   r/  œ  sf    




zDecimal.compare_totalc             C   s&   t |dd�}| jƒ }|jƒ }|j|ƒS )NT)r›   )rœ   r¶   r/  )r/   r‡   r0   rÜ   Úor(   r(   r*   Úcompare_total_magå  s    zDecimal.compare_total_magc             C   s   t d| j| j| jƒS )Nr&   )r6   r8   rO   rP   )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.   )r7   r6   r8   rO   rP   )r/   r(   r(   r*   r·   ô  s    zDecimal.copy_negatec             C   s"   t |dd�}t|j| j| j| jƒS )NT)r›   )rœ   r6   r7   r8   rO   rP   )r/   r‡   r0   r(   r(   r*   Ú	copy_signû  s    
zDecimal.copy_signc             C   sì  |d krt ƒ }| j|d�}|r"|S | jƒ d
kr2tS | s:tS | jƒ dkrNt| ƒS |j}| jƒ }| jdkr–|t	t
|jd d ƒƒkr–tdd|jd ƒ}�n0| jdkrÔ|t	t
|jƒ  d d ƒƒkrÔtdd|jƒ d ƒ}nò| jdkoæ|| k �r
tddd|d   d | ƒ}n¼| jdk�rB|| d k �rBtdd|d  | d ƒ}n„t| ƒ}|j|j }}|jdk�rj| }d}xFt|||| ƒ\}	}
|	dd	t	t
|	ƒƒ| d    �r¨P |d7 }�qpW tdt
|	ƒ|
ƒ}|jƒ }|jtƒ}|j|ƒ}||_|S )N)r0   r.   r&   r[   rÅ   rQ   r>   rz   rž   r„   )r   rŠ   r…   r6  r  r   r@   r�   r7   rf   r`   rA   r6   rÇ   ri   rU   rV   r=   Ú_dexpr)  r*  r   r¸   r?   )r/   r0   r;   r  Úadjr+  r,  r®   r  rÉ   rV   r?   r(   r(   r*   rV     sJ    $( "

zDecimal.expc             C   s   dS )NTr(   )r/   r(   r(   r*   Úis_canonicalL  s    zDecimal.is_canonicalc             C   s   | j  S )N)rP   )r/   r(   r(   r*   Ú	is_finiteT  s    zDecimal.is_finitec             C   s
   | j dkS )NrZ   )rO   )r/   r(   r(   r*   r$  \  s    zDecimal.is_infinitec             C   s
   | j dkS )Nr5   rY   )r5   rY   )rO   )r/   r(   r(   r*   r    `  s    zDecimal.is_nanc             C   s,   | j s|  rdS |d krtƒ }|j| jƒ kS )NF)rP   r   r#  r�   )r/   r0   r(   r(   r*   Ú	is_normald  s
    zDecimal.is_normalc             C   s
   | j dkS )Nr5   )rO   )r/   r(   r(   r*   rŒ   l  s    zDecimal.is_qnanc             C   s
   | j dkS )Nr.   )r7   )r/   r(   r(   r*   Ú	is_signedp  s    zDecimal.is_signedc             C   s
   | j dkS )NrY   )rO   )r/   r(   r(   r*   r‹   t  s    zDecimal.is_snanc             C   s,   | j s|  rdS |d krtƒ }| jƒ |jk S )NF)rP   r   r�   r#  )r/   r0   r(   r(   r*   Úis_subnormalx  s
    zDecimal.is_subnormalc             C   s   | j  o| jdkS )NrQ   )rP   r8   )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Ÿ   r„   )rO   rf   r8   r`   ri   rU   rV   )r/   r;  r+  r,  r®   ÚnumÚ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 | jƒ dkr:tS | tkrFtS | jdkr\|jt	dƒS t
| ƒ}|j|j }}|j}|| jƒ  d }x>t|||ƒ}|ddttt|ƒƒƒ| d    r¼P |d7 }qŠW tt|dk ƒtt|ƒƒ| ƒ}|jƒ }|jtƒ}	|j|ƒ}|	|_|S )	N)r0   r.   zln of a negative valuer,   rz   rž   r[   r&   )r   rŠ   Ú_NegativeInfinityr…   Ú	_Infinityr  r6  r7   rd   r	   ri   rU   rV   r@   rE  Ú_dlogrf   r`   rh   r6   r)  r*  r   r¸   r?   )
r/   r0   r;   r+  r,  r®   r  r&  rÉ   r?   r(   r(   r*   Úln�  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ž   éç   Z231rŸ   r„   )rO   rf   r8   r`   ri   rU   rV   )r/   r;  r+  r,  r®   rC  rD  r(   r(   r*   r  Ï  s    zDecimal._log10_exp_boundc       
      C   sH  |d krt ƒ }| j|d�}|r"|S | s*tS | jƒ dkr:tS | jdkrP|jtdƒS | jd dkr˜| jdd … dt	| jƒd  kr˜t
| jt	| jƒ d ƒ}nŠt| ƒ}|j|j }}|j}|| jƒ  d }x>t|||ƒ}|dd	t	tt|ƒƒƒ| d    røP |d
7 }qÆW tt|dk ƒtt|ƒƒ| ƒ}|jƒ }|jtƒ}	|j|ƒ}|	|_|S )N)r0   r.   zlog10 of a negative valuer&   rÅ   rQ   r,   rz   rž   r[   )r   rŠ   rF  r…   rG  r7   rd   r	   r8   rf   r   rO   ri   rU   rV   r@   r  Ú_dlog10r`   rh   r6   r)  r*  r   r¸   r?   )
r/   r0   r;   r+  r,  r®   r  r&  rÉ   r?   r(   r(   r*   Úlog10í  s:    
.$

zDecimal.log10c             C   sV   | j |d�}|r|S |d kr"tƒ }| jƒ r.tS | s@|jtddƒS t| jƒ ƒ}|j|ƒS )N)r0   zlogb(0)r.   )	rŠ   r   r…   rG  rd   r
   r   r�   r¸   )r/   r0   r;   r(   r(   r*   Úlogb   s    	zDecimal.logbc             C   s8   | j dks| jdkrdS x| jD ]}|dkr dS q W dS )Nr&   FZ01T)r7   rO   r8   )r/   Ú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&   rQ   )r@   rf   )r/   r0   ÚopaÚopbZdifr(   r(   r*   Ú_fill_logicalL  s    zDecimal._fill_logicalc             C   s~   |d krt ƒ }t|dd�}| jƒ  s.|jƒ  r8|jtƒS | j|| j|jƒ\}}djdd„ t||ƒD ƒƒ}t	d|j
dƒpxddƒS )NT)r›   rS   c             S   s$   g | ]\}}t t|ƒt|ƒ@ ƒ‘qS r(   )r`   rU   )Ú.0r  Úbr(   r(   r*   ú
<listcomp>g  s    z'Decimal.logical_and.<locals>.<listcomp>r&   rQ   )r   rœ   rO  rd   r	   rR  r8   rn   Úzipr6   rg   )r/   r‡   r0   rP  rQ  r‚   r(   r(   r*   Úlogical_andY  s    
zDecimal.logical_andc             C   s(   |d krt ƒ }| jtdd|j dƒ|ƒS )Nr&   rÅ   )r   Úlogical_xorr6   r@   )r/   r0   r(   r(   r*   Úlogical_invertj  s    zDecimal.logical_invertc             C   s~   |d krt ƒ }t|dd�}| jƒ  s.|jƒ  r8|jtƒS | j|| j|jƒ\}}djdd„ t||ƒD ƒƒ}t	d|j
dƒpxddƒS )NT)r›   rS   c             S   s$   g | ]\}}t t|ƒt|ƒB ƒ‘qS r(   )r`   rU   )rS  r  rT  r(   r(   r*   rU    s    z&Decimal.logical_or.<locals>.<listcomp>r&   rQ   )r   rœ   rO  rd   r	   rR  r8   rn   rV  r6   rg   )r/   r‡   r0   rP  rQ  r‚   r(   r(   r*   Ú
logical_orq  s    
zDecimal.logical_orc             C   s~   |d krt ƒ }t|dd�}| jƒ  s.|jƒ  r8|jtƒS | j|| j|jƒ\}}djdd„ t||ƒD ƒƒ}t	d|j
dƒpxddƒS )NT)r›   rS   c             S   s$   g | ]\}}t t|ƒt|ƒA ƒ‘qS r(   )r`   rU   )rS  r  rT  r(   r(   r*   rU  �  s    z'Decimal.logical_xor.<locals>.<listcomp>r&   rQ   )r   rœ   rO  rd   r	   rR  r8   rn   rV  r6   rg   )r/   r‡   r0   rP  rQ  r‚   r(   r(   r*   rX  ‚  s    
zDecimal.logical_xorc             C   s¾   t |dd�}|d krtƒ }| js&|jr~| jƒ }|jƒ }|s>|r~|dkrX|dkrX| j|ƒS |dkrr|dkrr|j|ƒS | j||ƒS | jƒ j|jƒ ƒ}|dkr¢| j|ƒ}|dkr°|}n| }|j|ƒS )NT)r›   r.   r&   r„   )	rœ   r   rP   rƒ   r¸   rŠ   r¶   r’   r/  )r/   r‡   r0   r0  r1  r,  r;   r(   r(   r*   Úmax_mag“  s&    


zDecimal.max_magc             C   s¾   t |dd�}|d krtƒ }| js&|jr~| jƒ }|jƒ }|s>|r~|dkrX|dkrX| j|ƒS |dkrr|dkrr|j|ƒS | j||ƒS | jƒ j|jƒ ƒ}|dkr¢| j|ƒ}|dkr°| }n|}|j|ƒS )NT)r›   r.   r&   r„   )	rœ   r   rP   rƒ   r¸   rŠ   r¶   r’   r/  )r/   r‡   r0   r0  r1  r,  r;   r(   r(   r*   Úmin_mag±  s&    


zDecimal.min_magc             C   s    |d krt ƒ }| j|d�}|r"|S | jƒ dkr2tS | jƒ dkrTtdd|j |jƒ ƒS |jƒ }|jt	ƒ |j
ƒ  | j|ƒ}|| kr„|S | jtdd|jƒ d ƒ|ƒS )N)r0   r.   r&   r>   rÅ   r„   )r   rŠ   r…   rF  r6   r@   rå   rH   r*  r   Ú_ignore_all_flagsr¸   rÃ   rÇ   )r/   r0   r;   Únew_selfr(   r(   r*   Ú
next_minusÏ  s"    

zDecimal.next_minusc             C   s    |d krt ƒ }| j|d�}|r"|S | jƒ dkr2tS | jƒ dkrTtdd|j |jƒ ƒS |jƒ }|jt	ƒ |j
ƒ  | j|ƒ}|| kr„|S | jtdd|jƒ d ƒ|ƒS )N)r0   r.   r>   r&   rÅ   r„   )r   rŠ   r…   rG  r6   r@   rå   rH   r*  r   r]  r¸   rÂ   rÇ   )r/   r0   r;   r^  r(   r(   r*   Ú	next_plusæ  s"    

zDecimal.next_plusc             C   sÞ   t |dd�}|d krtƒ }| j||ƒ}|r.|S | j|ƒ}|dkrJ| j|ƒS |dkr^| j|ƒ}n
| j|ƒ}|jƒ r–|jt	d|j
ƒ |jtƒ |jtƒ nD|jƒ |jk rÚ|jtƒ |jtƒ |jtƒ |jtƒ |sÚ|jtƒ |S )NT)r›   r&   r.   z Infinite result from next_towardr„   )rœ   r   rŠ   r’   r9  r`  r_  r…   rd   r   r7   r   r   r�   r#  r   r   r   )r/   r‡   r0   r;   Z
comparisonr(   r(   r*   Únext_towardý  s4    	








zDecimal.next_towardc             C   sˆ   | j ƒ rdS | jƒ rdS | jƒ }|dkr,dS |dkr8dS | jƒ 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	+Infinityz	-Infinityz-Zeroz+Zero)r0   z
-Subnormalz
+Subnormalz-Normalz+Normalr„   )r‹   rŒ   r…   rA  r7   r   r@  )r/   r0   Úinfr(   r(   r*   Únumber_class+  s,    zDecimal.number_classc             C   s   t dƒS )Nrž   )r   )r/   r(   r(   r*   ÚradixU  s    zDecimal.radixc             C   sø   |d krt ƒ }t|dd�}| j||ƒ}|r.|S |jdkrB|jtƒS |j t|ƒ  ko^|jkn  sn|jtƒS | jƒ r~t	| ƒS t|ƒ}| j
}|jt|ƒ }|dkr°d| | }n|dk rÆ|| d … }||d … |d |…  }t| j|jdƒpðd| jƒS )NT)r›   r&   rQ   )r   rœ   rŠ   rO   rd   r	   r@   rU   r…   r   r8   rf   r6   r7   rg   )r/   r‡   r0   r;   ÚtorotÚrotdigÚtopadZrotatedr(   r(   r*   ÚrotateY  s,    

"
zDecimal.rotatec             C   sÀ   |d krt ƒ }t|dd�}| j||ƒ}|r.|S |jdkrB|jtƒS d|j|j  }d|j|j  }|t|ƒ  kox|kn  sˆ|jtƒS | j	ƒ r˜t
| ƒS t| j| j| jt|ƒ ƒ}|j|ƒ}|S )NT)r›   r&   r,   rŸ   )r   rœ   rŠ   rO   rd   r	   rA   r@   rU   r…   r   r6   r7   r8   r¸   )r/   r‡   r0   r;   ZliminfZlimsupr€   r(   r(   r*   Úscalebz  s"    



zDecimal.scalebc             C   s  |d krt ƒ }t|dd�}| j||ƒ}|r.|S |jdkrB|jtƒS |j t|ƒ  ko^|jkn  sn|jtƒS | jƒ 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|jdƒ�pd| jƒS )NT)r›   r&   rQ   )r   rœ   rŠ   rO   rd   r	   r@   rU   r…   r   r8   rf   r6   r7   rg   )r/   r‡   r0   r;   re  rf  rg  Zshiftedr(   r(   r*   rÊ   “  s2    

"
zDecimal.shiftc             C   s   | j t| ƒffS )N)Ú	__class__r`   )r/   r(   r(   r*   Ú
__reduce__º  s    zDecimal.__reduce__c             C   s   t | ƒtkr| S | jt| ƒƒS )N)Útyper   rj  r`   )r/   r(   r(   r*   Ú__copy__½  s    zDecimal.__copy__c             C   s   t | ƒtkr| S | jt| ƒƒS )N)rl  r   rj  r`   )r/   Úmemor(   r(   r*   Ú__deepcopy__Â  s    zDecimal.__deepcopy__c             C   sN  |d krt ƒ }t||d�}| jrXt| j|ƒ}t| jƒ ƒ}|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Î| j|d	 |ƒ} nF|d d
krê| j| |ƒ} n*|d dk�rt| j
ƒ|k�r| j||ƒ} |  �rB| jdk�rB|d d
k�rB| jd|ƒ} | jt| j
ƒ }	|d dk�r‚|  �r||d k	�r|d	| }
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)Ú_localeconvrl  ú%ÚgÚGr,   Ú	precisionÚeEr.   zfF%ZgGr&   r¬   rQ   rS   iúÿÿÿ)r   Ú_parse_format_specifierrP   Ú_format_signr7   r`   r¶   Ú_format_alignr°   r6   r8   rO   r?   r'  r¾   rf   Ú_format_number)r/   Z	specifierr0   rp  Úspecr=   Úbodyr?   rt  r²   r³   rv   rw   rV   r(   r(   r*   Ú
__format__É  sZ    
"

zDecimal.__format__)rO   r8   r7   rP   )rQ   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)�r2   r3   r4   Ú	__slots__r^   Úclassmethodrq   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__rß   Úpropertyrà   rá   rã   r9   r¸   rê   rë   rì   rî   rð   rñ   rò   ró   Údictræ   rõ   rö   r÷   rù   r  r  r  r  r"  rô   r%  r¾   r'  r(  rü   Úto_integralr.  r½   r©   rú   rû   r�   r3  r4  r/  r8  r¶   r·   r9  rV   r<  r=  r$  r    r>  rŒ   r?  r‹   r@  rA  rE  rI  r  rL  rM  rO  rR  rW  rY  rZ  rX  r[  r\  r_  r`  ra  rc  rd  rh  ri  rÊ   rk  rm  ro  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 jtƒ}| |_||_||_||_|S )N)r]   r^   r   r7   r8   rO   rP   )r=   Zcoefficientr   Zspecialr/   r(   r(   r*   r6     s    
r6   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )rN   c             C   s   |j ƒ | _d S )N)rH   Únew_context)r/   r…  r(   r(   r*   Ú__init__9  s    z_ContextManager.__init__c             C   s   t ƒ | _t| jƒ | jS )N)r   Úsaved_contextr   r…  )r/   r(   r(   r*   Ú	__enter__;  s    
z_ContextManager.__enter__c             C   s   t | jƒ d S )N)r   r‡  )r/   ÚtÚvÚtbr(   r(   r*   Ú__exit__?  s    z_ContextManager.__exit__N)r2   r3   r4   r†  rˆ  rŒ  r(   r(   r(   r*   rN   3  s   rN   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>  y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	j
ƒ | _	n.tˆtƒsêt‡fdd„tˆ D ƒƒ| _	nˆ| _	ˆ d k�r
tjtdƒ| _n0tˆ tƒ�s4t‡ fdd„tˆ  D ƒƒ| _nˆ | _d S )Nc             3   s   | ]}|t |ˆ kƒfV  qd S )N)rU   )rS  rÜ   )r  r(   r*   ú	<genexpr>n  s    z#Context.__init__.<locals>.<genexpr>r&   c             3   s   | ]}|t |ˆ kƒfV  qd S )N)rU   )rS  rÜ   )r  r(   r*   r�  u  s    )r   Ú	NameErrorr@   r?   r#  rA   r°   rä   Ú_ignored_flagsr  rH   r_   rƒ  r  Úfromkeysr  )r/   r@   r?   r#  rA   r°   rä   r  r  r�  Zdcr(   )r  r  r*   r†  U  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j| ||ƒS )Nz%s must be an integerz-infz%s must be in [%s, %d]. got: %srb  z%s must be in [%d, %s]. got: %sz%s must be in [%d, %d]. got %s)r_   rU   rr   rl   r]   Ú__setattr__)r/   Únamert   ZvminZvmaxr(   r(   r*   Ú_set_integer_checky  s    
zContext._set_integer_checkc             C   sh   t |tƒstd| ƒ‚x |D ]}|tkrtd| ƒ‚qW x tD ]}||kr>td| ƒ‚q>W tj| ||ƒS )Nz%s must be a signal dictz%s is not a valid signal dict)r_   rƒ  rr   r  ÚKeyErrorr]   r‘  )r/   r’  r€   Úkeyr(   r(   r*   Ú_set_signal_dict‡  s    


zContext._set_signal_dictc             C   sä   |dkr| j ||ddƒS |dkr0| j ||ddƒS |dkrH| j ||ddƒS |dkr`| j ||ddƒS |d	krx| j ||ddƒS |d
kr¢|tkr”td| ƒ‚tj| ||ƒS |dks²|dkr¾| j||ƒS |dkrÔtj| ||ƒS td| ƒ‚d S )Nr@   r.   rb  r#  z-infr&   rA   r°   rä   r?   z%s: invalid rounding moder  r  r�  z.'decimal.Context' object has no attribute '%s')r“  Ú_rounding_modesrr   r]   r‘  r–  rL   )r/   r’  rt   r(   r(   r*   r‘  ’  s(    zContext.__setattr__c             C   s   t d| ƒ‚d S )Nz%s cannot be deleted)rL   )r/   r’  r(   r(   r*   Ú__delattr__«  s    zContext.__delattr__c          	   C   sN   dd„ | j jƒ D ƒ}dd„ | jjƒ D ƒ}| j| j| j| j| j| j| j	||ffS )Nc             S   s   g | ]\}}|r|‘qS r(   r(   )rS  ÚsigrŠ  r(   r(   r*   rU  °  s    z&Context.__reduce__.<locals>.<listcomp>c             S   s   g | ]\}}|r|‘qS r(   r(   )rS  r™  rŠ  r(   r(   r*   rU  ±  s    )
r  Úitemsr  rj  r@   r?   r#  rA   r°   rä   )r/   r  r  r(   r(   r*   rk  ¯  s
    zContext.__reduce__c             C   s|   g }|j dt| ƒ ƒ dd„ | jjƒ D ƒ}|j ddj|ƒ d ƒ dd„ | jjƒ D ƒ}|j ddj|ƒ d ƒ dj|ƒd	 S )
NzrContext(prec=%(prec)d, rounding=%(rounding)s, Emin=%(Emin)d, Emax=%(Emax)d, capitals=%(capitals)d, clamp=%(clamp)dc             S   s   g | ]\}}|r|j ‘qS r(   )r2   )rS  r   rŠ  r(   r(   r*   rU  ½  s    z$Context.__repr__.<locals>.<listcomp>zflags=[z, ú]c             S   s   g | ]\}}|r|j ‘qS r(   )r2   )rS  r‰  rŠ  r(   r(   r*   rU  ¿  s    ztraps=[ú))rm   Úvarsr  rš  rn   r  )r/   rÜ   Únamesr(   r(   r*   rª   ¶  s    zContext.__repr__c             C   s   x| j D ]}d| j |< qW d S )Nr&   )r  )r/   Úflagr(   r(   r*   rI   Ã  s    zContext.clear_flagsc             C   s   x| j D ]}d| j |< qW d S )Nr&   )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 )N)
r   r@   r?   r#  rA   r°   rä   r  r  r�  )r/   Úncr(   r(   r*   r)  Í  s    zContext._shallow_copyc          
   C   s6   t | j| j| j| j| j| j| jjƒ | j	jƒ | j
ƒ	}|S )N)r   r@   r?   r#  rA   r°   rä   r  rH   r  r�  )r/   r¡  r(   r(   r*   rH   Ô  s
    zContext.copyc             G   sZ   t j||ƒ}|| jkr(|ƒ j| f|žŽ S d| j|< | j| sN|ƒ j| f|žŽ S ||ƒ‚d S )Nr.   )Ú_condition_mapÚgetr�  r1   r  r  )r/   Z	conditionZexplanationr)   Úerrorr(   r(   r*   rd   Ý  s    


zContext._raise_errorc             C   s
   | j tŽ S )N)Ú_ignore_flagsr  )r/   r(   r(   r*   r]  ó  s    zContext._ignore_all_flagsc             G   s   | j t|ƒ | _ t|ƒS )N)r�  rj   )r/   r  r(   r(   r*   r¥  ÷  s    zContext._ignore_flagsc             G   s<   |rt |d ttfƒr|d }x|D ]}| jj|ƒ q$W d S )Nr&   )r_   rk   rj   r�  Úremove)r/   r  rŸ  r(   r(   r*   Ú_regard_flagsþ  s    
zContext._regard_flagsc             C   s   t | j| j d ƒS )Nr.   )rU   r#  r@   )r/   r(   r(   r*   rÇ     s    zContext.Etinyc             C   s   t | j| j d ƒS )Nr.   )rU   rA   r@   )r/   r(   r(   r*   rå     s    zContext.Etopc             C   s   | j }|| _ |S )N)r?   )r/   rl  r?   r(   r(   r*   r*    s    zContext._set_roundingrQ   c             C   sj   t |tƒr*||jƒ ksd|kr*| jtdƒS t|| d�}|jƒ r`t|jƒ| j	| j
 kr`| jtdƒS |j| ƒS )NrR   zAtrailing or leading whitespace and underscores are not permitted.)r0   zdiagnostic info too long in NaN)r_   r`   rb   rd   r   r   rƒ   rf   r8   r@   rä   r¸   )r/   rC  r€   r(   r(   r*   Úcreate_decimal#  s    zContext.create_decimalc             C   s   t j|ƒ}|j| ƒS )N)r   rq   r¸   )r/   r   r€   r(   r(   r*   Úcreate_decimal_from_float4  s    
z!Context.create_decimal_from_floatc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   r¼   )r/   r  r(   r(   r*   rh   F  s    zContext.absc             C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S )NT)r›   )r0   zUnable to convert %s to Decimal)rœ   rÂ   r•   rr   )r/   r  rT  rÐ   r(   r(   r*   Úadd[  s
    zContext.addc             C   s   t |j| ƒƒS )N)r`   r¸   )r/   r  r(   r(   r*   Ú_applyp  s    zContext._applyc             C   s   t |tƒstdƒ‚|jƒ S )Nz,canonical requires a Decimal as an argument.)r_   r   rr   r3  )r/   r  r(   r(   r*   r3  s  s    	
zContext.canonicalc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   r�   )r/   r  rT  r(   r(   r*   r�   €  s    !zContext.comparec             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   r4  )r/   r  rT  r(   r(   r*   r4  ¤  s     zContext.compare_signalc             C   s   t |dd�}|j|ƒS )NT)r›   )rœ   r/  )r/   r  rT  r(   r(   r*   r/  Ç  s    zContext.compare_totalc             C   s   t |dd�}|j|ƒS )NT)r›   )rœ   r8  )r/   r  rT  r(   r(   r*   r8  ä  s    zContext.compare_total_magc             C   s   t |dd�}|jƒ S )NT)r›   )rœ   r¶   )r/   r  r(   r(   r*   r¶   ì  s    
zContext.copy_absc             C   s   t |dd�}t|ƒS )NT)r›   )rœ   r   )r/   r  r(   r(   r*   Úcopy_decimalù  s    
zContext.copy_decimalc             C   s   t |dd�}|jƒ S )NT)r›   )rœ   r·   )r/   r  r(   r(   r*   r·     s    
zContext.copy_negatec             C   s   t |dd�}|j|ƒS )NT)r›   )rœ   r9  )r/   r  rT  r(   r(   r*   r9    s    zContext.copy_signc             C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S )NT)r›   )r0   zUnable to convert %s to Decimal)rœ   rÍ   r•   rr   )r/   r  rT  rÐ   r(   r(   r*   Údivide+  s
    zContext.dividec             C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S )NT)r›   )r0   zUnable to convert %s to Decimal)rœ   rÙ   r•   rr   )r/   r  rT  rÐ   r(   r(   r*   Ú
divide_intP  s
    zContext.divide_intc             C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S )NT)r›   )r0   zUnable to convert %s to Decimal)rœ   rÓ   r•   rr   )r/   r  rT  rÐ   r(   r(   r*   rÈ   g  s
    zContext.divmodc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   rV   )r/   r  r(   r(   r*   rV   |  s    zContext.expc             C   s   t |dd�}|j||| d�S )NT)r›   )r0   )rœ   rù   )r/   r  rT  r,  r(   r(   r*   rù   ”  s    zContext.fmac             C   s   t |tƒstdƒ‚|jƒ S )Nz/is_canonical requires a Decimal as an argument.)r_   r   rr   r<  )r/   r  r(   r(   r*   r<  «  s    	
zContext.is_canonicalc             C   s   t |dd�}|jƒ S )NT)r›   )rœ   r=  )r/   r  r(   r(   r*   r=  ¸  s    zContext.is_finitec             C   s   t |dd�}|jƒ S )NT)r›   )rœ   r$  )r/   r  r(   r(   r*   r$  Î  s    zContext.is_infinitec             C   s   t |dd�}|jƒ S )NT)r›   )rœ   r    )r/   r  r(   r(   r*   r    Ý  s    zContext.is_nanc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   r>  )r/   r  r(   r(   r*   r>  í  s    zContext.is_normalc             C   s   t |dd�}|jƒ S )NT)r›   )rœ   rŒ   )r/   r  r(   r(   r*   rŒ     s    zContext.is_qnanc             C   s   t |dd�}|jƒ S )NT)r›   )rœ   r?  )r/   r  r(   r(   r*   r?    s    zContext.is_signedc             C   s   t |dd�}|jƒ S )NT)r›   )rœ   r‹   )r/   r  r(   r(   r*   r‹   $  s    zContext.is_snanc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   r@  )r/   r  r(   r(   r*   r@  4  s    zContext.is_subnormalc             C   s   t |dd�}|jƒ S )NT)r›   )rœ   rA  )r/   r  r(   r(   r*   rA  J  s    zContext.is_zeroc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   rI  )r/   r  r(   r(   r*   rI  [  s    z
Context.lnc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   rL  )r/   r  r(   r(   r*   rL  q  s    zContext.log10c             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   rM  )r/   r  r(   r(   r*   rM  �  s    zContext.logbc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   rW  )r/   r  rT  r(   r(   r*   rW  §  s    zContext.logical_andc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   rY  )r/   r  r(   r(   r*   rY  Â  s    zContext.logical_invertc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   rZ  )r/   r  rT  r(   r(   r*   rZ  Õ  s    zContext.logical_orc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   rX  )r/   r  rT  r(   r(   r*   rX  ð  s    zContext.logical_xorc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   r½   )r/   r  rT  r(   r(   r*   r½     s    zContext.maxc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   r[  )r/   r  rT  r(   r(   r*   r[  &  s    zContext.max_magc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   r©   )r/   r  rT  r(   r(   r*   r©   7  s    zContext.minc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   r\  )r/   r  rT  r(   r(   r*   r\  R  s    zContext.min_magc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   r¹   )r/   r  r(   r(   r*   Úminusc  s    zContext.minusc             C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S )NT)r›   )r0   zUnable to convert %s to Decimal)rœ   rÆ   r•   rr   )r/   r  rT  rÐ   r(   r(   r*   Úmultiplyt  s
    zContext.multiplyc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   r_  )r/   r  r(   r(   r*   r_  ”  s    zContext.next_minusc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   r`  )r/   r  r(   r(   r*   r`  ¨  s    zContext.next_plusc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   ra  )r/   r  rT  r(   r(   r*   ra  ¼  s     zContext.next_towardc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   r"  )r/   r  r(   r(   r*   r"  ß  s    zContext.normalizec             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   rc  )r/   r  r(   r(   r*   rc  ÷  s    /zContext.number_classc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   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 )NT)r›   )r0   zUnable to convert %s to Decimal)rœ   r  r•   rr   )r/   r  rT  rþ   rÐ   r(   r(   r*   Úpower:  s
    IzContext.powerc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   rô   )r/   r  rT  r(   r(   r*   rô   Š  s    7zContext.quantizec             C   s   t dƒS )Nrž   )r   )r/   r(   r(   r*   rd  Ä  s    zContext.radixc             C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S )NT)r›   )r0   zUnable to convert %s to Decimal)rœ   rÕ   r•   rr   )r/   r  rT  rÐ   r(   r(   r*   rË   Ì  s
    zContext.remainderc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   rØ   )r/   r  rT  r(   r(   r*   rØ   ò  s    zContext.remainder_nearc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   rh  )r/   r  rT  r(   r(   r*   rh    s    zContext.rotatec             C   s   t |dd�}|j|ƒS )NT)r›   )rœ   r%  )r/   r  rT  r(   r(   r*   r%  1  s    zContext.same_quantumc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   ri  )r/   r  rT  r(   r(   r*   ri  I  s    zContext.scalebc             C   s   t |dd�}|j|| d�S )NT)r›   )r0   )rœ   rÊ   )r/   r  rT  r(   r(   r*   rÊ   \  s    zContext.shiftc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   r.  )r/   r  r(   r(   r*   r.  z  s    zContext.sqrtc             C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S )NT)r›   )r0   zUnable to convert %s to Decimal)rœ   rÃ   r•   rr   )r/   r  rT  rÐ   r(   r(   r*   Úsubtractš  s
    zContext.subtractc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   rµ   )r/   r  r(   r(   r*   rµ   ±  s    zContext.to_eng_stringc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   r´   )r/   r  r(   r(   r*   Úto_sci_stringÍ  s    zContext.to_sci_stringc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   r(  )r/   r  r(   r(   r*   r(  Õ  s    zContext.to_integral_exactc             C   s   t |dd�}|j| d�S )NT)r›   )r0   )rœ   rü   )r/   r  r(   r(   r*   rü   ó  s    zContext.to_integral_value)	NNNNNNNNN)N)rQ   )N)Wr2   r3   r4   r†  r“  r–  r‘  r˜  rk  rª   rI   r   r)  rH   rm  rd   r]  r¥  r§  r¦   rÇ   rå   r*  r¨  r©  rh   rª  r«  r3  r�   r4  r/  r8  r¶   r¬  r·   r9  r­  r®  rÈ   rV   rù   r<  r=  r$  r    r>  rŒ   r?  r‹   r@  rA  rI  rL  rM  rW  rY  rZ  rX  r½   r[  r©   r\  r¯  r°  r_  r`  ra  r"  rc  r±  r²  rô   rd  rË   rØ   rh  r%  ri  rÊ   r.  r³  rµ   r´  r(  rü   r„  r(   r(   r(   r*   r   B  s¬     
"

$#% #2
P:&" c               @   s&   e Zd Zd	Zd
dd„Zdd„ ZeZdS )ri   r=   rU   rV   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,   )r=   rU   rV   r_   r   r7   r8   rO   )r/   rt   r(   r(   r*   r†    s    



z_WorkRep.__init__c             C   s   d| j | j| jf S )Nz(%r, %r, %r))r=   rU   rV   )r/   r(   r(   r*   rª   (  s    z_WorkRep.__repr__)r=   rU   rV   )N)r2   r3   r4   r}  r†  rª   r´   r(   r(   r(   r*   ri     s   
ri   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„   )rV   rf   r`   rU   r©   )rÀ   rÁ   r@   Ztmpr‡   Ztmp_lenZ	other_lenrV   r(   r(   r*   r¿   /  s    r¿   c             C   sb   | dkrdS |dkr | d|  S t t| ƒƒ}t|ƒt|jdƒƒ }|| k rPd S | d|   S d S )Nr&   rž   rQ   )r`   rh   rf   Úrstrip)r5   r®   Zstr_nZval_nr(   r(   r*   r
  O  s    r
  c             C   sF   | dks|dkrt dƒ‚d}x$||kr@|||  |  d?  }}qW |S )Nr&   z3Both arguments to _sqrt_nearest should be positive.r.   )rl   )r5   r  rT  r(   r(   r*   Ú_sqrt_nearestd  s    
r¶  c             C   s2   d|> | |?  }}|d| |d @  |d@  |k S )Nr.   r,   r(   )r  rÊ   rT  rÏ   r(   r(   r*   Ú_rshift_nearests  s    r·  c             C   s&   t | |ƒ\}}|d| |d@  |k S )Nr,   r.   )rÈ   )r  rT  rÏ   rÐ   r(   r(   r*   Ú_div_nearest{  s    r¸  r  c       	   	   C   sî   | | }d}xn||kr*t |ƒ|| > |ksF||krzt |ƒ|| ? |krzt|| d> |t||t||ƒ  |ƒ ƒ}|d7 }qW tdtt|ƒƒ d|  ƒ }t||ƒ}t||ƒ}x0t|d ddƒD ]}t||ƒt|| |ƒ }qÀW t|| |ƒS )Nr&   r.   rž   r[   iöÿÿÿr„   )rh   r¸  r¶  r·  rU   rf   r`   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  )rf   r`   r¸  r¾  Ú_log10_digits)
r,  r®   r  r-  r   r¹  r�   Úlog_dZlog_10Zlog_tenpowerr(   r(   r*   rK  ³  s     

rK  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 )Nr,   r.   r&   rž   r  )rf   r`   r¸  r¾  rh   r¿  )	r,  r®   r  r-  r   r�   rÀ  r  Z	f_log_tenr(   r(   r*   rH  Õ  s"    rH  c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú_Log10Memoizec             C   s
   d| _ d S )NZ/23025850929940456840179914546843642076011014886)rx   )r/   r(   r(   r*   r†    s    z_Log10Memoize.__init__c             C   sš   |dk rt dƒ‚|t| jƒkr„d}xLd|| d  }tttd| |ƒdƒƒ}|| d … d| krdP |d7 }q$W |jdƒd d	… | _t| jd |d … ƒS )
Nr&   zp should be nonnegativer[   rž   r,   r  rQ   r.   r„   )rl   rf   rx   r`   r¸  r¾  rµ  rU   )r/   r  r  r¹  rx   r(   r(   r*   Ú	getdigits  s    	z_Log10Memoize.getdigitsN)r2   r3   r4   r†  rÂ  r(   r(   r(   r*   rÁ    s   rÁ  c       	      C   s°   t | |> | ƒ}tdtt|ƒƒ d|  ƒ }t| |ƒ}||> }x.t|d ddƒD ]}t| ||  || ƒ}qRW x6t|d dd	ƒD ]"}||d > }t|||  |ƒ}q‚W || S )
Nrž   r[   r.   r&   r,   iöÿÿÿr„   r„   r„   )r	  rU   rf   r`   r¸  rý   )	r  r¹  rº  r»  r¼  r  ZMshiftr  r�   r(   r(   r*   Ú_iexp&  s    
rÃ  c       	      C   s–   |d7 }t d|tt| ƒƒ d ƒ}|| }|| }|dkrH| d|  }n| d|   }t|t|ƒƒ\}}t|d| ƒ}tt|d| ƒdƒ|| d fS )Nr,   r&   r.   rž   iè  r[   )r½   rf   r`   rÈ   r¿  r¸  rÃ  )	r,  r®   r  r  rÏ   rÊ   ZcshiftZquotr  r(   r(   r*   r:  K  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ž   )rf   r`   rh   rH  r¸  r:  )r  r  r  r  r  rT  ZlxcrÊ   ZpcrÉ   rV   r(   r(   r*   r  o  s    
r  r  éF   é5   é(   é   rB  é   rž   rz   )	rÅ   Ú2Ú3Ú4Ú5Ú6Ú7Ú8r>   c             C   s0   | dkrt dƒ‚t| ƒ}dt|ƒ ||d   S )Nr&   z0The argument to _log10_lb should be nonnegative.r  )rl   r`   rf   )r,  Z
correctionZstr_cr(   r(   r*   r  ™  s    r  c             C   sL   t | tƒr| S t | tƒr t| ƒS |r8t | tƒr8tj| ƒS |rHtd|  ƒ‚tS )NzUnable to convert %s to Decimal)r_   r   rU   rp   rq   rr   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|jtdƒ | tj|ƒfS ttfS )Nr&   r.   z;strict semantics for mixing floats and Decimals are enabled)r_   r   Ú_numbersZRationalrP   r6   r7   r`   rU   r8   ÚdenominatorrO   Ú	numeratorZComplexrà   rß   rp   r   r  r   rd   rq   r•   )r/   r‡   r“   r0   r(   r(   r*   r”   ·  s$    

r”   r  i?B )r@   r?   r  r  rA   r#  r°   rä   r\   )r@   r?   r  r  a·          # A numeric string consists of:
#    \s*
    (?P<sign>[-+])?              # an optional sign, followed by either...
    (
        (?=\d|\.\d)              # ...a number (with at least one digit)
        (?P<int>\d*)             # having a (possibly empty) integer part
        (\.(?P<frac>\d*))?       # followed by an optional fractional part
        (E(?P<exp>[-+]?\d+))?    # followed by an optional exponent, or...
    |
        Inf(inity)?              # ...an infinity, or...
    |
        (?P<signal>s)?           # ...an (optionally signaling)
        NaN                      # NaN
        (?P<diag>\d*)            # with (possibly empty) diagnostic info.
    )
#    \s*
    \Z
z0*$z50*$zÉ\A
(?:
   (?P<fill>.)?
   (?P<align>[<>=^])
)?
(?P<sign>[-+ ])?
(?P<alt>\#)?
(?P<zeropad>0)?
(?P<minimumwidth>(?!0)\d+)?
(?P<thousands_sep>,)?
(?:\.(?P<precision>0|(?!0)\d+))?
(?P<type>[eEfFgGn%])?
\Z
c             C   s”  t j| ƒ}|d krtd|  ƒ‚|jƒ }|d }|d }|d d k	|d< |d 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jƒ }|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: ú ú>r=   rT   ÚminimumwidthrQ   rt  r&   rl  ZgGnr.   r5   rr  Úthousands_sepzJExplicit thousands separator conflicts with 'n' type in format specifier: ÚgroupingÚdecimal_pointrS   r[   r­   )Ú_parse_format_specifier_regexÚmatchrl   Ú	groupdictrU   Ú_localeÚ
localeconv)Úformat_specrp  ru   Zformat_dictrÓ  rÔ  r(   r(   r*   rv  D  sN    

rv  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)rf   rl   )	r=   r{  rz  rØ  rÓ  ZpaddingrÔ  r‚   Zhalfr(   r(   r*   rx  ”  s    "rx  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,   z unrecognised format for groupingr„   r„   rŸ   r„   r„   )Ú	itertoolsrå  ræ  rf   rß  ÚCHAR_MAXrl   )rÚ  rå  ræ  r(   r(   r*   Ú_group_lengths¯  s    ré  c             C   sä   |d }|d }g }xÀt |ƒD ]€}|dkr2tdƒ‚ttt| ƒ|dƒ|ƒ}|jd|t| ƒ  | | d …  ƒ | d | … } ||8 }|  r’|dkr’P |t|ƒ8 }qW tt| ƒ|dƒ}|jd|t| ƒ  | | d …  ƒ |jt|ƒƒS )NrÙ  rÚ  r&   zgroup length should be positiver.   rQ   )ré  rl   r©   r½   rf   rm   rn   Úreversed)rx   rz  Ú	min_widthÚseprÚ  Úgroupsr-  r(   r(   r*   Ú_insert_thousands_sepÆ  s     $$rî  c             C   s$   | rdS |d dkr|d S dS d S )NrT   r=   z +rS   r(   )Úis_negativerz  r(   r(   r*   rw  ë  s
    rw  c             C   s²   t | |ƒ}|s|d r"|d | }|dks6|d dkr\dddddœ|d  }|d	j||ƒ7 }|d d
krp|d
7 }|d r’|d t|ƒ t|ƒ }nd}t|||ƒ}t||| |ƒS )NZaltrÛ  r&   rl  ru  r¯   r®   )r¯   r®   rs  rr  z{0}{1:+}rq  rÕ  rØ  )rw  Úformatrf   rî  rx  )rï  rv   rw   rV   rz  r=   Zecharrë  r(   r(   r*   ry  õ  s    
ry  ZInfz-Infr«   l            l   ÿÿÿÿ lüÿÿÿÿÇNÎZoiÀ«æ)N)F)r&   )r  )r  )FF)FiÁ½ðÿ)N)r.   r„   )|Ú__all__r2   rD   Ú__version__Z__libmpdec_version__Zmathr{   ZnumbersrÐ  rE   Úcollectionsr'   Z_namedtupler   ÚImportErrorr   r   r   r   r   r   r   r   r$   Úmaxsizer    r!   r"   r#   ÚArithmeticErrorr   r   r	   r   ÚZeroDivisionErrorr
   r   r   r   r   r   r   r   r   rr   r   r  r¢  r—  rJ   r]   rB   rF   rL   ÚhasattrrK   rG   r   r   r   r   r6   ÚNumberÚregisterrN   r   ri   r¿   rU   r~   r	  r
  r¶  r·  r¸  r¾  rK  rH  rÁ  rÂ  r¿  rÃ  r:  r  r  rœ   r”   r   r   r   ÚreÚcompileÚVERBOSEÚ
IGNORECASErÝ  ra   ré   rí   ÚDOTALLrÜ  Zlocalerß  rv  rx  ré  rî  rw  ry  rG  rF  r:   r6  r  r5  r<   Ú	hash_infoÚmodulusr¤   rb  r¢   rÛ   r¡   r£   r¥   r(   r(   r(   r*   Ú<module>u   s~  


&



.                          

             ^

0",#
%$+
	

*
P
%
)