
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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_THREADSZ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__r0   r'   r'   r'   r)   r   ¼   s   c               @   s   e Zd ZdS )r   N)r1   r2   r3   r'   r'   r'   r)   r   Ó   s   
c               @   s   e Zd Zdd„ ZdS )r	   c             G   s,   |r(t |d j|d jddƒ}|j|ƒS tS )Nr%   ÚnT)Ú_dec_from_tripleÚ_signÚ_intÚ_fix_nanÚ_NaN)r.   r/   r(   Úansr'   r'   r)   r0   ö   s    
zInvalidOperation.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r	   ß   s   c               @   s   e Zd Zdd„ ZdS )r   c             G   s   t S )N)r9   )r.   r/   r(   r'   r'   r)   r0     s    zConversionSyntax.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r   ü   s   c               @   s   e Zd Zdd„ ZdS )r
   c             G   s   t | S )N)Ú_SignedInfinity)r.   r/   Úsignr(   r'   r'   r)   r0     s    zDivisionByZero.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r
     s   c               @   s   e Zd Zdd„ ZdS )r   c             G   s   t S )N)r9   )r.   r/   r(   r'   r'   r)   r0     s    zDivisionImpossible.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r     s   c               @   s   e Zd Zdd„ ZdS )r   c             G   s   t S )N)r9   )r.   r/   r(   r'   r'   r)   r0   )  s    zDivisionUndefined.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r   !  s   c               @   s   e Zd ZdS )r   N)r1   r2   r3   r'   r'   r'   r)   r   ,  s   
c               @   s   e Zd Zdd„ ZdS )r   c             G   s   t S )N)r9   )r.   r/   r(   r'   r'   r)   r0   C  s    zInvalidContext.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r   8  s   c               @   s   e Zd ZdS )r   N)r1   r2   r3   r'   r'   r'   r)   r   F  s   
c               @   s   e Zd ZdS )r   N)r1   r2   r3   r'   r'   r'   r)   r   R  s   	c               @   s   e Zd Zdd„ ZdS )r   c             G   sŽ   |j ttttfkrt| S |dk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   r5   ÚprecÚEmaxr   )r.   r/   r<   r(   r'   r'   r)   r0   s  s    


zOverflow.handleN)r1   r2   r3   r0   r'   r'   r'   r)   r   ]  s   c               @   s   e Zd ZdS )r   N)r1   r2   r3   r'   r'   r'   r)   r   ƒ  s   c               @   s   e Zd ZdS )r   N)r1   r2   r3   r'   r'   r'   r)   r   ’  s   c               @   s   e Zd Zefdd„ZdS )ÚMockThreadingc             C   s
   |j t S )N)ÚmodulesÚ	__xname__)r.   Úsysr'   r'   r)   Úlocal¼  s    zMockThreading.localN)r1   r2   r3   rD   rE   r'   r'   r'   r)   rA   »  s   rA   Ú__decimal_context__c             C   s,   | t ttfkr| jƒ } | jƒ  | tjƒ _d S )N)r   r   r   ÚcopyÚclear_flagsÚ	threadingÚcurrent_threadrF   )r/   r'   r'   r)   r   Ë  s    c              C   s4   y
t jƒ jS  tk
r.   tƒ } | t jƒ _| S X d S )N)rI   rJ   rF   ÚAttributeErrorr   )r/   r'   r'   r)   r   Ò  s    

c             C   s,   y| j S  tk
r&   tƒ }|| _ |S X d S )N)rF   rK   r   )Ú_localr/   r'   r'   r)   r   æ  s    c             C   s(   | t ttfkr| jƒ } | jƒ  | |_d S )N)r   r   r   rG   rH   rF   )r/   rL   r'   r'   r)   r   ô  s    c             C   s   | d krt ƒ } t| ƒS )N)r   Ú_ContextManager)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   Ú_expr7   r6   Ú_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ÚexprP   FÚdiagÚsignalÚNr4   ÚFTé   ztInvalid tuple size in creation of Decimal from list or tuple.  The list or tuple should have exactly three elements.z|Invalid sign.  The first value in the tuple should be an integer; either 0 for a positive number or 1 for a negative number.r+   é	   zTThe second value in the tuple must be composed of integers in the range 0 through 9.zUThe third value in the tuple must be an integer, or one of the strings 'F', 'n', 'N'.z;strict semantics for mixing floats and Decimals are enabledzCannot convert %r to Decimal)r%   r-   )r4   rX   )!ÚobjectÚ__new__Ú
isinstanceÚstrÚ_parserÚstripÚreplacer   Ú_raise_errorr   Úgroupr6   rT   r7   ÚlenrN   rO   ÚlstripÚabsr   Ú_WorkRepr<   rU   ÚlistÚtupleÚ
ValueErrorÚappendÚjoinÚmapÚfloatr   Ú
from_floatÚ	TypeError)ÚclsÚvaluer/   r.   ÚmÚintpartÚfracpartrU   rV   ÚdigitsZdigitr'   r'   r)   r]   4  s¬    







(



zDecimal.__new__c             C   s¬   t |tƒr| |ƒ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^   rT   ro   rq   Ú_mathZisinfZisnanÚreprZcopysignrg   Úas_integer_ratioÚ
bit_lengthr5   r_   r   )rr   Úfr<   r4   ÚdÚkÚresultr'   r'   r)   rp   Ê  s    

