ó
¡¼™\c           @  s×   d  Z  d d l m Z m Z d d l Z d d l m Z d d l m Z m	 Z	 d d l
 m Z d d l m Z d d l m Z d d	 l m Z d d
 l m Z e d e e e f d „  ƒ  Yƒ Z d „  Z e e e <d S(   s/   Rational number type based on Python integers. iÿÿÿÿ(   t   print_functiont   divisionN(   t   integer_types(   t   Rationalt   Integer(   t	   converter(   t   PicklableWithSlots(   t   DomainElement(   t   DefaultPrinting(   t   publict   PythonRationalc           B  s^  e  Z d  Z d d g Z d „  Z d e d „ Z e d „  ƒ 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 d „  Z e Z d „  Z e 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$ e% d  „  ƒ Z& e% d! „  ƒ Z' e& Z( e' Z) RS("   sª  
    Rational number type based on Python integers.

    This was supposed to be needed for compatibility with older Python
    versions which don't support Fraction. However, Fraction is very
    slow so we don't use it anyway.

    Examples
    ========

    >>> from sympy.polys.domains import PythonRational

    >>> PythonRational(1)
    1
    >>> PythonRational(2, 3)
    2/3
    >>> PythonRational(14, 10)
    7/5

    t   pt   qc         C  s   d d l  m } | ƒ  S(   Niÿÿÿÿ(   t   PythonRationalField(   t   sympy.polys.domainsR   (   t   selfR   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   parent(   s    i   c         C  s  d d l  m } t | t ƒ r+ | j } n% t | t ƒ rP | j | j } } n  | se t d ƒ ‚ n | d k  rƒ | | } } n  | sž d |  _ d |  _ nz | d k s¶ | d k rË | |  _ | |  _ nM | r| | | ƒ } | d k r| | } | | } qn  | |  _ | |  _ d  S(   Niÿÿÿÿ(   t
   python_gcds   rational numberi    i   (   t   sympy.polys.domains.groundtypesR   t
   isinstanceR   R   R   R   t   ZeroDivisionError(   R   R   R   t   _gcdt   gcdt   x(    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __init__,   s,    		
	c         C  s%   t  j |  ƒ } | | _ | | _ | S(   N(   t   objectt   __new__R   R   (   t   clsR   R   t   obj(    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   newI   s    		c         C  s6   |  j  d k r t |  j ƒ St |  j |  j  f ƒ Sd  S(   Ni   (   R   t   hashR   (   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __hash__P   s    c         C  s1   |  j  |  j } } | d k  r) | | S| | S(   Ni    (   R   R   (   R   R   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __int__V   s    
c         C  s   t  |  j ƒ |  j S(   N(   t   floatR   R   (   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt	   __float__\   s    c         C  s   |  j  t |  j ƒ |  j ƒ S(   N(   R   t   absR   R   (   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __abs___   s    c         C  s   |  j  |  j 
|  j ƒ S(   N(   R   R   R   (   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __pos__b   s    c         C  s   |  j  |  j |  j ƒ S(   N(   R   R   R   (   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __neg__e   s    c         C  s)  d d l  m } t | t ƒ rà |  j |  j | j | j f \ } } } } | | | ƒ } | d k rƒ | | | | } | | }	 q| | | | }
 } | | | |
 |
 | } }	 | | | ƒ } | | |	 | | } }	 n3 t | t ƒ r|  j |  j | } |  j }	 n t S|  j | |	 d t	 ƒS(   Niÿÿÿÿ(   R   i   R   (
   R   R   R   R
   R   R   R   t   NotImplementedt	   __class__t   False(   R   t   otherR   t   apt   aqt   bpt   bqt   gR   R   t   q1t   q2t   g2(    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __add__h   s     *c         C  sF   t  | t ƒ s t S|  j |  j | } |  j } |  j | | d t ƒS(   NR   (   R   R   R'   R   R   R(   R)   (   R   R*   R   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __radd__}   s
    	c         C  s)  d d l  m } t | t ƒ rà |  j |  j | j | j f \ } } } } | | | ƒ } | d k rƒ | | | | } | | }	 q| | | | }
 } | | | |
 |
 | } }	 | | | ƒ } | | |	 | | } }	 n3 t | t ƒ r|  j |  j | } |  j }	 n t S|  j | |	 d t	 ƒS(   Niÿÿÿÿ(   R   i   R   (
   R   R   R   R
   R   R   R   R'   R(   R)   (   R   R*   R   R+   R,   R-   R.   R/   R   R   R0   R1   R2   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __sub__†   s     *c         C  sF   t  | t ƒ s t S|  j | |  j } |  j } |  j | | d t ƒS(   NR   (   R   R   R'   R   R   R(   R)   (   R   R*   R   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __rsub__›   s
    	c         C  së   d d l  m } t | t ƒ r |  j |  j | j | j f \ } } } } | | | ƒ } | | | ƒ } | | | | | | | | }	 }
 nF t | t ƒ rÑ | | |  j ƒ } |  j | | }	 |  j | }
 n t S|  j |	 |
 d t	 ƒS(   Niÿÿÿÿ(   R   R   (
   R   R   R   R
   R   R   R   R'   R(   R)   (   R   R*   R   R+   R,   R-   R.   t   x1t   x2R   R   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __mul__¤   s    *(c         C  si   d d l  m } t | t ƒ s# t S| |  j | ƒ } |  j | | } |  j | } |  j | | d t ƒS(   Niÿÿÿÿ(   R   R   (	   R   R   R   R   R'   R   R   R(   R)   (   R   R*   R   R   R   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __rmul__´   s    c         C  së   d d l  m } t | t ƒ r |  j |  j | j | j f \ } } } } | | | ƒ } | | | ƒ } | | | | | | | | }	 }
 nF t | t ƒ rÑ | | |  j ƒ } |  j | }	 |  j | | }
 n t S|  j |	 |
 d t	 ƒS(   Niÿÿÿÿ(   R   R   (
   R   R   R   R
   R   R   R   R'   R(   R)   (   R   R*   R   R+   R,   R-   R.   R7   R8   R   R   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __div__¿   s    *(c         C  sc   d d l  m } t | t ƒ s# t S| |  j | ƒ } |  j | | } |  j | } |  j | | ƒ S(   Niÿÿÿÿ(   R   (   R   R   R   R   R'   R   R   R(   (   R   R*   R   R   R   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __rdiv__Ñ   s    c         C  s   |  j  d ƒ S(   Ni    (   R(   (   R   R*   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __mod__Þ   s    c         C  s   |  | |  | f S(   N(    (   R   R*   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt
   __divmod__á   s    c         C  sU   |  j  |  j } } | d k  r7 | | | } } } n  |  j | | | | d t ƒS(   Ni    R   (   R   R   R(   R)   (   R   t   expR   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __pow__ä   s    c         C  s   |  j  d k S(   Ni    (   R   (   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __nonzero__ì   s    c         C  sd   t  | t ƒ r1 |  j | j k o0 |  j | j k St  | t ƒ r\ |  j d k o[ |  j | k St Sd  S(   Ni   (   R   R
   R   R   R   R)   (   R   R*   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __eq__ñ   s
    "c         C  s   |  | k S(   N(    (   R   R*   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __ne__ù   s    c         C  s7   y |  | } Wn t  k
 r" t SX| | j d ƒ Sd  S(   Ni    (   t	   TypeErrorR'   R   (   R   R*   t   opt   diff(    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   _cmpü   s
    c         C  s   |  j  | t j ƒ S(   N(   RG   t   operatort   lt(   R   R*   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __lt__  s    c         C  s   |  j  | t j ƒ S(   N(   RG   RH   t   le(   R   R*   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __le__  s    c         C  s   |  j  | t j ƒ S(   N(   RG   RH   t   gt(   R   R*   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __gt__
  s    c         C  s   |  j  | t j ƒ S(   N(   RG   RH   t   ge(   R   R*   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   __ge__  s    c         C  s   |  j  S(   N(   R   (   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   numer  s    c         C  s   |  j  S(   N(   R   (   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   denom  s    (*   t   __name__t
   __module__t   __doc__t	   __slots__R   t   TrueR   t   classmethodR   R   R    R"   R$   R%   R&   R3   R4   R5   R6   R9   R:   R;   t   __truediv__R<   t   __rtruediv__R=   R>   R@   RA   t   __bool__RB   RC   RG   RJ   RL   RN   RP   t   propertyRQ   RR   t	   numeratort   denominator(    (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyR
      sJ   																												c         C  s   t  |  j |  j ƒ S(   N(   R   R   R   (   t   arg(    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   sympify_pythonrational  s    (   RU   t
   __future__R    R   RH   t   sympy.core.compatibilityR   t   sympy.core.numbersR   R   t   sympy.core.sympifyR   t   sympy.polys.polyutilsR   t!   sympy.polys.domains.domainelementR   t   sympy.printing.defaultsR   t   sympy.utilitiesR	   R
   R`   (    (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/pythonrational.pyt   <module>   s   ÿ 	