o
    ¨"`X  ã                   @   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zd dlZej e¡ W dS  eyj   Y dS w )é    Né   )Ú	int_typesÚmpf_hashÚbitcountÚfrom_man_expÚHASH_MODULUSc                 C   s†   | |f}||v r|| S | |}}|r||| }}|s|dkr(| | } || }t tƒ}| |f|_|dkrAt|d ƒdk rA|||< |S )Nr   é   r   éd   )ÚnewÚmpqÚ_mpq_Úabs)ÚpÚqÚ_cacheÚkeyÚxÚyÚv© r   ú1/usr/lib/python3/dist-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u 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   ó
   d| j  S )Nz
mpq(%s,%s)©r   ©Úsr   r   r   Ú__repr__&   ó   
zmpq.__repr__c                 C   r   )Nz(%s/%s)r   r   r   r   r   Ú__str__)   r"   zmpq.__str__c                 C   s   | j \}}|| S ©Nr   )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r0t|td tƒ}|stjj}nt|ƒ| t }|dk r(| }|dkr.d}|S |dkr8t|ƒS ||d @ sIt	t
|dt|ƒ ƒƒS t||fƒ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u r| j|jkS |tv r!| 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   ó   
z
mpq.__eq__c                 C   sF   t |ƒ}|tu r| j|jkS |tv r!| j\}}|dkrdS ||kS tS )Nr   Tr8   r:   r   r   r   Ú__ne__S   r>   z
mpq.__ne__c                 C   sZ   t |ƒ}|tv r| j\}}|||| ƒS |tu r+| j\}}|j\}}||| || ƒS tS r$   )r   r   r   r   ÚNotImplementedError)r    r;   Úopr<   r%   r&   ÚcÚdr   r   r   Ú_cmp^   s   


zmpq._cmpc                 C   ó   |   |tj¡S r$   )rD   ÚoperatorÚlt©r    r;   r   r   r   Ú__lt__i   ó    z
mpq.__lt__c                 C   rE   r$   )rD   rF   ÚlerH   r   r   r   Ú__le__j   rJ   z
mpq.__le__c                 C   rE   r$   )rD   rF   ÚgtrH   r   r   r   Ú__gt__k   rJ   z
mpq.__gt__c                 C   rE   r$   )rD   rF   ÚgerH   r   r   r   Ú__ge__l   rJ   z
mpq.__ge__c                 C   s.   | j \}}|dkr| S ttƒ}| |f|_ |S r(   ©r   r
   r   ©r    r%   r&   r   r   r   r   Ú__abs__n   s   
zmpq.__abs__c                 C   s"   | j \}}ttƒ}| |f|_ |S r$   rQ   rR   r   r   r   Ú__neg__v   s   
zmpq.__neg__c                 C   s   | S r$   r   r   r   r   r   Ú__pos__|   s   zmpq.__pos__c                 C   sr   t |ƒ}|tu r| j\}}|j\}}t|| ||  || ƒS |tv r7| j\}}ttƒ}|||  |f|_|S tS r$   ©r   r   r   r   r   r
   r9   ©r    r;   r<   r%   r&   rB   rC   r   r   r   r   Ú__add__   ó   


zmpq.__add__c                 C   sr   t |ƒ}|tu r| j\}}|j\}}t|| ||  || ƒS |tv r7| j\}}ttƒ}|||  |f|_|S tS r$   rV   rW   r   r   r   Ú__sub__Ž   rY   zmpq.__sub__c                 C   sr   t |ƒ}|tu r| j\}}|j\}}t|| ||  || ƒS |tv r7| j\}}ttƒ}|| | |f|_|S tS r$   rV   rW   r   r   r   Ú__rsub__›   rY   zmpq.__rsub__c                 C   sZ   t |ƒ}|tu r| j\}}|j\}}t|| || ƒS |tv r+| j\}}t|| |ƒS tS r$   ©r   r   r   r   r   r9   ©r    r;   r<   r%   r&   rB   rC   r   r   r   Ú__mul__¨   ó   


zmpq.__mul__c                 C   sZ   t |ƒ}|tu r| j\}}|j\}}t|| || ƒS |tv r+| j\}}t||| ƒS tS r$   r\   r]   r   r   r   Ú__div__µ   r_   zmpq.__div__c                 C   sZ   t |ƒ}|tu r| j\}}|j\}}t|| || ƒS |tv r+| j\}}t|| |ƒS tS r$   r\   r]   r   r   r   Ú__rdiv__À   r_   zmpq.__rdiv__c                 C   s^   t |ƒ}|tv r-| j\}}|r+|dk r||| }}}ttƒ}|| || f|_|S t‚tS r(   )r   r   r   r
   r   ÚZeroDivisionErrorr9   )r    r;   r<   r%   r&   r   r   r   r   Ú__pow__Ë   s   
zmpq.__pow__N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r!   r#   r'   r*   Ú__bool__r7   r=   r?   rD   rI   rL   rN   rP   rS   rT   rU   rX   Ú__radd__rZ   r[   r^   Ú__rmul__r`   ra   rc   r   r   r   r   r      s:    
r   )r   r   )r   r   )r   r-   r+   )r   r   )r   é   )r,   rl   )é   r-   )r,   r   )é   r   )rm   r   )rF   r0   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_4ZnumbersZRationalÚregisterÚImportErrorr   r   r   r   Ú<module>   s0     B	ÿ