zDecimal.from_floatc             C   s(   | j r$| j}|dkrdS |dkr$dS dS )Nr4   r-   rX   r+   r%   )rO   rN   )r.   rU   r'   r'   r)   Ú_isnanò  s    zDecimal._isnanc             C   s   | j dkr| jrdS dS dS )NrY   r-   r%   éÿÿÿÿ)rN   r6   )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   rc   r	   r8   )r.   Úotherr/   Ú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   rO   Úis_snanrc   r	   Úis_qnan)r.   r…   r/   r'   r'   r)   Ú_compare_check_nans.  s(    zDecimal._compare_check_nansc             C   s   | j p| jdkS )NrP   )rO   r7   )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-   rP   r‚   r‚   r‚   r‚   r‚   r‚   r‚   r‚   )rO   rƒ   r6   Úadjustedr7   rN   )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…   r/   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…   r/   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…   r/   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…   r/   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…   r/   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_otherrO   rˆ   r   r�   )r.   r…   r/   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‚   éþÿÿÿ)rO   r‰   rq   Úis_nanÚ_PyHASH_NANr6   Ú_PyHASH_INFrN   ÚpowÚ_PyHASH_MODULUSÚ_PyHASH_10INVrT   r7   )r.   Zexp_hashZhash_r:   r'   r'   r)   Ú__hash__Ô  s    

zDecimal.__hash__c             C   s   t | jttt| jƒƒ| jƒS )N)r   r6   rj   rn   rT   r7   rN   )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œ   rx   )r%   r-   )
rO   rž   rk   ÚOverflowErrorrT   r7   rN   Úminr|   r6   )r.   r4   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 )NrR   rS   rY   ZInfinityr4   ÚNaNr„   r%   é   r-   rP   rZ   Ú.ÚeÚEz%+diúÿÿÿ)r6   rO   rN   r7   re   r   Úcapitals)	r.   Úengr/   r<   Ú
leftdigitsÚdotplaceru   rv   rU   r'   r'   r)   Ú__str__,  s:    




zDecimal.__str__c             C   s   | j d|d�S )NT)r¯   r/   )r²   )r.   r/   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)r/   )rO   rˆ   r   r>   r   Úcopy_absÚcopy_negateÚ_fix)r.   r/   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)r/   )rO   rˆ   r   r>   r   r´   r   r¶   )r.   r/   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)r/   )r´   rO   rˆ   r6   r·   r¸   )r.   Úroundr/   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-   rP   )r%   r%   )rš   r“   r   rO   rˆ   rƒ   r6   rc   r	   r   r§   rN   r>   r   r5   r¶   Úmaxr?   Ú_rescalerh   Ú
_normalizer<   rT   rU   )
r.   r…   r/   r:   rU   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)r/   )rš   r“   rO   rˆ   rÀ   rµ   )r.   r…   r/   r:   r'   r'   r)   Ú__sub__  s    zDecimal.__sub__c             C   s"   t |ƒ}|tkr|S |j| |d�S )N)r/   )rš   r“   rÁ   )r.   r…   r/   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 * (+-)INFrP   Ú1)rš   r“   r   r6   rO   rˆ   rƒ   rc   r	   r;   rN   r5   r¶   r7   rh   r_   rT   )r.   r…   r/   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 infinityrP   z0 / 0zx / 0r%   r-   rœ   rx   )rš   r“   r   r6   rO   rˆ   rƒ   rc   r	   r;   r   r5   ÚEtinyr   r
   rN   re   r7   r?   rh   ÚdivmodrT   r_   r¶   )r.   r…   r/   r<   r:   rU   Ú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+   rP   r%   rœ   z%quotient too large in //, % or divmodr�   )r6   rƒ   rN   r§   r�   r5   r¼   r>   r?   rh   rU   rT   rÆ   r_   rc   r   )r.   r…   r/   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)r/   )rš   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ƒ }| 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ˆ   r6   rƒ   rc   r	   r;   r   r
   rÏ   r¶   )r.   r…   r/   r:   r<   ZquotientrÉ   r'   r'   r)   Ú
__divmod__´  s0    
zDecimal.__divmod__c             C   s"   t |ƒ}|tkr|S |j| |d�S )N)r/   )rš   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ƒ }| 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ƒ   rc   r	   r   rÏ   r¶   )r.   r…   r/   r:   rÉ   r'   r'   r)   Ú__mod__ß  s"    
zDecimal.__mod__c             C   s"   t |ƒ}|tkr|S |j| |d�S )N)r/   )rš   r“   rÓ   )r.   r…   r/   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)rP   r-   r+   rœ   r%   r�   )r   rš   rˆ   rƒ   rc   r	   r   r   r¶   r§   rN   r5   r6   r�   r?   r   r¼   r>   rh   rU   rT   rÆ   r_   )r.   r…   r/   r:   Úideal_exponentrÌ   r¾   r¿   rÍ   rÎ   r<   r'   r'   r)   Úremainder_near  sZ    






zDecimal.remainder_nearc             C   sœ   t |ƒ}|tkr|S |d k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ƒ   rc   r	   r;   r6   r
   r   rÏ   )r.   r…   r/   r:   r'   r'   r)   Ú__floordiv__L  s$    zDecimal.__floordiv__c             C   s"   t |ƒ}|tkr|S |j| |d�S )N)r/   )rš   r“   r×   )r.   r…   r/   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‰   rk   r6   r_   ro   )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œ   rP   r‚   )	rO   r�   rk   rƒ   r¦   r6   rN   rT   r7   )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)Úcomplexro   )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 )NrP   T)	r7   r?   Úclampre   rf   r5   r6   rN   r   )r.   r/   ZpayloadZmax_payload_lenr'   r'   r)   r8   –  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 )NrP   z
