B
    b‹dX  ã               @   sØ   d dl Z d dlZddlmZmZmZmZmZ ej	Z
i fdd„ZG dd„ deƒZedƒZed	ƒZed
ƒZedƒZedƒZedƒZedƒZedƒZedƒZedƒZedƒZyd dlZej e¡ W n ek
rÒ   Y nX dS )é    Né   )Ú	int_typesÚmpf_hashÚbitcountÚfrom_man_expÚHASH_MODULUSc             C   sˆ   | |f}||kr|| S | | }}x|r8|||  }}q$W |dkrR| | } || }t tƒ}| |f|_|dkr„t|d ƒdk r„|||< |S )Nr   é   r   éd   )ÚnewÚmpqÚ_mpq_Úabs)ÚpÚqÚ_cacheÚkeyÚxÚyÚv© r   ú\/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/mpmath/rational.pyÚcreate_reduced   s    

r   c               @   sÜ   e Zd ZdZdgZd3dd„Zdd„ Zdd	„ Zd
d„ Zdd„ Z	e	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d"d#„ Zd$d%„ ZeZd&d'„ Zd(d)„ Zd*d+„ ZeZd,d-„ Zd.d/„ Zd0d1„ Zd2S )4r   zH
    Exact rational type, currently only intended for internal use.
    r   r   c             C   s4   t |ƒtkr|\}}nt|dƒr*|j\}}t||ƒS )Nr   )ÚtypeÚtupleÚhasattrr   r   )Úclsr   r   r   r   r   Ú__new__   s
    


zmpq.__new__c             C   s
   d| j  S )Nz
mpq(%s,%s))r   )Úsr   r   r   Ú__repr__&   s    zmpq.__repr__c             C   s
   d| j  S )Nz(%s/%s))r   )r   r   r   r   Ú__str__)   s    zmpq.__str__c             C   s   | j \}}|| S )N)r   )r   ÚaÚbr   r   r   Ú__int__,   s    
