a
    ›¬<bX  ã                   @   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 n eyÐ   Y n0 dS )é    Né   )Ú	int_typesÚmpf_hashÚbitcountÚfrom_man_expÚHASH_MODULUSc                 C   s„   | |f}||v r|| S | | }}|r6|||  }}q"|dkrN| | } || }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   ú_/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/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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   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 ©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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u r| j|jkS |tv 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u r| j|jkS |tv rB| j\}}|dkr:dS ||kS tS )Nr   Tr6   r8   r   r   r   Ú__ne__S   s    
z
mpq.__ne__c                 C   sZ   t |ƒ}|tv r(| j\}}|||| ƒS |tu rV| j\}}|j\}}||| || ƒS tS r"   )r   r   r   r   ÚNotImplementedError)r   r9   Úopr:   r#   r$   ÚcÚdr   r   r   Ú_cmp^   s    


zmpq._cmpc                 C   s   |   |tj¡S r"   )rA   ÚoperatorÚlt©r   r9   r   r   r   Ú__lt__i   ó    z
mpq.__lt__c                 C   s   |   |tj¡S r"   )rA   rB   ÚlerD   r   r   r   Ú__le__j   rF   z
mpq.__le__c                 C   s   |   |tj¡S r"   )rA   rB   ÚgtrD   r   r   r   Ú__gt__k   rF   z
mpq.__gt__c                 C   s   |   |tj¡S r"   )rA   rB   ÚgerD   r   r   r   Ú__ge__l   rF   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"   rM   rN   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 rn| j\}}ttƒ}|||  |f|_|S tS r"   ©r   r   r   r   r   r
   r7   ©r   r9   r:   r#   r$   r?   r@   r   r   r   r   Ú__add__   s    


zmpq.__add__c                 C   sr   t |ƒ}|tu r>| j\}}|j\}}t|| ||  || ƒS |tv rn| j\}}ttƒ}|||  |f|_|S tS r"   rR   rS   r   r   r   Ú__sub__Ž   s    


zmpq.__sub__c                 C   sr   t |ƒ}|tu r>| j\}}|j\}}t|| ||  || ƒS |tv rn| j\}}ttƒ}|| | |f|_|S tS r"   rR   rS   r   r   r   Ú__rsub__›   s    


zmpq.__rsub__c                 C   sZ   t |ƒ}|tu r6| j\}}|j\}}t|| || ƒS |tv rV| j\}}t|| |ƒS tS r"   ©r   r   r   r   r   r7   ©r   r9   r:   r#   r$   r?   r@   r   r   r   Ú__mul__¨   s    


zmpq.__mul__c                 C   sZ   t |ƒ}|tu r6| j\}}|j\}}t|| || ƒS |tv rV| j\}}t||| ƒS tS r"   rW   rX   r   r   r   Ú__div__µ   s    


zmpq.__div__c                 C   sZ   t |ƒ}|tu r6| j\}}|j\}}t|| || ƒS |tv rV| j\}}t|| |ƒS tS r"   rW   rX   r   r   r   Ú__rdiv__À   s    


zmpq.__rdiv__c                 C   s^   t |ƒ}|tv rZ| j\}}|rV|dk r8|||   }}}ttƒ}|| || f|_|S t‚tS r&   )r   r   r   r
   r   ÚZeroDivisionErrorr7   )r   r9   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__r5   r;   r<   rA   rE   rH   rJ   rL   rO   rP   rQ   rT   Ú__radd__rU   rV   rY   Ú__rmul__rZ   r[   r]   r   r   r   r   r      s8   
r   )r   r   )r   r   )r   r+   r)   )r   r   )r   é   )r*   rf   )é   r+   )r*   r   )é   r   )rg   r   )rB   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_4ZnumbersÚRationalÚregisterÚImportErrorr   r   r   r   Ú<module>   s,    B	