above Emaxr%   rÃ   r-   r‚   )rO   r�   r8   r   rÅ   ÚEtopr@   râ   r§   r»   rN   rc   r   r5   r6   re   r7   r?   r   r   r   Ú_pick_rounding_functionr>   r_   rT   r   r   )r.   r/   rÅ   rã   Úexp_maxZnew_expZexp_minr:   Zself_is_subnormalrw   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_zerosr7   )r.   r?   r'   r'   r)   Ú_round_down  s    zDecimal._round_downc             C   s   | j |ƒ S )N)rè   )r.   r?   r'   r'   r)   Ú	_round_up  s    zDecimal._round_upc             C   s*   | j | dkrdS t| j |ƒr"dS dS d S )NZ56789r-   r%   r‚   )r7   rç   )r.   r?   r'   r'   r)   Ú_round_half_up  s
    zDecimal._round_half_upc             C   s   t | j|ƒrdS | j|ƒS d S )Nr-   r‚   )Ú_exact_halfr7   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ë   r7   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)r6   rè   )r.   r?   r'   r'   r)   Ú_round_ceiling+  s    
zDecimal._round_ceilingc             C   s    | j s| j|ƒS | j|ƒ S d S )N)r6   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)r7   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^   rT   rq   r5   ÚquantizerO   rž   rk   r¦   r¼   r   )r.   r4   rU   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%   )rO   rž   rk   r¦   rT   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%   )rO   rž   rk   r¦   rT   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™   rX   r„   r4   rY   zINF * 0 in fmaz0 * INF in fma)rš   rO   r   rN   rc   r	   r;   r6   r5   r_   rT   r7   rÀ   )r.   r…   Zthirdr/   Ú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�   rc   r	   r8   Ú
_isintegerr�   r?   Ú_isevenr6   rg   rT   rh   Úto_integral_valuer¡   rU   Úranger5   r_   )r.   r…   Úmodulor/   r†   r‡   Zmodulo_is_nanr<   ÚbaseÚexponentÚir'   r'   r)   Ú_power_moduloÓ  sl    



zDecimal._power_moduloc             C   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Ã   rP   r+   é   rª   é   é]   éA   rx   é   rZ   éd   )r+   r  rª   r  )rh   rT   rU   r<   rø   r6   rN   r§   r5   Ú_nbitsre   r_   Ú_decimal_lshift_exactrÆ   rg   Ú	_log10_lb)r.   r…   ÚpÚxÚxcÚxeÚyÚycÚyerþ   rÕ   ZzerosZ
last_digitr¬   ZemaxrÉ   rt   r4   Zxc_bitsÚremÚarÍ   rÎ   Zstr_xcr'   r'   r)   Ú_power_exact(  sÒ    :









&&&&


 zDecimal._power_exactc             C   s@  |d k	r| j |||ƒ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 integerrP   rÃ   FTrZ   rx   rœ   z
above Emax)*r   rš   r“   r   rˆ   rc   r	   Ú_Oner6   rø   rù   rµ   r5   r;   rƒ   r?   rT   rN   r   r   r�   Ú_log10_exp_boundre   r_   r@   rÅ   r  r7   rh   rU   r<   Ú_dpowerrG   rH   Ú_signalsÚtrapsr¶   Úflagsr   r   r   r   )r.   r…   rü   r/   r:   Zresult_signZ
multiplierrU   Zself_adjÚexactZboundrÅ   r
  r  r  r  r  r  r  ÚextrarÇ   rÌ   Z
newcontextZ	exceptionr'   r'   r)   Ú__pow__	  sÊ    














"




zDecimal.__pow__c             C   s"   t |ƒ}|tkr|S |j| |d�S )N)r/   )rš   r“   r  )r.   r…   r/   r'   r'   r)   Ú__rpow__í	  s    zDecimal.__rpow__c             C   s¼   |d krt ƒ }| jr(| j|d�}|r(|S | j|ƒ}|jƒ 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)r/   rP   r%   r-   )r   rO   rˆ   r¶   rƒ   r5   r6   r@   rã   râ   re   r7   rN   )r.   r/   r:   Úduprå   ÚendrU   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 quantizerP   z9exponent of quantize result too large for current contextr-   z7quantize result has too many digits for current context)rš   r   r>   rO   rˆ   rƒ   r   rc   r	   rÅ   rN   r@   r5   r6   r¶   r�   r?   r¼   re   r7   ÚEminr   r   r   )r.   rU   r>   r/   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š   rO   rž   Úis_infiniterN   )r.   r…   r/   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 )NrP   r%   rÃ   r-   )
rO   r   r5   r6   rN   r7   re   rä   r_   rT   )r.   rU   r>   rw   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-   )rk   rO   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)r/   r%   rP   )rO   rˆ   r   rN   r5   r6   r   r>   r¼   rc   r   r   )r.   r>   r/   r:   r'   r'   r)   Úto_integral_exact’
  s$    