zmpq.__int__c             C   s   t | jd ƒS )Nr   )Úboolr   )r   r   r   r   Ú__nonzero__0   s    zmpq.__nonzero__c             C   s¢   | j \}}tjdkr`t|td tƒ}|s2tjj}nt|ƒ| t }|dk rP| }|dkr\d}|S |dkrpt|ƒS ||d @ s’t	t
|dt|ƒ ƒƒS t||fƒS d S )N)é   é   r&   r   éÿÿÿÿéþÿÿÿr   )r   ÚsysÚversion_infoÚpowr   Ú	hash_infoÚinfr   Úhashr   r   r   )r   r    r!   ZinverseÚhr   r   r   Ú__hash__5   s     


  zmpq.__hash__c             C   sF   t |ƒ}|tkr| j|jkS |tkrB| j\}}|dkr:dS ||kS tS )Nr   F)r   r   r   r   ÚNotImplemented)r   ÚtÚttyper    r!   r   r   r   Ú__eq__H   s    
z
mpq.__eq__c             C   sF   t |ƒ}|tkr| j|jkS |tkrB| j\}}|dkr:dS ||kS tS )Nr   T)r   r   r   r   r1   )r   r2   r3   r    r!   r   r   r   Ú__ne__S   s    
z
mpq.__ne__c             C   sZ   t |ƒ}|tkr(| j\}}|||| ƒS |tkrV| j\}}|j\}}||| || ƒS tS )N)r   r   r   r   ÚNotImplementedError)r   r2   Úopr3   r    r!   ÚcÚdr   r   r   Ú_cmp^   s    


zmpq._cmpc             C   s   |   |tj¡S )N)r:   ÚoperatorÚlt)r   r2   r   r   r   Ú__lt__i   ó    z
mpq.__lt__c             C   s   |   |tj¡S )N)r:   r;   Úle)r   r2   r   r   r   Ú__le__j   r>   z
mpq.__le__c             C   s   |   |tj¡S )N)r:   r;   Úgt)r   r2   r   r   r   Ú__gt__k   r>   z
mpq.__gt__c             C   s   |   |tj¡S )N)r:   r;   Úge)r   r2   r   r   r   Ú__ge__l   r>   z
mpq.__ge__c             C   s.   | j \}}|dkr| S ttƒ}| |f|_ |S )Nr   )r   r
   r   )r   r    r!   r   r   r   r   Ú__abs__n   s    
zmpq.__abs__c             C   s"   | j \}}ttƒ}| |f|_ |S )N)r   r
   r   )r   r    r!   r   r   r   r   Ú__neg__v   s    
zmpq.__neg__c             C   s   | S )Nr   )r   r   r   r   Ú__pos__|   s    zmpq.__pos__c             C   sr   t |ƒ}|tkr>| j\}}|j\}}t|| ||  || ƒS |tkrn| j\}}ttƒ}|||  |f|_|S tS )N)r   r   r   r   r   r
   r1   )r   r2   r3   r    r!   r8   r9   r   r   r   r   Ú__add__   s    


zmpq.__add__c             C   sr   t |ƒ}|tkr>| j\}}|j\}}t|| ||  || ƒS |tkrn| j\}}ttƒ}|||  |f|_|S tS )N)r   r   r   r   r   r
   r1   )r   r2   r3   r    r!   r8   r9   r   r   r   r   Ú__sub__Ž   s    


zmpq.__sub__c             C   sr   t |ƒ}|tkr>| j\}}|j\}}t|| ||  || ƒS |tkrn| j\}}ttƒ}|| | |f|_|S tS )N)r   r   r   r   r   r
   r1   )r   r2   r3   r    r!   r8   r9   r   r   r   r   Ú__rsub__›   s    


zmpq.__rsub__c             C   sZ   t |ƒ}|tkr6| j\}}|j\}}t|| || ƒS |tkrV| j\}}t|| |ƒS tS )N)r   r   r   r   r   r1   )r   r2   r3   r    r!   r8   r9   r   r   r   Ú__mul__¨   s    


zmpq.__mul__c             C   sZ   t |ƒ}|tkr6| j\}}|j\}}t|| || ƒS |tkrV| j\}}t||| ƒS tS )N)r   r   r   r   r   r1   )r   r2   r3   r    r!   r8   r9   r   r   r   Ú__div__µ   s    


zmpq.__div__c             C   sZ   t |ƒ}|tkr6| j\}}|j\}}t|| || ƒS |tkrV| j\}}t|| |ƒS tS )N)r   r   r   r   r   r1   )r   r2   r3   r    r!   r8   r9   r   r   r   Ú__rdiv__À   s    


zmpq.__rdiv__c             C   s^   t |ƒ}|tkrZ| j\}}|rV|dk r8|||   }}}ttƒ}|| || f|_|S t‚tS )Nr   )r   r   r   r
   r   ÚZeroDivisionErrorr1   )r   r2   r3   r    r!   r   r   r   r   Ú__pow__Ë   s    
zmpq.__pow__N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r   r   r"   r$   Ú__bool__r0   r4   r5   r:   r=   r@   rB   rD   rE   rF   rG   rH   Ú__radd__rI   rJ   rK   Ú__rmul__rL   rM   rO   r   r   r   r   r      s8   
r   )r   r   )r   r   )r   r&   )r%   r&   )r   r   )r   é   )r%   rX   )é   r&   )r%   r   )é   r   )rY   r   )r;   r)   Zlibmpr   r   r   r   r   Úobjectr   r
   r   r   Zmpq_1Zmpq_0Zmpq_1_2Zmpq_3_2Zmpq_1_4Zmpq_1_16Zmpq_3_16Zmpq_5_2Zmpq_3_4Zmpq_7_4Zmpq_5_4ÚnumbersÚRationalÚregisterÚImportErrorr   r   r   r   Ú<module>   s,    B	