ó
<Zc           @   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  d „ Z d e f d „  ƒ  YZ 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 j e ƒ Wn e k
 r"n Xd S(   iÿÿÿÿNi   (   t	   int_typest   mpf_hasht   bitcountt   from_man_expt   HASH_MODULUSc         C   s¼   |  | f } | | k r  | | S|  | } } x | rJ | | | } } q0 W| d k rn |  | }  | | } n  t  t ƒ } |  | f | _ | d k r¸ t | d ƒ d k  r¸ | | | <n  | S(   Ni   i   i    id   (   t   newt   mpqt   _mpq_t   abs(   t   pt   qt   _cachet   keyt   xt   yt   v(    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   create_reduced   s    	
"R   c           B   sû   e  Z d  Z d g Z d d „ Z d „  Z d „  Z d „  Z d „  Z e Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e Z d „  Z d „  Z d „  Z e Z d „  Z d „  Z d „  Z RS(   sH   
    Exact rational type, currently only intended for internal use.
    R   i   c         C   sO   t  | ƒ t k r! | \ } } n! t | d ƒ rB | j \ } } n  t | | ƒ S(   NR   (   t   typet   tuplet   hasattrR   R   (   t   clsR	   R
   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __new__   s
    c         C   s   d |  j  S(   Ns
   mpq(%s,%s)(   R   (   t   s(    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __repr__&   s    c         C   s   d |  j  S(   Ns   (%s/%s)(   R   (   R   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __str__)   s    c         C   s   |  j  \ } } | | S(   N(   R   (   R   t   at   b(    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __int__,   s    c         C   s   t  |  j d ƒ S(   Ni    (   t   boolR   (   R   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __nonzero__0   s    c         C   sá   |  j  \ } } t j d k rŒ t | t d t ƒ } | sI t j j } n t | ƒ | t } | d k  rs | } n  | d k rˆ d } n  | S| d k r¢ t | ƒ S| | d @sÍ t	 t
 | d t | ƒ ƒ ƒ St | | f ƒ Sd  S(   Ns   3.2i   i    iÿÿÿÿiþÿÿÿi   (   R   t   syst   versiont   powR   t	   hash_infot   infR   t   hashR   R   R   (   R   R   R   t   inverset   h(    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __hash__5   s      
 	
c         C   sa   t  | ƒ } | t k r( |  j | j k S| t k r] |  j \ } } | d k rS t S| | k St S(   Ni   (   R   R   R   R    t   Falset   NotImplemented(   R   t   tt   ttypeR   R   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __eq__H   s    
c         C   sa   t  | ƒ } | t k r( |  j | j k S| t k r] |  j \ } } | d k rS t S| | k St S(   Ni   (   R   R   R   R    t   TrueR(   (   R   R)   R*   R   R   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __ne__S   s    
c         C   s{   t  | ƒ } | t k r8 |  j \ } } | | | | ƒ S| t k rw |  j \ } } | j \ } } | | | | | ƒ St S(   N(   R   R    R   R   t   NotImplementedError(   R   R)   t   opR*   R   R   t   ct   d(    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   _cmp^   s    c         C   s   |  j  | t j ƒ S(   N(   R2   t   operatort   lt(   R   R)   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __lt__i   s    c         C   s   |  j  | t j ƒ S(   N(   R2   R3   t   le(   R   R)   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __le__j   s    c         C   s   |  j  | t j ƒ S(   N(   R2   R3   t   gt(   R   R)   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __gt__k   s    c         C   s   |  j  | t j ƒ S(   N(   R2   R3   t   ge(   R   R)   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __ge__l   s    c         C   s?   |  j  \ } } | d k r |  St t ƒ } | | f | _  | S(   Ni    (   R   R   R   (   R   R   R   R   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __abs__n   s    c         C   s/   |  j  \ } } t t ƒ } | | f | _  | S(   N(   R   R   R   (   R   R   R   R   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __neg__v   s    c         C   s   |  S(   N(    (   R   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __pos__|   s    c         C   s™   t  | ƒ } | t k rS |  j \ } } | j \ } } t | | | | | | ƒ S| t k r• |  j \ } } t t ƒ } | | | | f | _ | St S(   N(   R   R   R   R   R    R   R(   (   R   R)   R*   R   R   R0   R1   R   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __add__   s    c         C   s™   t  | ƒ } | t k rS |  j \ } } | j \ } } t | | | | | | ƒ S| t k r• |  j \ } } t t ƒ } | | | | f | _ | St S(   N(   R   R   R   R   R    R   R(   (   R   R)   R*   R   R   R0   R1   R   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __sub__Ž   s    c         C   s™   t  | ƒ } | t k rS |  j \ } } | j \ } } t | | | | | | ƒ S| t k r• |  j \ } } t t ƒ } | | | | f | _ | St S(   N(   R   R   R   R   R    R   R(   (   R   R)   R*   R   R   R0   R1   R   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __rsub__›   s    c         C   s{   t  | ƒ } | t k rK |  j \ } } | j \ } } t | | | | ƒ S| t k rw |  j \ } } t | | | ƒ St S(   N(   R   R   R   R   R    R(   (   R   R)   R*   R   R   R0   R1   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __mul__¨   s    c         C   s{   t  | ƒ } | t k rK |  j \ } } | j \ } } t | | | | ƒ S| t k rw |  j \ } } t | | | ƒ St S(   N(   R   R   R   R   R    R(   (   R   R)   R*   R   R   R0   R1   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __div__µ   s    c         C   s{   t  | ƒ } | t k rK |  j \ } } | j \ } } t | | | | ƒ S| t k rw |  j \ } } t | | | ƒ St S(   N(   R   R   R   R   R    R(   (   R   R)   R*   R   R   R0   R1   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __rdiv__À   s    c         C   s…   t  | ƒ } | t k r |  j \ } } | rx | d k  rQ | | | } } } n  t t ƒ } | | | | f | _ | St ‚ n  t S(   Ni    (   R   R    R   R   R   t   ZeroDivisionErrorR(   (   R   R)   R*   R   R   R   (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   __pow__Ë   s    	(   t   __name__t
   __module__t   __doc__t	   __slots__R   R   R   R   R   t   __bool__R&   R+   R-   R2   R5   R7   R9   R;   R<   R=   R>   R?   t   __radd__R@   RA   RB   t   __rmul__RC   RD   RF   (    (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyR      s8   																						i    i   i   i   i   i   i   (   i   i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R3   R   t   libmpR    R   R   R   R   t   objectR   R   R   R   t   mpq_1t   mpq_0t   mpq_1_2t   mpq_3_2t   mpq_1_4t   mpq_1_16t   mpq_3_16t   mpq_5_2t   mpq_3_4t   mpq_7_4t   mpq_5_4t   numberst   Rationalt   registert   ImportError(    (    (    s.   lib/python2.7/site-packages/mpmath/rational.pyt   <module>   s*   (	Á	