zDecimal.to_integral_exactc             C   s`   |d krt ƒ }|d kr|j}| jr>| j|d�}|r6|S t| ƒS | jdkrPt| ƒS | jd|ƒS d S )N)r/   r%   )r   r>   rO   rˆ   r   rN   r¼   )r.   r>   r/   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)r/   r%   rP   r+   r-   zsqrt(-x), x > 0rœ   r  Trx   )r   rO   rˆ   rƒ   r6   r   r5   rN   r¶   rc   r	   r?   rh   rU   rT   re   r7   rÆ   r_   Ú_shallow_copyÚ_set_roundingr   r>   )r.   r/   r:   r?   Úopr¬   ÚcÚlrÈ   r  rÉ   r4   rÍ   r>   r'   r'   r)   ÚsqrtÂ
  s`    










zDecimal.sqrtc             C   s¶   t |dd�}|d krtƒ }| j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   rO   r�   r¶   rˆ   r�   Úcompare_total)r.   r…   r/   ÚsnÚonr*  r:   r'   r'   r)   r»   %  s&    


	
zDecimal.maxc             C   s¶   t |dd�}|d krtƒ }| j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   rO   r�   r¶   rˆ   r�   r-  )r.   r…   r/   r.  r/  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%   TrP   )rO   rN   r7   re   )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‚   )rN   r7   )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%   )rN   re   r7   rq   )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™   )r/   )rš   r‹   r›   )r.   r…   r/   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š   r6   Ú_NegativeOner  r�   re   r7   Ú_ZerorN   )r.   r…   r/   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…   r/   rÚ   Úor'   r'   r)   Úcompare_total_magå  s    zDecimal.compare_total_magc             C   s   t d| j| j| jƒS )Nr%   )r5   r7   rN   rO   )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-   )r6   r5   r7   rN   rO   )r.   r'   r'   r)   rµ   ô  s    zDecimal.copy_negatec             C   s"   t |dd�}t|j| j| j| jƒS )NT)r™   )rš   r5   r6   r7   rN   rO   )r.   r…   r/   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)r/   r-   r%   rZ   rÃ   rP   r=   rx   rœ   r‚   )r   rˆ   rƒ   r4  r  r   r?   r�   r6   re   r_   r@   r5   rÅ   rh   rT   rU   r<   Ú_dexpr'  r(  r   r¶   r>   )r.   r/   r:   r
  Úadjr)  r*  r¬   r  rÇ   rU   r>   r'   r'   r)   rU     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)rO   )r.   r'   r'   r)   Ú	is_finiteT  s    zDecimal.is_finitec             C   s
   | j dkS )NrY   )rN   )r.   r'   r'   r)   r"  \  s    zDecimal.is_infinitec             C   s
   | j dkS )Nr4   rX   )r4   rX   )rN   )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)rO   r   r!  r�   )r.   r/   r'   r'   r)   Ú	is_normald  s
    zDecimal.is_normalc             C   s
   | j dkS )Nr4   )rN   )r.   r'   r'   r)   rŠ   l  s    zDecimal.is_qnanc             C   s
   | j dkS )Nr-   )r6   )r.   r'   r'   r)   Ú	is_signedp  s    zDecimal.is_signedc             C   s
   | j dkS )NrX   )rN   )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)rO   r   r�   r!  )r.   r/   r'   r'   r)   Úis_subnormalx  s
    zDecimal.is_subnormalc             C   s   | j  o| jdkS )NrP   )rO   r7   )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‚   )rN   re   r7   r_   rh   rT   rU   )r.   r9  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)r/   r-   zln of a negative valuer+   rx   rœ   rZ   r%   )r   rˆ   Ú_NegativeInfinityrƒ   Ú	_Infinityr  r4  r6   rc   r	   rh   rT   rU   r?   rC  Ú_dlogre   r_   rg   r5   r'  r(  r   r¶   r>   )
r.   r/   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‚   )rN   re   r7   r_   rh   rT   rU   )r.   r9  r)  r*  r¬   rA  rB  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)r/   r-   zlog10 of a negative valuer%   rÃ   rP   r+   rx   rœ   rZ   )r   rˆ   rD  rƒ   rE  r6   rc   r	   r7   re   r   rN   rh   rT   rU   r?   r  Ú_dlog10r_   rg   r5   r'  r(  r   r¶   r>   )
r.   r/   r:   r)  r*  r¬   r
  r$  rÇ   r>   r'   r'   r)   Úlog10í  s:    
.$

zDecimal.log10c             C   sV   | j |d�}|r|S |d kr"tƒ }| jƒ r.tS | s@|jtddƒS t| jƒ ƒ}|j|ƒS )N)r/   zlogb(0)r-   )	rˆ   r   rƒ   rE  rc   r
   r   r�   r¶   )r.   r/   r:   r'   r'   r)   Úlogb   s    	zDecimal.logbc             C   s8   | j dks| jdkrdS x| jD ]}|dkr dS q W dS )Nr%   FZ01T)r6   rN   r7   )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%   rP   )r?   re   )r.   r/   Ú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™   rR   c             S   s$   g | ]\}}t t|ƒt|ƒ@ ƒ‘qS r'   )r_   rT   )Ú.0r  Úbr'   r'   r)   ú
<listcomp>g  s    z'Decimal.logical_and.<locals>.<listcomp>r%   rP   )r   rš   rM  rc   r	   rP  r7   rm   Úzipr5   rf   )r.   r…   r/   rN  rO  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_xorr5   r?   )r.   r/   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™   rR   c             S   s$   g | ]\}}t t|ƒt|ƒB ƒ‘qS r'   )r_   rT   )rQ  r  rR  r'   r'   r)   rS    s    z&Decimal.logical_or.<locals>.<listcomp>r%   rP   )r   rš   rM  rc   r	   rP  r7   rm   rT  r5   rf   )r.   r…   r/   rN  rO  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™   rR   c             S   s$   g | ]\}}t t|ƒt|ƒA ƒ‘qS r'   )r_   rT   )rQ  r  rR  r'   r'   r)   rS  �  s    z'Decimal.logical_xor.<locals>.<listcomp>r%   rP   )r   rš   rM  rc   r	   rP  r7   rm   rT  r5   rf   )r.   r…   r/   rN  rO  r€   r'   r'   r)   rV  ‚  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   rO   r�   r¶   rˆ   r´   r�   r-  )r.   r…   r/   r.  r/  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   rO   r�   r¶   rˆ   r´   r�   r-  )r.   r…   r/   r.  r/  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)r/   r-   r%   r=   rÃ   r‚   )r   rˆ   rƒ   rD  r5   r?   rã   rG   r(  r   Ú_ignore_all_flagsr¶   rÁ   rÅ   )r.   r/   r:   Únew_selfr'   r'   r)   Ú
next_minusÏ  s"    

zDecimal.next_minusc             C   s    |d krt ƒ }| j|d�}|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)r/   r-   r=   r%   rÃ   r‚   )r   rˆ   rƒ   rE  r5   r?   rã   rG   r(  r   r[  r¶   rÀ   rÅ   )r.   r/   r:   r\  r'   r'   r)   Ú	next_plusæ  s"    

zDecimal.next_plusc             C   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�   r7  r^  r]  rƒ   rc   r   r6   r   r   r�   r!  r   r   r   )r.   r…   r/   r:   Z
comparisonr'   r'   r)   Únext_towardý  s4    	








zDecimal.next_towardc             C   sˆ   | j ƒ rdS | jƒ rdS | jƒ }|dkr,dS |dk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)r/   z
-Subnormalz
+Subnormalz-Normalz+Normalr‚   )r‰   rŠ   rƒ   r?  r6   r   r>  )r.   r/   Ú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%   rP   )r   rš   rˆ   rN   rc   r	   r?   rT   rƒ   r   r7   re   r5   r6   rf   )r.   r…   r/   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ˆ   rN   rc   r	   r@   r?   rT   rƒ   r   r5   r6   r7   r¶   )r.   r…   r/   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%   rP   )r   rš   rˆ   rN   rc   r	   r?   rT   rƒ   r   r7   re   r5   r6   rf   )r.   r…   r/   r:   rc  rd  re  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   rh  r_   )r.   r'   r'   r)   Ú__copy__½  s    zDecimal.__copy__c             C   s   t | ƒtkr| S | jt| ƒƒS )N)rj  r   rh  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)Ú_localeconvrj  ú%ÚgÚGr+   Ú	precisionÚeEr-   zfF%ZgGr%   rª   rP   rR   iúÿÿÿ)r   Ú_parse_format_specifierrO   Ú_format_signr6   r_   r´   Ú_format_alignr®   r5   r7   rN   r>   r%  r¼   re   Ú_format_number)r.   Z	specifierr/   rn  Úspecr<   Úbodyr>   rr  r°   r±   ru   rv   rU   r'   r'   r)   Ú
__format__É  sZ    
"

zDecimal.__format__)rN   r7   r6   rO   )rP   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)�r1   r2   r3   Ú	__slots__r]   Úclassmethodrp   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á   r8   r¶   rè   ré   rê   rì   rî   rï   rð   rñ   Údicträ   ró   rô   rõ   r÷   r   r  r  r  r   rò   r#  r¼   r%  r&  rú   Úto_integralr,  r»   r§   rø   rù   r�   r1  r2  r-  r6  r´   rµ   r7  rU   r:  r;  r"  rž   r<  rŠ   r=  r‰   r>  r?  rC  rG  r  rJ  rK  rM  rP  rU  rW  rX  rV  rY  rZ  r]  r^  r_  ra  rb  rf  rg  rÈ   ri  rk  rm  rz  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   r6   r7   rN   rO   )r<   Zcoefficientrþ   Zspecialr.   r'   r'   r)   r5     s    
r5   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )rM   c             C   s   |j ƒ | _d S )N)rG   Únew_context)r.   rƒ  r'   r'   r)   Ú__init__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)r1   r2   r3   r„  r†  rŠ  r'   r'   r'   r)   rM   3  s   rM   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)rT   )rQ  rÚ   )r  r'   r)   ú	<genexpr>n  s    z#Context.__init__.<locals>.<genexpr>r%   c             3   s   | ]}|t |ˆ kƒfV  qd S )N)rT   )rQ  rÚ   )r  r'   r)   r‹  u  s    )r   Ú	NameErrorr?   r>   r!  r@   r®   râ   Ú_ignored_flagsr  rG   r^   r�  r  Úfromkeysr  )r.   r?   r>   r!  r@   r®   râ   r  r  r�  Zdcr'   )r  r  r)   r„  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: %sr`  z%s must be in [%d, %s]. got: %sz%s must be in [%d, %d]. got %s)r^   rT   rq   rk   r\   Ú__setattr__)r.   Únamers   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�  rq   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-   r`  r!  z-infr%   r@   r®   râ   r>   z%s: invalid rounding moder  r  r�  z.'decimal.Context' object has no attribute '%s')r‘  Ú_rounding_modesrq   r\   r�  r”  rK   )r.   r�  rs   r'   r'   r)   r�  ’  s(    zContext.__setattr__c             C   s   t d| ƒ‚d S )Nz%s cannot be deleted)rK   )r.   r�  r'   r'   r)   Ú__delattr__«  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'   )rQ  Úsigrˆ  r'   r'   r)   rS  °  s    z&Context.__reduce__.<locals>.<listcomp>c             S   s   g | ]\}}|r|‘qS r'   r'   )rQ  r—  rˆ  r'   r'   r)   rS  ±  s    )
r  Úitemsr  rh  r?   r>   r!  r@   r®   râ   )r.   r  r  r'   r'   r)   ri  ¯  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'   )r1   )rQ  r}   rˆ  r'   r'   r)   rS  ½  s    z$Context.__repr__.<locals>.<listcomp>zflags=[z, ú]c             S   s   g | ]\}}|r|j ‘qS r'   )r1   )rQ  r‡  rˆ  r'   r'   r)   rS  ¿  s    ztraps=[ú))rl   Úvarsr  r˜  rm   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)   rH   Ã  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!  r@   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!  r@   r®   râ   r  rG   r  r�  )r.   rŸ  r'   r'   r)   rG   Ô  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�  r0   r  r  )r.   Z	conditionZexplanationr(   Úerrorr'   r'   r)   rc   Ý  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�  ri   )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^   rj   ri   r�  Úremove)r.   r  r�  r'   r'   r)   Ú_regard_flagsþ  s    
zContext._regard_flagsc             C   s   t | j| j d ƒS )Nr-   )rT   r!  r?   )r.   r'   r'   r)   rÅ     s    zContext.Etinyc             C   s   t | j| j d ƒS )Nr-   )rT   r@   r?   )r.   r'   r'   r)   rã     s    zContext.Etopc             C   s   | j }|| _ |S )N)r>   )r.   rj  r>   r'   r'   r)   r(    s    zContext._set_roundingrP   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 )NrQ   zAtrailing or leading whitespace and underscores are not permitted.)r/   zdiagnostic info too long in NaN)r^   r_   ra   rc   r   r   r�   re   r7   r?   râ   r¶   )r.   rA  r~   r'   r'   r)   Úcreate_decimal#  s    zContext.create_decimalc             C   s   t j|ƒ}|j| ƒS )N)r   rp   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™   )r/   )rš   rº   )r.   r  r'   r'   r)   rg   F  s    zContext.absc             C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S )NT)r™   )r/   zUnable to convert %s to Decimal)rš   rÀ   r“   rq   )r.   r  rR  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   rq   r1  )r.   r  r'   r'   r)   r1  s  s    	
zContext.canonicalc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   r›   )r.   r  rR  r'   r'   r)   r›   €  s    !zContext.comparec             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   r2  )r.   r  rR  r'   r'   r)   r2  ¤  s     zContext.compare_signalc             C   s   t |dd�}|j|ƒS )NT)r™   )rš   r-  )r.   r  rR  r'   r'   r)   r-  Ç  s    zContext.compare_totalc             C   s   t |dd�}|j|ƒS )NT)r™   )rš   r6  )r.   r  rR  r'   r'   r)   r6  ä  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š   r7  )r.   r  rR  r'   r'   r)   r7    s    zContext.copy_signc             C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S )NT)r™   )r/   zUnable to convert %s to Decimal)rš   rË   r“   rq   )r.   r  rR  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™   )r/   zUnable to convert %s to Decimal)rš   r×   r“   rq   )r.   r  rR  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™   )r/   zUnable to convert %s to Decimal)rš   rÑ   r“   rq   )r.   r  rR  rÎ   r'   r'   r)   rÆ   g  s
    zContext.divmodc             C   s   t |dd�}|j| d�S )NT)r™   )r/   )rš   rU   )r.   r  r'   r'   r)   rU   |  s    zContext.expc             C   s   t |dd�}|j||| d�S )NT)r™   )r/   )rš   r÷   )r.   r  rR  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   rq   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™   )r/   )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™   )r/   )rš   r>  )r.   r  r'   r'   r)   r>  4  s    zContext.is_subnormalc             C   s   t |dd�}|jƒ S )NT)r™   )rš   r?  )r.   r  r'   r'   r)   r?  J  s    zContext.is_zeroc             C   s   t |dd�}|j| d�S )NT)r™   )r/   )rš   rG  )r.   r  r'   r'   r)   rG  [  s    z
Context.lnc             C   s   t |dd�}|j| d�S )NT)r™   )r/   )rš   rJ  )r.   r  r'   r'   r)   rJ  q  s    zContext.log10c             C   s   t |dd�}|j| d�S )NT)r™   )r/   )rš   rK  )r.   r  r'   r'   r)   rK  �  s    zContext.logbc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   rU  )r.   r  rR  r'   r'   r)   rU  §  s    zContext.logical_andc             C   s   t |dd�}|j| d�S )NT)r™   )r/   )rš   rW  )r.   r  r'   r'   r)   rW  Â  s    zContext.logical_invertc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   rX  )r.   r  rR  r'   r'   r)   rX  Õ  s    zContext.logical_orc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   rV  )r.   r  rR  r'   r'   r)   rV  ð  s    zContext.logical_xorc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   r»   )r.   r  rR  r'   r'   r)   r»     s    zContext.maxc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   rY  )r.   r  rR  r'   r'   r)   rY  &  s    zContext.max_magc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   r§   )r.   r  rR  r'   r'   r)   r§   7  s    zContext.minc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   rZ  )r.   r  rR  r'   r'   r)   rZ  R  s    zContext.min_magc             C   s   t |dd�}|j| d�S )NT)r™   )r/   )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™   )r/   zUnable to convert %s to Decimal)rš   rÄ   r“   rq   )r.   r  rR  rÎ   r'   r'   r)   Úmultiplyt  s
    zContext.multiplyc             C   s   t |dd�}|j| d�S )NT)r™   )r/   )rš   r]  )r.   r  r'   r'   r)   r]  ”  s    zContext.next_minusc             C   s   t |dd�}|j| d�S )NT)r™   )r/   )rš   r^  )r.   r  r'   r'   r)   r^  ¨  s    zContext.next_plusc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   r_  )r.   r  rR  r'   r'   r)   r_  ¼  s     zContext.next_towardc             C   s   t |dd�}|j| d�S )NT)r™   )r/   )rš   r   )r.   r  r'   r'   r)   r   ß  s    zContext.normalizec             C   s   t |dd�}|j| d�S )NT)r™   )r/   )rš   ra  )r.   r  r'   r'   r)   ra  ÷  s    /zContext.number_classc             C   s   t |dd�}|j| d�S )NT)r™   )r/   )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™   )r/   zUnable to convert %s to Decimal)rš   r  r“   rq   )r.   r  rR  rü   rÎ   r'   r'   r)   Úpower:  s
    IzContext.powerc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   rò   )r.   r  rR  r'   r'   r)   rò   Š  s    7zContext.quantizec             C   s   t dƒS )Nrœ   )r   )r.   r'   r'   r)   rb  Ä  s    zContext.radixc             C   s8   t |dd�}|j|| d�}|tkr0td| ƒ‚n|S d S )NT)r™   )r/   zUnable to convert %s to Decimal)rš   rÓ   r“   rq   )r.   r  rR  rÎ   r'   r'   r)   rÉ   Ì  s
    zContext.remainderc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   rÖ   )r.   r  rR  r'   r'   r)   rÖ   ò  s    zContext.remainder_nearc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   rf  )r.   r  rR  r'   r'   r)   rf    s    zContext.rotatec             C   s   t |dd�}|j|ƒS )NT)r™   )rš   r#  )r.   r  rR  r'   r'   r)   r#  1  s    zContext.same_quantumc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   rg  )r.   r  rR  r'   r'   r)   rg  I  s    zContext.scalebc             C   s   t |dd�}|j|| d�S )NT)r™   )r/   )rš   rÈ   )r.   r  rR  r'   r'   r)   rÈ   \  s    zContext.shiftc             C   s   t |dd�}|j| d�S )NT)r™   )r/   )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™   )r/   zUnable to convert %s to Decimal)rš   rÁ   r“   rq   )r.   r  rR  rÎ   r'   r'   r)   Úsubtractš  s
    zContext.subtractc             C   s   t |dd�}|j| d�S )NT)r™   )r/   )rš   r³   )r.   r  r'   r'   r)   r³   ±  s    zContext.to_eng_stringc             C   s   t |dd�}|j| d�S )NT)r™   )r/   )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™   )r/   )rš   r&  )r.   r  r'   r'   r)   r&  Õ  s    zContext.to_integral_exactc             C   s   t |dd�}|j| d�S )NT)r™   )r/   )rš   rú   )r.   r  r'   r'   r)   rú   ó  s    zContext.to_integral_value)	NNNNNNNNN)N)rP   )N)Wr1   r2   r3   r„  r‘  r”  r�  r–  ri  r¨   rH   rž  r'  rG   rk  rc   r[  r£  r¥  r¤   rÅ   rã   r(  r¦  r§  rg   r¨  r©  r1  r›   r2  r-  r6  r´   rª  rµ   r7  r«  r¬  rÆ   rU   r÷   r:  r;  r"  rž   r<  rŠ   r=  r‰   r>  r?  rG  rJ  rK  rU  rW  rX  rV  r»   rY  r§   rZ  r­  r®  r]  r^  r_  r   ra  r¯  r°  rò   rb  rÉ   rÖ   rf  r#  rg  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 )rh   r<   rT   rU   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<   rT   rU   r^   r   r6   r7   rN   )r.   rs   r'   r'   r)   r„    s    



z_WorkRep.__init__c             C   s   d| j | j| jf S )Nz(%r, %r, %r))r<   rT   rU   )r.   r'   r'   r)   r¨   (  s    z_WorkRep.__repr__)r<   rT   rU   )N)r1   r2   r3   r{  r„  r¨   r²   r'   r'   r'   r)   rh     s   
rh   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‚   )rU   re   r_   rT   r§   )r¾   r¿   r?   Ztmpr…   Ztmp_lenZ	other_lenrU   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œ   rP   )r_   rg   re   Úrstrip)r4   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-   )rk   )r4   r  rR  r'   r'   r)   Ú_sqrt_nearestd  s    
r´  c             C   s2   d|> | |?  }}|d| |d @  |d@  |k S )Nr-   r+   r'   )r  rÈ   rR  rÍ   r'   r'   r)   Ú_rshift_nearests  s    rµ  c             C   s&   t | |ƒ\}}|d| |d@  |k S )Nr+   r-   )rÆ   )r  rR  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œ   rZ   iöÿÿÿr‚   )rg   r¶  r´  rµ  rT   re   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  )re   r_   r¶  r¼  Ú_log10_digits)
r*  r¬   r
  r+  r}   r·  r   Úlog_dZlog_10Zlog_tenpowerr'   r'   r)   rI  ³  s     

rI  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  )re   r_   r¶  r¼  rg   r½  )	r*  r¬   r
  r+  r}   r   r¾  r  Z	f_log_tenr'   r'   r)   rF  Õ  s"    rF  c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú_Log10Memoizec             C   s
   d| _ d S )NZ/23025850929940456840179914546843642076011014886)rw   )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 nonnegativerZ   rœ   r+   r  rP   r-   r‚   )rk   re   rw   r_   r¶  r¼  r³  rT   )r.   r
  r  r·  rw   r'   r'   r)   Ú	getdigits  s    	z_Log10Memoize.getdigitsN)r1   r2   r3   r„  rÀ  r'   r'   r'   r)   r¿    s   r¿  c       	      C   s°   t | |> | ƒ}tdtt|ƒƒ d|  ƒ }t| |ƒ}||> }x.t|d ddƒD ]}t| ||  || ƒ}qRW x6t|d dd	ƒD ]"}||d > }t|||  |ƒ}q‚W || S )
Nrœ   rZ   r-   r%   r+   iöÿÿÿr‚   r‚   r‚   )r  rT   re   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è  rZ   )r»   re   r_   rÆ   r½  r¶  rÁ  )	r*  r¬   r
  r  rÍ   rÈ   ZcshiftZquotr  r'   r'   r)   r8  K  s    r8  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œ   )re   r_   rg   rF  r¶  r8  )r  r  r  r  r
  rR  ZlxcrÈ   ZpcrÇ   rU   r'   r'   r)   r  o  s    
r  r  éF   é5   é(   é   r@  é   rœ   rx   )	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  )rk   r_   re   )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   rT   ro   rp   rq   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RationalrO   r5   r6   r_   rT   r7   ÚdenominatorrN   Ú	numeratorZComplexrÞ   rÝ   ro   r   r  r   rc   rp   r“   )r.   r…   r‘   r/   r'   r'   r)   r’   ·  s$    

r’   r  i?B )r?   r>   r  r  r@   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<   rS   ÚminimumwidthrP   rr  r%   rj  ZgGnr-   r4   rp  Úthousands_sepzJExplicit thousands separator conflicts with 'n' type in format specifier: ÚgroupingÚdecimal_pointrR   rZ   r«   )Ú_parse_format_specifier_regexÚmatchrk   Ú	groupdictrT   Ú_localeÚ
localeconv)Úformat_specrn  rt   Zformat_dictrÑ  rÒ  r'   r'   r)   rt  D  sN    

rt  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)re   rk   )	r<   ry  rx  rÖ  rÑ  ZpaddingrÒ  r€   Zhalfr'   r'   r)   rv  ”  s    "rv  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ä  re   rÝ  ÚCHAR_MAXrk   )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-   rP   )rç  rk   r§   r»   re   rl   rm   Úreversed)rw   rx  Ú	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 )NrS   r<   z +rR   r'   )Úis_negativerx  r'   r'   r)   ru  ë  s
    ru  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%   rj  rs  r­   r¬   )r­   r¬   rq  rp  z{0}{1:+}ro  rÓ  rÖ  )ru  Úformatre   rì  rv  )rí  ru   rv   rU   rx  r<   Zecharré  r'   r'   r)   rw  õ  s    
rw  ZInfz-Infr©   l            l   ÿÿÿÿ lüÿÿÿÿÇNÎZoiÀ«æ)N)F)r%   )r  )r  )FF)FiÁ½ðÿ)N)r-   r‚   )|Ú__all__r1   rC   Ú__version__Z__libmpdec_version__Zmathry   ZnumbersrÎ  rD   Úcollectionsr&   Z_namedtupler   ÚImportErrorr   r   r   r   r   r   r   r   r$   Úmaxsizer    r!   r"   r#   ÚArithmeticErrorr   r   r	   r   ÚZeroDivisionErrorr
   r   r   r   r   r   r   r   r   rq   r   r  r   r•  rI   r\   rA   rE   rK   ÚhasattrrJ   rF   r   r   r   r   r5   ÚNumberÚregisterrM   r   rh   r½   rT   r|   r  r  r´  rµ  r¶  r¼  rI  rF  r¿  rÀ  r½  rÁ  r8  r  r	  rš   r’   r   r   r   ÚreÚcompileÚVERBOSEÚ
IGNORECASErÛ  r`   rç   rë   ÚDOTALLrÚ  ZlocalerÝ  rt  rv  rç  rì  ru  rw  rE  rD  r9   r4  r  r3  r;   Ú	hash_infoÚmodulusr¢   r`  r    rÙ   rŸ   r¡   r£   r'   r'   r'   r)   Ú<module>u   s~  


&



.                          

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