
~9\c           @  s  d  d l  m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d d l m	 Z	 d d l
 m Z m
 Z
 m Z m Z m Z d d l m Z m Z d d l m Z m Z d d l m Z d d	 l m Z m Z d d
 l m Z d  d l m Z m Z m Z m  Z  m! Z! m" Z" m# Z# m$ Z$ d  d l% m& Z& d  d l' Z' d  d l( j) Z* d  d l+ m, Z, d  d l( m- Z- m. Z. m/ Z/ m0 Z0 d  d l1 m2 Z2 d  d l3 m4 Z5 m6 Z7 m8 Z9 m: Z; m< Z= m> Z> d  d l? m@ Z@ mA ZA d d lB mC ZC d  d lD mE ZE e* jF ZG e jH d  ZI eJ d  ZK d   ZL i eM d 6ZN eM d  ZO d   ZP d   ZQ d   ZR e& d  d    ZS y d  d l mT ZU Wn eV k
 rd   ZU n Xd  ZW d!   ZX d"   ZY d#   ZZ d$   Z[ d% e f d&     YZ\ d' e\ f d(     YZ] e] e e^ <e e j_ <e] Z` d) e\ f d*     YZa d+ ea f d,     YZb x e D] Zc eb e ec <q6Wd- e f d.     YZd d/ ea f d0     YZe d1 eb f d2     YZf d3 e! e ef  f d4     YZg d5 e! e ef  f d6     YZh d7 e! e ef  f d8     YZi d9 e! e ee  f d:     YZj d; e! e e\  f d<     YZk e jk Zl d= e! e e\  f d>     YZm d? e! e e\  f d@     YZn e jn Zo dA e! e e  f dB     YZp e jp Zq dC e f dD     YZr dE e! e er  f dF     YZs e js Zt dG e! e er  f dH     YZu e ju Zv dI e! e er  f dJ     YZw dK e! e er  f dL     YZx dM e! e er  f dN     YZy dO e! e er  f dP     YZz dQ e! e e  f dR     YZ{ e j{ Z| dS   Z} e} e e j~ <y e" d k rd  d l Z n! e" d k rd  d l Z n eV  dT   Z dU   Z e e e e j d   <e e e e j d d   <Wn eV k
 rYn XdV   Z e e e2 <dW   Z e e e e' j j d d   <dX   Z e e e <d dY l m Z m Z d dZ l m Z eh   e _ d d[ l m Z eg   e _ d S(\   i(   t   print_functiont   divisionNi   (   t   Tuple(   t	   convertert   sympifyt   _sympifyt   SympifyErrort   _convert_numpy_types(   t   St	   Singleton(   t   Exprt
   AtomicExpr(   t
   _sympifyit(   t   cacheitt   clear_cache(   t	   fuzzy_not(   t   as_intt   integer_typest   longt   string_typest   with_metaclasst   HAS_GMPYt
   SYMPY_INTSt   int_info(   t	   lru_cache(   t   MPZ(   t   mpf_powt   mpf_pit   mpf_et	   phi_fixed(   t	   mpnumeric(   t   finft   fninft   fnant   fzerot
   _normalizet   prec_to_dps(   t   debugt
   filldedent(   t   global_evaluate(   t   SymPyDeprecationWarningi   c         C  s  t  |  t k r@ t |  t  s0 t d   n  t |   | k S|  sV | |  }  } n  |  s` t S| sM| d k r t  |  t k r t |  d t  r t |   | k St	 |   t	 |  } } t
 t | |  d t t | j | j    d d k St d   |  | f D  r>|  j | j k o=t |   t |  k St d   n  t |  |  } t |   } | r| d k r| | | k S| | k Sd S(	   s  Return a bool indicating whether the error between z1 and z2 is <= tol.

    If ``tol`` is None then True will be returned if there is a significant
    difference between the numbers: ``abs(z1 - z2)*10**p <= 1/2`` where ``p``
    is the lower of the precisions of the values. A comparison of strings will
    be made if ``z1`` is a Number and a) ``z2`` is a string or b) ``tol`` is ''
    and ``z2`` is a Number.

    When ``tol`` is a nonzero value, if z2 is non-zero and ``|z1| > 1``
    the error is normalized by ``|z1|``, so if you want to see if the
    absolute error between ``z1`` and ``z2`` is <= ``tol`` then call this
    as ``comp(z1 - z2, 0, tol)``.
    s$   when z2 is a str z1 must be a Numbert	   is_Numberi
   i   i   c         s  s!   |  ] } t  | d  t  Vq d S(   R)   N(   t   getattrt   False(   t   .0t   i(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pys	   <genexpr>D   s    s%   exact comparison requires two NumbersN(   t   typet   strt
   isinstancet   Numbert
   ValueErrort   Truet   NoneR*   R+   t   Floatt   intt   absR$   t   mint   _prect   all(   t   z1t   z2t   tolt   at   bt   difft   az1(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   comp'   s.    $%(c         C  s^   |  \ } } } } | s) | s" t  S|  Sn  d d l m } t | | |  | | | t  } | S(   se  Return the mpf tuple normalized appropriately for the indicated
    precision after doing a check to see if zero should be returned or
    not when the mantissa is 0. ``mpf_normlize`` always assumes that this
    is zero, but it may not be since the mantissa for mpf's values "+inf",
    "-inf" and "nan" have a mantissa of zero, too.

    Note: this is not intended to validate a given mpf tuple, so sending
    mpf tuples that were not created by mpmath may produce bad results. This
    is only a wrapper to ``mpf_normalize`` which provides the check for non-
    zero mpfs that have a 0 for the mantissa.
    i(   R   (   t	   _mpf_zerot   mpmath.libmp.backendR   t   mpf_normalizet   rnd(   t   mpft   prect   signt   mant   exptt   bcR   t   rv(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   mpf_normO   s    !t   dividec         C  s(   t  d |  k r$ t   |  t  d <n  d S(   s   
    Should sympy raise an exception on 0/0 or return a nan?

    divide == True .... raise an exception
    divide == False ... return nan
    RO   N(   t   _errdictR   (   RO   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   seterrp   s    c         C  s   t  |  d t j |   j  \ } } } } d d g | d | }  | d k  r\ d | } n d } |  d | 9}  t |   t |  f S(   Nt   _mpf_i   ii   i    (   R*   t   mpmathRG   RR   R6   (   t   pt   neg_powRJ   RK   RL   t   q(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _as_integer_ratio|   s    *c         C  s   |  j    s t d |    n  |  j   \ } } } t |  } | d k ra t t |    } n[ d | } t g  t t |   D] \ } } | d | ^ q  } t	 | | d |  } | | f S(   s3   Convert an ordinary decimal instance to a Rational.s   dec must be finite, got %s.i    ii
   (
   t	   is_finitet	   TypeErrort   as_tuplet   lent   IntegerR6   t   sumt	   enumeratet   reversedt   Rational(   t   dect   st   dt   eRH   RM   R-   t   di(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _decimal_to_Rational_prec   s    
9c         C  s   d } t  t j | |    S(   s?   Return True if n can be interpreted as a floating point number.s'   [-+]?((\d*\.\d+)|(\d+\.?))(eE[-+]?\d+)?(   t   boolt   regext   match(   t   ft   pat(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _literal_float   s    i   c          G  s   t  |   d k  r+ t d t  |     n  g  |  D] } t t |   ^ q2 } d | k r` d S| j   } x) | D]! } | r t | |  n | } qs W| S(   sD  Computes nonnegative integer greatest common divisor.

    The algorithm is based on the well known Euclid's algorithm. To
    improve speed, igcd() has its own caching mechanism implemented.

    Examples
    ========

    >>> from sympy.core.numbers import igcd
    >>> igcd(2, 4)
    2
    >>> igcd(5, 10, 15)
    5

    i   s,   igcd() takes at least 2 arguments (%s given)i   (   R[   RY   R7   R   t   popt   igcd2(   t   argsR-   t	   args_tempR>   R?   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   igcd   s    %(   t   gcdc         C  sl   |  j    t k r1 | j    t k r1 t |  |  St |   t |  }  } x | rg | |  | }  } qM W|  S(   s+   Compute gcd of two Python integers a and b.(   t
   bit_lengtht   BIGBITSt   igcd_lehmerR7   (   R>   R?   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRn      s    	i  c         C  sA  t  t |    t  t |   }  } |  | k  rA | |  }  } n  d t j } x|  j   | k r| d k r|  j   | } t |  | ? t | | ? } } d \ } } } }	 xt r| | d k r Pn  | | | | }
 | |
 | | |
 |	 } } | | d k  rPn  | | } } | |	 | |
 | | f \ } } } }	 | |	 d k rYPn  | | | |	 }
 | |
 | | |
 | } } | | d k  rPn  | | } } | |	 | | |
 |	 f \ } } } }	 q W| d k r| |  | }  } qQ n  | |  | | | |  |	 | }  } qQ Wx | r<| |  | }  } q"W|  S(   s  Computes greatest common divisor of two integers.

    Euclid's algorithm for the computation of the greatest
    common divisor  gcd(a, b)  of two (positive) integers
    a and b is based on the division identity
        a = q*b + r,
    where the quotient  q  and the remainder  r  are integers
    and  0 <= r < b. Then each common divisor of  a  and  b
    divides  r, and it follows that  gcd(a, b) == gcd(b, r).
    The algorithm works by constructing the sequence
    r0, r1, r2, ..., where  r0 = a, r1 = b,  and each  rn
    is the remainder from the division of the two preceding
    elements.

    In Python, q = a // b  and  r = a % b  are obtained by the
    floor division and the remainder operations, respectively.
    These are the most expensive arithmetic operations, especially
    for large  a  and  b.

    Lehmer's algorithm is based on the observation that the quotients
    qn = r(n-1) // rn  are in general small integers even
    when  a  and  b  are very large. Hence the quotients can be
    usually determined from a relatively small number of most
    significant bits.

    The efficiency of the algorithm is further enhanced by not
    computing each long remainder in Euclid's sequence. The remainders
    are linear combinations of  a  and  b  with integer coefficients
    derived from the quotients. The coefficients can be computed
    as far as the quotients can be determined from the chosen
    most significant parts of  a  and  b. Only then a new pair of
    consecutive remainders is computed and the algorithm starts
    anew with this pair.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Lehmer%27s_GCD_algorithm

    i   i    i   (   i   i    i    i   (   R7   R   R   t   bits_per_digitRs   R6   R3   (   R>   R?   t   nbitst   nt   xt   yt   At   Bt   Ct   DRV   t   x_qyt   B_qDt   A_qC(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRu      s@    )%!!	&*)	c          G  su   t  |   d k  r+ t d t  |     n  d |  k r; d S|  d } x) |  d D] } | t | |  | } qP W| S(   s   Computes integer least common multiple.

    Examples
    ========

    >>> from sympy.core.numbers import ilcm
    >>> ilcm(5, 10)
    10
    >>> ilcm(7, 3)
    21
    >>> ilcm(5, 10, 15)
    30

    i   s,   ilcm() takes at least 2 arguments (%s given)i    i   (   R[   RY   Rq   (   Ro   R>   R?   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   ilcm^  s    
c   
      C  s!  |  r | r d S|  s5 d | t  |  t  |  f S| sX |  t  |   d t  |   f S|  d k  ru |  d }  } n d } | d k  r | d } } n d } d \ } } } } xY | r|  | |  | } }	 | | | |	 | | |	 | | | f \ }  } } } } } q W| | | | |  f S(   s3  Returns x, y, g such that g = x*a + y*b = gcd(a, b).

       >>> from sympy.core.numbers import igcdex
       >>> igcdex(2, 3)
       (-1, 1, 1)
       >>> igcdex(10, 12)
       (-1, 1, 2)

       >>> x, y, g = igcdex(100, 2004)
       >>> x, y, g
       (-20, 1, 4)
       >>> x*100 + y*2004
       4

    i    i   i(   i    i   i    (   i   i    i    i   (   R7   (
   R>   R?   t   x_signt   y_signRy   Rz   t   rRb   t   cRV   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   igcdexx  s"    	>c         C  s<  d } yi t |   t |  }  } | d k rn | d k rn t |  |  \ } } } | d k rn | | } qn n  Wn t k
 rt |   t |  }  } |  j o | j s t t d    n  | d k } | t j	 k p | t j
 k s t d |   q| rd |  } qn X| d k r8t d |  | f   n  | S(   s  
    Return the number c such that, (a * c) = 1 (mod m)
    where c has the same sign as m. If no such value exists,
    a ValueError is raised.

    Examples
    ========

    >>> from sympy import S
    >>> from sympy.core.numbers import mod_inverse

    Suppose we wish to find multiplicative inverse x of
    3 modulo 11. This is the same as finding x such
    that 3 * x = 1 (mod 11). One value of x that satisfies
    this congruence is 4. Because 3 * 4 = 12 and 12 = 1 (mod 11).
    This is the value return by mod_inverse:

    >>> mod_inverse(3, 11)
    4
    >>> mod_inverse(-3, 11)
    7

    When there is a common factor between the numerators of
    ``a`` and ``m`` the inverse does not exist:

    >>> mod_inverse(2, 4)
    Traceback (most recent call last):
    ...
    ValueError: inverse of 2 mod 4 does not exist

    >>> mod_inverse(S(2)/7, S(5)/2)
    7/2

    References
    ==========
    - https://en.wikipedia.org/wiki/Modular_multiplicative_inverse
    - https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm
    i   is   
                Expected numbers for arguments; symbolic `mod_inverse`
                is not implemented
                but symbolic expressions can be handled with the
                similar function,
                sympy.polys.polytools.inverts*   m > 1 did not evaluate; try to simplify %ss%   inverse of %s (mod %s) does not existN(   R4   R   R   R2   R   t	   is_numberRY   R&   R   t   truet   false(   R>   t   mR   Ry   Rz   t   gt   big(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   mod_inverse  s(    'R1   c           B  s  e  Z d  Z e Z e Z e Z g  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 d   Z d   Z d   Z e d    Z e d' d   Z e d e  d    Z e d e  d    Z  e d e  d    Z! e d e  d    Z" e" Z# d   Z$ d   Z% d   Z& d   Z' d   Z( d   Z) d   Z* d   Z+ d    Z, d!   Z- e. d"  Z/ e. d#  Z0 d$   Z1 d%   Z2 d&   Z3 RS((   s  Represents atomic numbers in SymPy.

    Floating point numbers are represented by the Float class.
    Rational numbers (of any size) are represented by the Rational class.
    Integer numbers (of any size) are represented by the Integer class.
    Float and Rational are subclasses of Number; Integer is a subclass
    of Rational.

    For example, ``2/3`` is represented as ``Rational(2, 3)`` which is
    a different object from the floating point number obtained with
    Python division ``2/3``. Even for numbers that are exactly
    represented in binary, there is a difference between how two forms,
    such as ``Rational(1, 2)`` and ``Float(0.5)``, are used in SymPy.
    The rational form is to be preferred in symbolic computations.

    Other kinds of numbers, such as algebraic numbers ``sqrt(2)`` or
    complex numbers ``3 + 4*I``, are not instances of Number class as
    they are not atomic.

    See Also
    ========

    Float, Integer, Rational
    ic         G  s  t  |  d k r | d } n  t | t  r2 | St | t  rK t |  St | t  rv t  |  d k rv t |   St | t t j	 t
 j f  r t |  St | t  r t |  } t | t  r | St d |   n  d } t | t |  j   d  S(   Ni   i    i   s$   String "%s" does not denote a Numbers<   expected str|int|long|float|Decimal|Number object but got %r(   R[   R0   R1   R   R\   t   tupleR`   t   floatRS   RG   t   decimalt   DecimalR5   R   R   R2   RY   R.   t   __name__(   t   clst   objt   valt   msg(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __new__  s"    
!

c         O  sB   d d l  m } t | d t  r/ t |  |  S| |  | | |  S(   Ni(   t   invertR   (   t   sympy.polys.polytoolsR   R*   R3   R   (   t   selft   othert   gensRo   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   d d l  m } y t |  } Wn? t k
 ra d } t | t |   j t |  j f   n X| sw t d   n  |  j r | j r | t |  j	 | j	    S|  | } | d k r t
 |  n t
 |  d } |  | | } | | |  S(   Ni   (   R   s7   unsupported operand type(s) for divmod(): '%s' and '%s's   modulo by zeroi    (   t
   containersR   R1   RY   R.   R   t   ZeroDivisionErrort
   is_Integert   divmodRT   R6   (   R   R   R   R   t   ratt   wR   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt
   __divmod__!  s    ,
(c         C  s_   y t  |  } Wn? t k
 rQ d } t | t |  j t |   j f   n Xt | |   S(   Ns7   unsupported operand type(s) for divmod(): '%s' and '%s'(   R1   RY   R.   R   R   (   R   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __rdivmod__3  s    ,c         G  s   t  t |   |  S(   N(   t   roundR   (   R   Ro   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt	   __round__;  s    c         C  s   t  d |  j j   d S(   s7   Evaluation of mpf tuple accurate to at least prec bits.s   %s needs ._as_mpf_val() methodN(   t   NotImplementedErrort	   __class__R   (   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _as_mpf_val>  s    c         C  s   t  j |  j |  |  S(   N(   R5   t   _newR   (   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_evalfC  s    c         C  s%   t  | |  j  } |  j |  | f S(   N(   t   maxR9   R   (   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt
   _as_mpf_opF  s    c         C  s   t  j |  j d   S(   Ni5   (   t   mlibt   to_floatR   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt	   __float__J  s    c         C  s   t  d |  j j   d  S(   Ns   %s needs .floor() method(   R   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   floorM  s    c         C  s   t  d |  j j   d  S(   Ns   %s needs .ceiling() method(   R   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   ceilingQ  s    c         C  s   |  S(   N(    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_conjugateU  s    c         G  s    d d l  m } | t j |  S(   Ni(   t   Order(   t   sympyR   R   t   One(   R   t   symbolsR   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_orderX  s    c         C  s   | |  k r | S|  S(   N(    (   R   t   oldt   new(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt
   _eval_subs]  s    c         C  s   t  S(   N(   R3   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_is_finiteb  s    c         C  s   d S(   Ni   i    R1   (   i   i    R1   (    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt	   class_keye  s    c         C  s   |  j    d d f d |  f S(   Ni    (    (    (   R   (   R   t   order(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   sort_keyi  s    R   c         C  sn   t  | t  r^ t d r^ | t j k r/ t j S| t j k rE t j S| t j k r^ t j Sn  t j |  |  S(   Ni    (	   R0   R1   R'   R   t   NaNt   Infinityt   NegativeInfinityR   t   __add__(   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   m  s    
c         C  sn   t  | t  r^ t d r^ | t j k r/ t j S| t j k rE t j S| t j k r^ t j Sn  t j |  |  S(   Ni    (	   R0   R1   R'   R   R   R   R   R   t   __sub__(   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   x  s    
c         C  s   t  | t  r t d r | t j k r/ t j S| t j k rh |  j rN t j S|  j r^ t j St j Sq | t j k r |  j r t j S|  j r t j St j Sq n t  | t	  r t
 St j |  |  S(   Ni    (   R0   R1   R'   R   R   R   t   is_zerot   is_positiveR   R   t   NotImplementedR   t   __mul__(   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s$    		
		c         C  sg   t  | t  rW t d rW | t j k r/ t j S| t j k sM | t j k rW t j Sn  t j	 |  |  S(   Ni    (
   R0   R1   R'   R   R   R   R   t   ZeroR   t   __div__(   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    
c         C  s   t  d |  j j   d  S(   Ns   %s needs .__eq__() method(   R   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __eq__  s    c         C  s   t  d |  j j   d  S(   Ns   %s needs .__ne__() method(   R   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __ne__  s    c         C  sT   y t  |  } Wn' t k
 r9 t d |  | f   n Xt d |  j j   d  S(   Ns   Invalid comparison %s < %ss   %s needs .__lt__() method(   R   R   RY   R   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __lt__  s    c         C  sT   y t  |  } Wn' t k
 r9 t d |  | f   n Xt d |  j j   d  S(   Ns   Invalid comparison %s <= %ss   %s needs .__le__() method(   R   R   RY   R   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __le__  s    c         C  sM   y t  |  } Wn' t k
 r9 t d |  | f   n Xt  |  j |   S(   Ns   Invalid comparison %s > %s(   R   R   RY   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __gt__  s
    c         C  sM   y t  |  } Wn' t k
 r9 t d |  | f   n Xt  |  j |   S(   Ns   Invalid comparison %s >= %s(   R   R   RY   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __ge__  s
    c         C  s   t  t |   j   S(   N(   t   superR1   t   __hash__(   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         O  s   t  S(   N(   R3   (   R   t   wrtt   flags(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   is_constant  s    c         O  sS   |  j  s | j d t  r) |  t   f S|  j rC t j |  f f St j |  f f S(   Nt   rational(   t   is_RationalRm   R3   R   t   is_negativeR   t   NegativeOneR   (   R   t   depst   kwargs(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   as_coeff_mul  s
    	c         G  s&   |  j  r |  t   f St j |  f f S(   N(   R   R   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   as_coeff_add  s    	c         C  s=   | r |  j  r t j |  f S|  r0 |  t j f St j |  f S(   s2   Efficiently extract the coefficient of a product. (   R   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   as_coeff_Mul  s    c         C  s    | s |  t  j f St  j |  f S(   s4   Efficiently extract the coefficient of a summation. (   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   as_coeff_Add  s    c         C  s   d d l  m } | |  |  S(   s#   Compute GCD of `self` and `other`. i(   Rr   (   t   sympy.polysRr   (   R   R   Rr   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRr     s    c         C  s   d d l  m } | |  |  S(   s#   Compute LCM of `self` and `other`. i(   t   lcm(   R   R   (   R   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   d d l  m } | |  |  S(   s1   Compute GCD and cofactors of `self` and `other`. i(   t	   cofactors(   R   R   (   R   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    N(4   R   t
   __module__t   __doc__R3   t   is_commutativeR   R)   t	   __slots__R9   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   classmethodR   R   R4   R   R   R   R   R   R   R   t   __truediv__R   R   R   R   R   R   R   R   R   R   R+   R   R   Rr   R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR1     sX   																												R5   c           B  s	  e  Z d  Z d d g Z d* Z d* Z e Z e Z	 e Z
 d* d* d* d  Z e d    Z d   Z d   Z d   Z d   Z d	   Z e 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  d e!  d    Z" e  d e!  d    Z# e  d e!  d    Z$ e  d e!  d    Z% e% Z& e  d e!  d    Z' e  d e!  d    Z( d   Z) d   Z* d   Z+ e+ Z, d   Z- d    Z. d!   Z/ d"   Z0 d#   Z1 d$   Z2 d%   Z3 d& d'  Z4 d(   Z5 d)   Z6 RS(+   s  Represent a floating-point number of arbitrary precision.

    Examples
    ========

    >>> from sympy import Float
    >>> Float(3.5)
    3.50000000000000
    >>> Float(3)
    3.00000000000000

    Creating Floats from strings (and Python ``int`` and ``long``
    types) will give a minimum precision of 15 digits, but the
    precision will automatically increase to capture all digits
    entered.

    >>> Float(1)
    1.00000000000000
    >>> Float(10**20)
    100000000000000000000.
    >>> Float('1e20')
    100000000000000000000.

    However, *floating-point* numbers (Python ``float`` types) retain
    only 15 digits of precision:

    >>> Float(1e20)
    1.00000000000000e+20
    >>> Float(1.23456789123456789)
    1.23456789123457

    It may be preferable to enter high-precision decimal numbers
    as strings:

    Float('1.23456789123456789')
    1.23456789123456789

    The desired number of digits can also be specified:

    >>> Float('1e-3', 3)
    0.00100
    >>> Float(100, 4)
    100.0

    Float can automatically count significant figures if a null string
    is sent for the precision; space are also allowed in the string. (Auto-
    counting is only allowed for strings, ints and longs).

    >>> Float('123 456 789 . 123 456', '')
    123456789.123456
    >>> Float('12e-3', '')
    0.012
    >>> Float(3, '')
    3.

    If a number is written in scientific notation, only the digits before the
    exponent are considered significant if a decimal appears, otherwise the
    "e" signifies only how to move the decimal:

    >>> Float('60.e2', '')  # 2 digits significant
    6.0e+3
    >>> Float('60e2', '')  # 4 digits significant
    6000.
    >>> Float('600e-2', '')  # 3 digits significant
    6.00

    Notes
    =====

    Floats are inexact by their nature unless their value is a binary-exact
    value.

    >>> approx, exact = Float(.1, 1), Float(.125, 1)

    For calculation purposes, evalf needs to be able to change the precision
    but this will not increase the accuracy of the inexact value. The
    following is the most accurate 5-digit approximation of a value of 0.1
    that had only 1 digit of precision:

    >>> approx.evalf(5)
    0.099609

    By contrast, 0.125 is exact in binary (as it is in base 10) and so it
    can be passed to Float or evalf to obtain an arbitrary precision with
    matching accuracy:

    >>> Float(exact, 5)
    0.12500
    >>> exact.evalf(20)
    0.12500000000000000000

    Trying to make a high-precision Float from a float is not disallowed,
    but one must keep in mind that the *underlying float* (not the apparent
    decimal value) is being obtained with high precision. For example, 0.3
    does not have a finite binary representation. The closest rational is
    the fraction 5404319552844595/2**54. So if you try to obtain a Float of
    0.3 to 20 digits of precision you will not see the same thing as 0.3
    followed by 19 zeros:

    >>> Float(0.3, 20)
    0.29999999999999998890

    If you want a 20-digit value of the decimal 0.3 (not the floating point
    approximation of 0.3) you should send the 0.3 as a string. The underlying
    representation is still binary but a higher precision than Python's float
    is used:

    >>> Float('0.3', 20)
    0.30000000000000000000

    Although you can increase the precision of an existing Float using Float
    it will not increase the accuracy -- the underlying value is not changed:

    >>> def show(f): # binary rep of Float
    ...     from sympy import Mul, Pow
    ...     s, m, e, b = f._mpf_
    ...     v = Mul(int(m), Pow(2, int(e), evaluate=False), evaluate=False)
    ...     print('%s at prec=%s' % (v, f._prec))
    ...
    >>> t = Float('0.3', 3)
    >>> show(t)
    4915/2**14 at prec=13
    >>> show(Float(t, 20)) # higher prec, not higher accuracy
    4915/2**14 at prec=70
    >>> show(Float(t, 2)) # lower prec
    307/2**10 at prec=10

    The same thing happens when evalf is used on a Float:

    >>> show(t.evalf(20))
    4915/2**14 at prec=70
    >>> show(t.evalf(2))
    307/2**10 at prec=10

    Finally, Floats can be instantiated with an mpf tuple (n, c, p) to
    produce the number (-1)**n*c*2**p:

    >>> n, c, p = 1, 5, 0
    >>> (-1)**n*c*2**p
    -5
    >>> Float((1, 5, 0))
    -5.00000000000000

    An actual mpf tuple also contains the number of bits in c as the last
    element of the tuple:

    >>> _._mpf_
    (1, 5, 0, 3)

    This is not needed for instantiation and is not the same thing as the
    precision. The mpf tuple and the precision are two separate quantities
    that Float tracks.

    RR   R9   c   
   	   C  sg  | d  k	 r: t d d d d d d d d  j   | } n  ~ | d  k	 rd | d  k	 rd t d	   n  t | t  r | j d
 d  } | j d  r t |  d k r d | } q| j d  rt |  d k rd | d } qn t | t	  r| d k rd } n t | t
 t f  r0t |  } n | t j k rHd } n | t j k r`d } nl t |  j d k rt |  } nH t | t j  r| d  k r| d  k r| j j } qn  | j } n  | d  k r| d  k rd } t | t  r| St | t  rt |  ry t j |  } Wn t j k
 rAqXd | k } t |  \ } } | j r| rt | t t |  j  d    } n  t d |  } t! j" j# |  } qn| d k r| d  k s| d  k r| d k rt | t  st d   n  d  } t |  ry t j |  } Wn t j k
 rFqXd | k } t |  \ } } | j r| rt | t t |  j  d    } t! j" j# |  } n  t$ } n  | d  k rt d |   qn  | d  k s| d k rt! j" j# |  } n  t% |  } t | t	  r8t! j& | | t'  } nt | t  r_t! j( | | t'  } nt | t j  r| j)   rt! j( t |  | t'  } q | j*   rt+ } q | j,   r| d k rt- } qt. } q t d t |    n-t | t/  rt |  d! k rt | d  t k rt0 |  } | d j1 d  r^| d d  | d <n  t2 | d d  | d <t/ |  } q t |  d k rt j3 | |  St j4 | d | d t d  | d j5 |  SnE y | j6 |  } Wn/ t7 t8 f k
 rt j | d  | j } n X| t9 k r/n | t+ k rBt j: St; j< |   }	 | |	 _ | |	 _= |	 S("   Nt   features+   Using 'prec=XX' to denote decimal precisiont
   useinsteadsF   'dps=XX' for decimal precision and 'precision=XX' for binary precisiont   issuei2  t   deprecated_since_versions   1.1s=   Both decimal and binary precision supplied. Supply only one. t    t    t   .i   t   0s   -.i   s   -0.i    s   +infs   -inft   numpyi   t   -s^   The null string can only be used when the number to Float is passed as a string or an integer.s   string-float not recognized: %ss   unexpected decimal value %si   i   t   Lii   RH   (   i   i   (>   R4   R(   t   warnR2   R0   R   t   replacet
   startswithR[   R   R   R\   R/   R   R   R   R.   R   R   RS   RG   t   contextRH   RR   R5   Rl   R   R   t   InvalidOperationRf   R   R   t   lstripR   t   libmpft   dps_to_precR3   R6   t
   from_floatRF   t   from_strRX   t   is_nant   _mpf_nant   is_infinitet   _mpf_inft	   _mpf_ninfR   t   listt   endswithR   R   R   t   evalfR   R   t   AttributeErrorRC   R   R
   R   R9   (
   R   t   numt   dpsRH   t	   precisiont   Numt   isintt   okRR   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    	!!			'0$				!5		c         C  sT   | t  k r t j S| t k r& t j St j |   } t | |  | _ | | _	 | S(   N(
   RC   R   R   R   R   R
   R   RN   RR   R9   (   R   RR   R9   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   (  s    	c         C  s   t  j |  j  f S(   N(   R   t   to_pickableRR   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __getnewargs__7  s    c         C  s   i |  j  d 6S(   NR9   (   R9   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __getstate__:  s    c         C  s   |  j  |  j f S(   N(   RR   R9   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _hashable_content=  s    c         C  s+   t  t t j t j |  j |  j     S(   N(   R\   R6   R   t   to_intt	   mpf_floorRR   R9   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   @  s    c         C  s+   t  t t j t j |  j |  j     S(   N(   R\   R6   R   R  t   mpf_ceilRR   R9   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   D  s    c         C  s   t  j |  j  S(   N(   RS   RG   RR   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  H  s    c         C  sG   t  |  j |  } | |  j k rC |  j | k rC t |  j |  n  | S(   N(   RN   RR   R9   R%   (   R   RH   RM   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   L  s    c         C  s   |  j  t | |  j  f S(   N(   RR   R   R9   (   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   R  s    c         C  s   |  j  t t f k r t St S(   N(   RR   R  R  R+   R3   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   U  s    c         C  s   |  j  t t f k r t St S(   N(   RR   R  R  R3   R+   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_is_infiniteZ  s    c         C  s   |  j  t k S(   N(   RR   RC   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_is_integer_  s    c         C  s3   |  j  t k r t S|  j  t k r& t S|  j d k  S(   Ni    (   RR   R  R3   R  R+   R  (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_is_negativeb  s
    c         C  s3   |  j  t k r t S|  j  t k r& t S|  j d k S(   Ni    (   RR   R  R3   R  R+   R  (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_is_positivei  s
    c         C  s   |  j  t k S(   N(   RR   RC   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_is_zerop  s    c         C  s   |  j  t k S(   N(   RR   RC   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __nonzero__s  s    c         C  s   t  j t j |  j  |  j  S(   N(   R5   R   R   t   mpf_negRR   R9   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __neg__x  s    R   c         C  sf   t  | t  rV t d rV | j |  j  \ } } t j t j |  j	 | | t
  |  St j |  |  S(   Ni    (   R0   R1   R'   R   R9   R5   R   R   t   mpf_addRR   RF   R   (   R   R   t   rhsRH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   {  s    %c         C  sf   t  | t  rV t d rV | j |  j  \ } } t j t j |  j	 | | t
  |  St j |  |  S(   Ni    (   R0   R1   R'   R   R9   R5   R   R   t   mpf_subRR   RF   R   (   R   R   R  RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    %c         C  sf   t  | t  rV t d rV | j |  j  \ } } t j t j |  j	 | | t
  |  St j |  |  S(   Ni    (   R0   R1   R'   R   R9   R5   R   R   t   mpf_mulRR   RF   R   (   R   R   R  RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    %c         C  sr   t  | t  rb | d k rb t d rb | j |  j  \ } } t j t j |  j	 | | t
  |  St j |  |  S(   Ni    (   R0   R1   R'   R   R9   R5   R   R   t   mpf_divRR   RF   R   (   R   R   R  RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    %%c         C  s
  t  | t  rM | j d k rM t d rM t t j t |   |  d |  j St  | t  r t d r |  | } | t |  k r t d d t |  j | j  Sn  t  | t	  r t d r | j
 |  j  \ } } t j t j |  j | | t  |  St	 j |  |  S(   Ni   i    R
  (   R0   R`   RV   R'   R5   t   __mod__R9   R6   R   R1   R   R   R   t   mpf_modRR   RF   (   R   R   R   R  RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR"    s    (

"%c         C  s   t  | t  r& t d r& | j |   St  | t  r| t d r| | j |  j  \ } } t j t j	 | |  j
 | t  |  St j |  |  S(   Ni    (   R0   R5   R'   R"  R1   R   R9   R   R   R#  RR   RF   t   __rmod__(   R   R   R  RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR$    s    %c         C  s  |  d k r2 | j  r t j S| j r2 t d  Sn  t | t  rt | t  r |  j } t j	 t
 j |  j | j | t  |  St | t  r | j d k r | j d r |  j r t t j | d t |  j |  S| j |  j  \ } } |  j } y) t | | | t  } t j	 | |  SWqt
 j k
 rt
 j | t f | t f | t  \ } } t j	 | |  t j	 | |  t j SXn  d S(   s   
        expt is symbolic object but not equal to 0, 1

        (-p)**r -> exp(r*log(-p)) -> exp(r*(log(p) + I*Pi)) ->
                  -> p**r*(sin(Pi*r) + cos(Pi*r)*I)
        i    t   infi   i   t   evaluateN(   R   R   R   R   R5   R0   R1   R\   R9   R   R   t   mpf_pow_intRR   RT   RF   R`   RV   t   PowR   R+   t   _eval_powerR   R   t   ComplexResultt   mpc_powRC   t   ImaginaryUnit(   R   RK   RH   t   mpfselfRz   t   ret   im(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR)    s0    			"%	$c         C  s   t  j t j |  j  |  j  S(   N(   R5   R   R   t   mpf_absRR   R9   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __abs__  s    c         C  s)   |  j  t k r d St t j |  j    S(   Ni    (   RR   RC   R6   R   R  (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __int__  s    c         C  s  t  | t  r_ t |  } y | j |  j  } Wn t k
 rE t SXt t j	 |  j
 |   Sy t |  } Wn t k
 r t SX| j r | j r t S| j |   S| j r t t j	 |  j
 | j
   S| j r | j |  j  } t t j	 |  j
 |   St S(   N(   R0   R   R5   R   R9   R2   R+   Rg   R   t   mpf_eqRR   R   R   R   t   is_NumberSymbolt   is_irrationalR   t   is_FloatR)   (   R   R   t   ot   ompf(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s*    				c         C  s   |  | k S(   N(    (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   y t  |  } Wn' t k
 r9 t d |  | f   n X| j rP | j |   S| j r | j r |  | j 9}  t  | j  } n | j	 r | j
   } n  | j r | t j k	 r t  t t j |  j | j |  j     St j |  |  S(   Ns   Invalid comparison %s > %s(   R   R   RY   R4  R   R   R   RV   RT   t   is_comparableR  R)   R   R   Rg   R   t   mpf_gtRR   R   R9   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    		%c         C  s   y t  |  } Wn' t k
 r9 t d |  | f   n X| j rP | j |   S| j r | j r |  | j 9}  t  | j  } n | j	 r | j
   } n  | j r | t j k	 r t  t t j |  j | j |  j     St j |  |  S(   Ns   Invalid comparison %s >= %s(   R   R   RY   R4  R   R   R   RV   RT   R9  R  R)   R   R   Rg   R   t   mpf_geRR   R   R9   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    		%c         C  s   y t  |  } Wn' t k
 r9 t d |  | f   n X| j rP | j |   S| j r | j r |  | j 9}  t  | j  } n | j	 r | j
   } n  | j r | t j k	 r t  t t j |  j | j |  j     St j |  |  S(   Ns   Invalid comparison %s < %s(   R   R   RY   R4  R   R   R   RV   RT   R9  R  R)   R   R   Rg   R   t   mpf_ltRR   R   R9   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    		%c         C  s   y t  |  } Wn' t k
 r9 t d |  | f   n X| j rP | j |   S| j r | j r |  | j 9}  t  | j  } n | j	 r | j
   } n  | j r | t j k	 r t  t t j |  j | j |  j     St j |  |  S(   Ns   Invalid comparison %s <= %s(   R   R   RY   R4  R   R   R   RV   RT   R9  R  R)   R   R   Rg   R   t   mpf_leRR   R   R9   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   .  s    		%c         C  s   t  t |   j   S(   N(   R   R5   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   ?  s    s   1e-15c         C  s   t  |  |  t |  k  S(   N(   R7   R5   (   R   R   t   epsilon(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt
   epsilon_eqB  s    c         C  s"   d d  l  j } | j t |    S(   Ni(   t   sage.allR:   t
   RealNumberR/   (   R   t   sage(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _sage_E  s    c         C  s   t  t j t |    |  S(   N(   t   formatR   R   R/   (   R   t   format_spec(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt
   __format__I  s    N(7   R   R   R   R   R4   t   is_rationalR5  R3   R   t   is_realR6  R   R   R   R  R  R  R   R   t   propertyR  R   R   R   R  R  R  R  R  R  t   __bool__R  R   R   R   R   R   R   R   R"  R$  R)  R1  R2  t   __long__R   R   R   R   R   R   R   R?  RC  RF  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR5     s^   																	 										R`   c           B  s`  e  Z d  Z e Z e Z e Z e Z d d g Z	 e Z
 e d* d* d   Z d d  Z d   Z d   Z d   Z d	   Z d
   Z e d e  d    Z e Z e d e  d    Z e d e  d    Z e d e  d    Z e Z e d e  d    Z e d e  d    Z e Z e d e  d    Z e d e  d    Z  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* e e e e e d"  Z0 e d e  d#    Z1 e d e  d$    Z2 d%   Z3 d&   Z4 e e d'  Z5 e d(  Z6 e d)  Z7 RS(+   sb  Represents rational numbers (p/q) of any size.

    Examples
    ========

    >>> from sympy import Rational, nsimplify, S, pi
    >>> Rational(1, 2)
    1/2

    Rational is unprejudiced in accepting input. If a float is passed, the
    underlying value of the binary representation will be returned:

    >>> Rational(.5)
    1/2
    >>> Rational(.2)
    3602879701896397/18014398509481984

    If the simpler representation of the float is desired then consider
    limiting the denominator to the desired value or convert the float to
    a string (which is roughly equivalent to limiting the denominator to
    10**12):

    >>> Rational(str(.2))
    1/5
    >>> Rational(.2).limit_denominator(10**12)
    1/5

    An arbitrarily precise Rational is obtained when a string literal is
    passed:

    >>> Rational("1.23")
    123/100
    >>> Rational('1e-2')
    1/100
    >>> Rational(".1")
    1/10
    >>> Rational('1e-2/3.2')
    1/320

    The conversion of other types of strings can be handled by
    the sympify() function, and conversion of floats to expressions
    or simple fractions can be handled with nsimplify:

    >>> S('.[3]')  # repeating digits in brackets
    1/3
    >>> S('3**2/10')  # general expressions
    9/10
    >>> nsimplify(.3)  # numbers that have a simple form
    3/10

    But if the input does not reduce to a literal Rational, an error will
    be raised:

    >>> Rational(pi)
    Traceback (most recent call last):
    ...
    TypeError: invalid input: pi


    Low-level
    ---------

    Access numerator and denominator as .p and .q:

    >>> r = Rational(3, 4)
    >>> r
    3/4
    >>> r.p
    3
    >>> r.q
    4

    Note that p and q return integers (not SymPy Integers) so some care
    is needed when using them in expressions:

    >>> r.p/r.q
    0.75

    See Also
    ========
    sympify, sympy.simplify.simplify.nsimplify
    RT   RV   c         C  s  | d  k rt | t  r | St | t  r1 nUt | t t f  rV t t |    St | t  s y t |  } Wqdt	 t
 f k
 r qdXn | j d  d k r t d |   n  | j d d  } | j d d  } t |  d k r'| \ } } t j |  } t j |  } | | } n  y t j |  } Wn t k
 rMn Xt | j | j d  St | t  st d |   n  d } d } n t |  } t |  } t | t  r| | j 9} | j } n  t | t  r| | j 9} | j } n  | d k r?| d k r8t d r.t d	   q8t j Sn  t j S| d k  r\| } | } n  | szt t |  |  } n  | d k r| | } | | } n  | d k rt |  S| d k r| d k rt j St j  |   } | | _ | | _ | S(
   Nt   /i   s   invalid input: %sR   R   i   i    RO   s   Indeterminate 0/0(!   R4   R0   R`   R   R   R5   RW   R   R   R   t   SyntaxErrort   countRY   R   t   rsplitR[   t	   fractionst   FractionR2   t	   numeratort   denominatorRV   RT   RP   R   R   t   ComplexInfinityRq   R7   R\   t   HalfR
   R   (   R   RT   RV   Rr   t   pqt   fpt   fqR   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     sx    	




		i@B c         C  s:   t  j |  j |  j  } t | j t  j t |     S(   s  Closest Rational to self with denominator at most max_denominator.

        >>> from sympy import Rational
        >>> Rational('3.141592653589793').limit_denominator(10)
        22/7
        >>> Rational('3.141592653589793').limit_denominator(100)
        311/99

        (   RP  RQ  RT   RV   R`   t   limit_denominatorR6   (   R   t   max_denominatorRj   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRY    s    
c         C  s   |  j  |  j f S(   N(   RT   RV   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  s   |  j  |  j f S(   N(   RT   RV   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  s   |  j  d k S(   Ni    (   RT   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  s   |  j  d k S(   Ni    (   RT   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  s   t  |  j |  j  S(   N(   R`   RT   RV   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    R   c         C  s   t  d r t | t  r= t |  j |  j | j |  j d  St | t  r{ t |  j | j |  j | j |  j | j  St | t  r | |  St j |  |  Sn  t j |  |  S(   Ni    i   (	   R'   R0   R\   R`   RT   RV   R5   R1   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    
$/c         C  s   t  d r t | t  r= t |  j |  j | j |  j d  St | t  r{ t |  j | j |  j | j |  j | j  St | t  r | |  St j |  |  Sn  t j |  |  S(   Ni    i   (	   R'   R0   R\   R`   RT   RV   R5   R1   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   &  s    
$/	c         C  s   t  d r t | t  r= t |  j | j |  j |  j d  St | t  r{ t |  j | j |  j | j |  j | j  St | t  r |  | St j |  |  Sn  t j |  |  S(   Ni    i   (	   R'   R0   R\   R`   RV   RT   R5   R1   t   __rsub__(   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR[  2  s    
$/	c         C  s   t  d r t | t  rE t |  j | j |  j t | j |  j   St | t  r t |  j | j |  j | j t |  j | j  t |  j | j   St | t  r | |  St j	 |  |  Sn  t j	 |  |  S(   Ni    (
   R'   R0   R\   R`   RT   RV   Rq   R5   R1   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   >  s    
,Fc         C  s   t  d r t | t  rj |  j r; | j t j k r; t j St |  j |  j | j t	 |  j | j   Sq t | t  r t |  j | j |  j | j t	 |  j | j  t	 |  j | j   St | t
  r |  d | St j |  |  Sn  t j |  |  S(   Ni    i   (   R'   R0   R\   RT   R   R   RT  R`   RV   Rq   R5   R1   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   L  s    
/Fc         C  s   t  d r t | t  rE t | j |  j |  j t |  j | j   St | t  r t | j |  j | j |  j t |  j | j  t |  j | j   St | t  r | d |  St j	 |  |  Sn  t j	 |  |  S(   Ni    i   (
   R'   R0   R\   R`   RT   RV   Rq   R5   R1   t   __rdiv__(   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR\  [  s    
,Fc         C  s   t  d r t | t  rj |  j | j | j |  j } t |  j | j | | j |  j |  j | j  St | t  r t |  j t |   d | j St j |  |  St j |  |  S(   Ni    R
  (	   R'   R0   R`   RT   RV   R5   R"  R9   R1   (   R   R   Rx   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR"  i  s    
3
c         C  s/   t  | t  r t j | |   St j |  |  S(   N(   R0   R`   R"  R1   R$  (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR$  v  s    c         C  s  t  | t  rt  | t  r2 |  j | j  | S| j r | } | t j k rd t |  j	 |  j
  S|  j r t j | t |  j	 |  j
  | St |  j	 |  j
  | Sn  | t j k r|  j
 |  j	 k r t j S|  j
 |  j	 k  r t j t j t j St j St  | t  r4t |  j
 | j
 |  j	 | j
 d  St  | t  r|  j
 d k rut |  j
  | t |  j	  | St |  j	  t | j
 | j	 d | j	  t |  j	  t | j
  Sn  |  j r| j r|  | Sd  S(   Ni   (   R0   R1   R5   R   R9   R   R   R   R`   RV   RT   R   R   R,  R   R\   t   is_even(   R   RK   t   ne(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR)  |  s6    		#$#	c         C  s   t  j |  j |  j | t  S(   N(   R   t   from_rationalRT   RV   RF   (   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s%   t  j t j |  j |  j | |   S(   N(   RS   t   make_mpfR   R_  RT   RV   (   R   RH   RF   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _mpmath_  s    c         C  s   t  t |  j  |  j  S(   N(   R`   R7   RT   RV   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR1    s    c         C  s=   |  j  |  j } } | d k  r/ t | |  St | |  S(   Ni    (   RT   RV   R6   (   R   RT   RV   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR2    s    c         C  s   t  |  j |  j  S(   N(   R\   RT   RV   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   t  |  j |  j  S(   N(   R\   RT   RV   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   y t  |  } Wn t k
 r$ t SX| j rH | j r; t S| j |   S| j r | j r| |  j	 | j	 k o{ |  j
 | j
 k S| j r t j |  j | j  | j  Sn  t S(   N(   R   R   R   R4  R5  R+   R   R)   R   RT   RV   R6  R   R3  R   R9   RR   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    				"	"c         C  s   |  | k S(   N(    (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s  y t  |  } Wn' t k
 r9 t d |  | f   n X| j rP | j |   S|  } | j r | j r t  t |  j | j	 |  j	 | j k   S| j
 r t  t t j |  j | j  | j    Sn2 | j r | j r t |  j  |  j	 | } } n  t j | |  S(   Ns   Invalid comparison %s > %s(   R   R   RY   R4  R   R)   R   Rg   RT   RV   R6  R   R:  R   R9   RR   R   RH  R\   R
   R   (   R   R   t   expr(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s     			*	" c         C  s  y t  |  } Wn' t k
 r9 t d |  | f   n X| j rP | j |   S|  } | j r | j r t  t |  j | j	 |  j	 | j k   S| j
 r t  t t j |  j | j  | j    Sn2 | j r | j r t |  j  |  j	 | } } n  t j | |  S(   Ns   Invalid comparison %s >= %s(   R   R   RY   R4  R   R)   R   Rg   RT   RV   R6  R   R;  R   R9   RR   R   RH  R\   R
   R   (   R   R   Rb  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s     			*	" c         C  s  y t  |  } Wn' t k
 r9 t d |  | f   n X| j rP | j |   S|  } | j r | j r t  t |  j | j	 |  j	 | j k    S| j
 r t  t t j |  j | j  | j    Sn2 | j r | j r t |  j  |  j	 | } } n  t j | |  S(   Ns   Invalid comparison %s < %s(   R   R   RY   R4  R   R)   R   Rg   RT   RV   R6  R   R<  R   R9   RR   R   RH  R\   R
   R   (   R   R   Rb  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s     			*	" c         C  s  y t  |  } Wn' t k
 r9 t d |  | f   n X|  } | j rV | j |   S| j r | j r t  t |  j | j	 |  j	 | j k   S| j
 r t  t t j |  j | j  | j    Sn2 | j r | j r t |  j  |  j	 | } } n  t j | |  S(   Ns   Invalid comparison %s <= %s(   R   R   RY   R4  R   R)   R   Rg   RT   RV   R6  R   R=  R   R9   RR   R   RH  R\   R
   R   (   R   R   Rb  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s     			*	" c         C  s   t  t |   j   S(   N(   R   R`   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s>   d d l  m } | |  d | d | d | d | d | j   S(   s   A wrapper to factorint which return factors of self that are
        smaller than limit (or cheap to compute). Special methods of
        factoring are disabled by default so that only trial division is used.
        i(   t	   factorratt   limitt	   use_trialt   use_rhot   use_pm1t   verbose(   t   sympy.ntheoryRc  t   copy(   R   Rd  Re  Rf  Rg  Rh  t   visualRc  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   factors  s    c         C  si   t  | t  rY | t j k r" | St t t |  j | j   t t |  j | j    St	 j
 |  |  S(   N(   R0   R`   R   R   R\   Rq   RT   R   RV   R1   Rr   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRr   %  s    c         C  sX   t  | t  rH t |  j t |  j | j  | j t |  j | j   St j |  |  S(   N(   R0   R`   RT   Rq   RV   R1   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   /  s
     c         C  s   t  |  j  t  |  j  f S(   N(   R\   RT   RV   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   as_numer_denom7  s    c         C  s/   d d  l  j } | j |  j  | j |  j  S(   Ni(   R@  R:   R\   RT   RV   (   R   RB  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRC  :  s    c         C  s7   |  r* |  j  r |  t j f S|  t j f St j |  f S(   s-  Return the tuple (R, self/R) where R is the positive Rational
        extracted from self.

        Examples
        ========

        >>> from sympy import S
        >>> (S(-3)/2).as_content_primitive()
        (3/2, -1)

        See docstring of Expr.as_content_primitive for more examples.
        (   R   R   R   R   (   R   t   radicalt   clear(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   as_content_primitive>  s
    	c         C  s   |  t  j f S(   s2   Efficiently extract the coefficient of a product. (   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   R  s    c         C  s   |  t  j f S(   s4   Efficiently extract the coefficient of a summation. (   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   V  s    N(8   R   R   R   R3   RH  R+   t
   is_integerRG  R   R   R   R   R4   R   RY  R  R  R  R  R  R   R   R   t   __radd__R   R[  R   t   __rmul__R   R\  R   R"  R$  R)  R   Ra  R1  R2  RK  R   R   R   R   R   R   R   R   R   Rl  Rr   R   Rm  RC  Rp  R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR`   T  sd   RJ						&														
		R\   c           B  sm  e  Z d  Z d Z e Z e Z e Z d g Z d   Z	 d   Z
 e 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 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) d"   Z* d#   Z+ d$   Z, RS(%   sj  Represents integer numbers of any size.

    Examples
    ========

    >>> from sympy import Integer
    >>> Integer(3)
    3

    If a float or a rational is passed to Integer, the fractional part
    will be discarded; the effect is of rounding toward zero.

    >>> Integer(3.8)
    3
    >>> Integer(-3.8)
    -3

    A string is acceptable input if it can be parsed as an integer:

    >>> Integer("9" * 20)
    99999999999999999999

    It is rarely needed to explicitly instantiate an Integer, because
    Python integers are automatically converted to Integer when they
    are used in SymPy expressions.
    i   RT   c         C  s   t  j |  j | t  S(   N(   R   t   from_intRT   RF   (   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   ~  s    c         C  s   t  j |  j |   S(   N(   RS   R`  R   (   R   RH   RF   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRa    s    c         C  s   t  | t  r$ | j d d  } n  y t |  } Wn! t k
 rW t d |   n X| d k rk t j S| d k r~ t j S| d k r t j St	 j
 |   } | | _ | S(   NR   R   s6   Argument of Integer should be of numeric type, got %s.i   ii    (   R0   R   R   R6   RY   R   R   R   R   R
   R   RT   (   R   R-   t   ivalR   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s     	c         C  s
   |  j  f S(   N(   RT   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  s   |  j  S(   N(   RT   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR2    s    c         C  s   t  |  j  S(   N(   R\   RT   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   t  |  j  S(   N(   R\   RT   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   t  |  j  S(   N(   R\   RT   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  s%   |  j  d k r |  St |  j   Sd  S(   Ni    (   RT   R\   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR1    s    c         C  sV   d d l  m } t | t  rB t d rB | t |  j | j    St j |  |  Sd  S(   Ni   (   R   i    (	   R   R   R0   R\   R'   R   RT   R1   R   (   R   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   d d l  m } t | t  r? t d r? | t | |  j    Sy t |  } WnK t k
 r d } t	 |  j
 } t	 |   j
 } t | | | f   n Xt j | |   Sd  S(   Ni   (   R   i    s7   unsupported operand type(s) for divmod(): '%s' and '%s'(   R   R   R0   R   R'   R   RT   R1   RY   R.   R   R   (   R   R   R   R   t   onamet   sname(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   t  d r t | t  r* t |  j |  St | t  rM t |  j | j  St | t  r t |  j | j | j | j d  St j |  |  St |  |  Sd  S(   Ni    i   (	   R'   R0   R   R\   RT   R`   RV   R   t   Add(   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    
$c         C  s}   t  d rm t | t  r* t | |  j  St | t  r] t | j |  j | j | j d  St j |  |  St j |  |  S(   Ni    i   (   R'   R0   R   R\   RT   R`   RV   Rr  (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRr    s    
$c         C  s   t  d r t | t  r* t |  j |  St | t  rM t |  j | j  St | t  r t |  j | j | j | j d  St j |  |  St j |  |  S(   Ni    i   (   R'   R0   R   R\   RT   R`   RV   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    
$c         C  s}   t  d rm t | t  r* t | |  j  St | t  r] t | j |  j | j | j d  St j |  |  St j |  |  S(   Ni    i   (   R'   R0   R   R\   RT   R`   RV   R[  (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR[    s    
$c         C  s   t  d r t | t  r* t |  j |  St | t  rM t |  j | j  St | t  r t |  j | j | j t |  j | j   St j |  |  St j |  |  S(   Ni    (	   R'   R0   R   R\   RT   R`   RV   Rq   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    
,c         C  s   t  d ru t | t  r* t | |  j  St | t  re t | j |  j | j t |  j | j   St j |  |  St j |  |  S(   Ni    (	   R'   R0   R   R\   RT   R`   RV   Rq   Rs  (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRs    s    
,c         C  sm   t  d r] t | t  r* t |  j |  St | t  rM t |  j | j  St j |  |  St j |  |  S(   Ni    (   R'   R0   R   R\   RT   R`   R"  (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR"  
  s    
c         C  sm   t  d r] t | t  r* t | |  j  St | t  rM t | j |  j  St j |  |  St j |  |  S(   Ni    (   R'   R0   R   R\   RT   R`   R$  (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR$    s    
c         C  sK   t  | t  r |  j | k St  | t  r; |  j | j k St j |  |  S(   N(   R0   R   RT   R\   R`   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s
    c         C  s   |  | k S(   N(    (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   #  s    c         C  si   y t  |  } Wn' t k
 r9 t d |  | f   n X| j rY t  |  j | j k  St j |  |  S(   Ns   Invalid comparison %s > %s(   R   R   RY   R   RT   R`   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   &  s    	c         C  si   y t  |  } Wn' t k
 r9 t d |  | f   n X| j rY t  |  j | j k   St j |  |  S(   Ns   Invalid comparison %s < %s(   R   R   RY   R   RT   R`   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   /  s    	c         C  si   y t  |  } Wn' t k
 r9 t d |  | f   n X| j rY t  |  j | j k  St j |  |  S(   Ns   Invalid comparison %s >= %s(   R   R   RY   R   RT   R`   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   8  s    	c         C  si   y t  |  } Wn' t k
 r9 t d |  | f   n X| j rY t  |  j | j k  St j |  |  S(   Ns   Invalid comparison %s <= %s(   R   R   RY   R   RT   R`   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   A  s    	c         C  s   t  |  j  S(   N(   t   hashRT   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   J  s    c         C  s   |  j  S(   N(   RT   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt	   __index__M  s    c         C  s   t  |  j d  S(   Ni   (   Rg   RT   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_is_oddR  s    c         C  s  d d l  m } | t j k rM |  j t j k r8 t j St j t j t j S| t j k rp t d |   t j St	 | t
  s |  j r | j r |  | Sn  t	 | t  r t t |   j |  St	 | t  s d S| t j k r|  j rt j t |  |  S| j rO| } |  j r8t j | t d |   | St d |  j  | Sn  t t |  j  | j  \ } } | rt | t | j   } |  j r| t j | 9} n  | St t |  j   } | |  } | t k	 ri | d | d 6}	 n t |  j d d	  }	 d }
 d } d } d } i  } x |	 j   D] \ } } | | j 9} t | | j  \ } } | d k r|
 | | 9}
 n  | d k r8t | | j  } | d k r| t | t | | | j |   9} q| | | <q8q8WxN | j   D]@ \ } } | d k r| } qt | |  } | d k rPqqWx, | j   D] \ } } | | | | 9} qIW| | k r|
 d k r| d k rd } nE |
 | t | t | | j   } |  j r| t t j |  9} n  | S(
   sL  
        Tries to do some simplifications on self**expt

        Returns None if no further simplifications can be done

        When exponent is a fraction (so we have for example a square root),
        we try to find a simpler representation by factoring the argument
        up to factors of 2**15, e.g.

          - sqrt(4) becomes 2
          - sqrt(-4) becomes 2*I
          - (2**(3+7)*3**(6+7))**Rational(1,7) becomes 6*18**(3/7)

        Further simplification would require a special call to factorint on
        the argument which is not done here for sake of speed.

        i(   t   perfect_poweri   Ni    Rd  i   i   i   (   R   R|  R   R   RT   R   R,  R   R`   R0   R1   R   R]  R5   R   R\   R)  RU  R(  R   t   integer_nthrootR7   RV   R6   R+   Rl  t   itemsR   Rq   R4   (   R   RK   R|  R^  Ry   t   xexactt   resultt   b_posRT   t   dictt   out_intt   out_radt   sqr_intt   sqr_gcdt   sqr_dictt   primet   exponentt   div_et   div_mR   t   ext   kt   v(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR)  U  sz    		!	*	$	#	c         C  s   d d l  m } | |   S(   Ni(   t   isprime(   Ri  R  (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_is_prime  s    c         C  s!   |  d k r t  |  j  St Sd  S(   Ni   (   R   t   is_primeR+   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_is_composite  s    c         C  s   |  t  j f S(   N(   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRm    s    c         C  s   t  |  j t  |  j  S(   N(   R\   RT   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __floordiv__  s    c         C  s   t  t  |  j |  j  S(   N(   R\   RT   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   __rfloordiv__  s    (-   R   R   R   RV   R3   Rq  R   R   R   R   Ra  R   R   R  R2  RK  R   R   R  R1  R   R   R   Rr  R   R[  R   Rs  R"  R$  R   R   R   R   R   R   R   Rz  R{  R)  R  R  Rm  R  R  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR\   [  sR   																																						i				t   AlgebraicNumberc           B  s   e  Z d  Z d d d d g Z e Z e Z e Z d d d  Z	 d   Z
 d   Z e d    Z d d	  Z d d
  Z d   Z d   Z d   Z d   Z RS(   s3   Class for representing algebraic numbers in SymPy. t   rept   roott   aliast   minpolyc         K  s*  d d l  m } d d l m } m } d d l m } d d l m }	 t	 |  } t
 | t t f  r | \ }
 } |
 j s | |
  }
 q nD | j r | j | j }
 } n% | | | j d  d t | }
 } |
 j   } | d
 k	 rt
 | |  s#| j t	 |  d |  } t |   } n- | j | j   d |  } t | j     } | j   |
 j   k r| j |
 j  } qn* | j d	 d g d |  } t d	 d  } | | f } | d
 k	 rt
 | |	  s|	 |  } n  | | f } n  t j |  |  } | | _ | | _ | | _ |
 | _ | S(   s"   Construct a new algebraic number. i(   t   Poly(   t   ANPt   DMP(   t   minimal_polynomial(   t   Symbolt   gent   polysi    i   N(   R   R  t   sympy.polys.polyclassesR  R  t   sympy.polys.numberfieldsR  t   sympy.core.symbolR  R   R0   R   R   t   is_Polyt   is_AlgebraicNumberR  R  t   getR3   t
   get_domainR4   t   from_sympy_listt	   from_listt   to_listt   degreet   remR  R
   R   R  (   R   Rb  t   coeffsR  Ro   R  R  R  R  R  R  R  t   domR  t   scoeffst   sargsR   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     sF    		"				c         C  s   t  t |   j   S(   N(   R   R  R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   	  s    c         C  s   |  j    j |  S(   N(   t   as_exprt   _evalf(   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   	  s    c         C  s   |  j  d k	 S(   s'   Returns ``True`` if ``alias`` was set. N(   R  R4   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt
   is_aliased	  s    c         C  s}   d d l  m } m } m } | d k	 r; | j |  j |  S|  j d k	 r` | j |  j |  j  S| j |  j | d   Sd S(   s&   Create a Poly instance from ``self``. i(   t   DummyR  t   PurePolyRy   N(   R   R  R  R  R4   R   R  R  (   R   Ry   R  R  R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   as_poly 	  s    c         C  s"   |  j  | p |  j  j   j   S(   s)   Create a Basic expression from ``self``. (   R  R  R  t   expand(   R   Ry   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  +	  s    c         C  s/   g  |  j  j   D] } |  j  j j |  ^ q S(   s7   Returns all SymPy coefficients of an algebraic number. (   R  t
   all_coeffsR  t   to_sympy(   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  /	  s    c         C  s   |  j  j   S(   s8   Returns all native coefficients of an algebraic number. (   R  R  (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   native_coeffs3	  s    c         C  s   d d l  m } |  j } | j   d k r/ |  S| j   | j   d } | j | | j | j     } | | } | j   |  j } t | | f |  j	    S(   s*   Convert ``self`` to an algebraic integer. i(   R  i   (
   R   R  R  t   LCR  t   composeR  R  R  R  (   R   R  Rj   t   coefft   polyR  R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   to_algebraic_integer7	  s    	"
c         C  s   d d l  m } m } x{ g  |  j j   D] } | j | k r) | ^ q) D]H } | |  j |  j rH | |  | | |  j  k  r t |  SqH qH W|  S(   Ni(   t   CRootOfR  (   R   R  R  t	   all_rootst   funcR  t	   is_SymbolR  (   R   t   ratiot   measureR   t   inverseR  R  R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_simplifyG	  s    8N(   R   R   R   R   R3   R  t   is_algebraicR   R4   R   R   R   RI  R  R  R  R  R  R  R  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s   5					t   RationalConstantc           B  s   e  Z d  Z g  Z d   Z RS(   s   
    Abstract base class for rationals with specific behaviors

    Derived classes must define class attributes p and q and should probably all
    be singletons.
    c         C  s   t  j |   S(   N(   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   [	  s    (   R   R   R   R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  R	  s   t   IntegerConstantc           B  s   e  Z g  Z d    Z RS(   c         C  s   t  j |   S(   N(   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   b	  s    (   R   R   R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  _	  s   R   c           B  s   e  Z d  Z d Z d Z e Z e Z e Z	 e Z
 g  Z e d    Z e d    Z d   Z d   Z d   Z e Z e d  Z RS(	   s$  The number zero.

    Zero is a singleton, and can be accessed by ``S.Zero``

    Examples
    ========

    >>> from sympy import S, Integer, zoo
    >>> Integer(0) is S.Zero
    True
    >>> 1/S.Zero
    zoo

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Zero
    i    i   c           C  s   t  j S(   N(   R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR1  	  s    c           C  s   t  j S(   N(   R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  	  s    c         C  st   | j  r |  S| j r t j S| j t k r3 t j S| j   \ } } | j rY t j | S| t j k	 rp |  | Sd  S(   N(	   R   R   R   RT  RH  R+   R   R   R   (   R   RK   R  t   terms(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR)  	  s    			c         G  s   |  S(   N(    (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   	  s    c         C  s   t  S(   N(   R+   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  	  s    c         C  s   t  j |  f S(   s4   Efficiently extract the coefficient of a summation. (   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   	  s    (   R   R   R   RT   RV   R+   R   R   R3   R   R   R   t   staticmethodR1  R  R)  R   R  RJ  R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   f	  s   			R   c           B  sw   e  Z d  Z e Z d Z d Z g  Z e d    Z	 e d    Z
 d   Z d   Z e d e e e e e d   Z RS(   s  The number one.

    One is a singleton, and can be accessed by ``S.One``.

    Examples
    ========

    >>> from sympy import S, Integer
    >>> Integer(1) is S.One
    True

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/1_%28number%29
    i   c           C  s   t  j S(   N(   R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR1  	  s    c           C  s   t  j S(   N(   R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  	  s    c         C  s   |  S(   N(    (   R   RK   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR)  	  s    c         G  s   d  S(   N(    (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   	  s    c         C  s   | r t  j Si  Sd  S(   N(   R   R   (   Rd  Re  Rf  Rg  Rh  Rk  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRl  	  s    N(   R   R   R   R3   R   RT   RV   R   R  R1  R  R)  R   R4   R+   Rl  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   	  s   		R   c           B  sM   e  Z d  Z e Z d Z d Z g  Z e d    Z	 e d    Z
 d   Z RS(   s]  The number negative one.

    NegativeOne is a singleton, and can be accessed by ``S.NegativeOne``.

    Examples
    ========

    >>> from sympy import S, Integer
    >>> Integer(-1) is S.NegativeOne
    True

    See Also
    ========

    One

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/%E2%88%921_%28number%29

    ii   c           C  s   t  j S(   N(   R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR1  	  s    c           C  s   t  j S(   N(   R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  	  s    c         C  s  | j  r t j S| j r  t j St | t  rt | t  rL t d  | S| t j k rb t j S| t j	 k s | t j
 k r t j S| t j k r t j St | t  r| j d k r t j t | j  St | j | j  \ } } | r|  | |  t | | j  Sqn  d  S(   Ng      i   (   t   is_oddR   R   R]  R   R0   R1   R5   R   R   R   RU  R,  R`   RV   R\   RT   R   (   R   RK   R-   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR)  	  s(    		"(   R   R   R   R3   R   RT   RV   R   R  R1  R  R)  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   	  s   RU  c           B  s5   e  Z d  Z e Z d Z d Z g  Z e d    Z	 RS(   s  The rational number 1/2.

    Half is a singleton, and can be accessed by ``S.Half``.

    Examples
    ========

    >>> from sympy import S, Rational
    >>> Rational(1, 2) is S.Half
    True

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/One_half
    i   i   c           C  s   t  j S(   N(   R   RU  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR1  -
  s    (
   R   R   R   R3   R   RT   RV   R   R  R1  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRU  
  s   R   c           B  sL  e  Z d  Z e Z e Z e Z e Z e Z	 g  Z
 d   Z d   Z d   Z e d e  d    Z e Z e d e  d    Z e d e  d    Z e Z e d e  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" d   Z# e# Z$ d   Z% d   Z& RS(   s  Positive infinite quantity.

    In real analysis the symbol `\infty` denotes an unbounded
    limit: `x\to\infty` means that `x` grows without bound.

    Infinity is often used not only to define a limit but as a value
    in the affinely extended real number system.  Points labeled `+\infty`
    and `-\infty` can be added to the topological space of the real numbers,
    producing the two-point compactification of the real numbers.  Adding
    algebraic properties to this gives us the extended real numbers.

    Infinity is a singleton, and can be accessed by ``S.Infinity``,
    or can be imported as ``oo``.

    Examples
    ========

    >>> from sympy import oo, exp, limit, Symbol
    >>> 1 + oo
    oo
    >>> 42/oo
    0
    >>> x = Symbol('x')
    >>> limit(exp(x), x, oo)
    oo

    See Also
    ========

    NegativeInfinity, NaN

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Infinity
    c         C  s   t  j |   S(   N(   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   `
  s    c         C  s   d S(   Ns   \infty(    (   R   t   printer(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _latexc
  s    c         C  s   |  | k r | Sd  S(   N(    (   R   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   f
  s    R   c         C  sq   t  | t  rm | t j k s- | t j k r4 t j S| j rc | t d  k rV t j St d  Sqm t j Sn  t S(   Ns   -infR%  (	   R0   R1   R   R   R   R6  R5   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   j
  s    	
c         C  sq   t  | t  rm | t j k s- | t j k r4 t j S| j rc | t d  k rV t j St d  Sqm t j Sn  t S(   NR%  (   R0   R1   R   R   R   R6  R5   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   y
  s    	
c         C  s   t  | t  r | t j k s- | t j k r4 t j S| j rs | d k rP t j S| d k rf t d  St d  Sq | d k r t j St j Sn  t	 S(   Ni    R%  s   -inf(
   R0   R1   R   R   R   R6  R5   R   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   
  s    	

c         C  s   t  | t  r | t j k s< | t j k s< | t j k rC t j S| j r | t d  k sp | t d  k rw t j S| j r t d  St d  Sq | d k r t j St j Sn  t	 S(   Ns   -infR%  i    (
   R0   R1   R   R   R   R   R6  R5   t   is_nonnegativeR   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   
  s     		

c         C  s   t  j S(   N(   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR1  
  s    c         C  s   t  j S(   N(   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  
  s    c         C  s   d d l  m } | j r  t j S| j r0 t j S| t j k rF t j S| t j k r\ t j S| j	 t
 k r | j r | |  } | j r t j S| j r t j S| j r t j S|  | j   Sd S(   s  
        ``expt`` is symbolic object but not equal to 0 or 1.

        ================ ======= ==============================
        Expression       Result  Notes
        ================ ======= ==============================
        ``oo ** nan``    ``nan``
        ``oo ** -p``     ``0``   ``p`` is number, ``oo``
        ================ ======= ==============================

        See Also
        ========
        Pow
        NaN
        NegativeInfinity

        i(   R.  N(   t   sympy.functionsR.  R   R   R   R   R   R   RT  RH  R+   R   R   R  (   R   RK   R.  t	   expt_real(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR)  
  s$    					c         C  s   t  j S(   N(   R   R   (   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   
  s    c         C  s   d d  l  j } | j S(   Ni(   R@  R:   t   oo(   R   RB  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRC  
  s    c         C  s   t  t |   j   S(   N(   R   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   
  s    c         C  s   | t  j k S(   N(   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   
  s    c         C  s   | t  j k	 S(   N(   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   
  s    c         C  sZ   y t  |  } Wn' t k
 r9 t d |  | f   n X| j rJ t j St j |  |  S(   Ns   Invalid comparison %s < %s(   R   R   RY   RH  R   R   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   
  s    	c         C  s   y t  |  } Wn' t k
 r9 t d |  | f   n X| j r | j s[ | t j k rb t j S| j rr t j S| j	 r | j
 r t j Sn  t j |  |  S(   Ns   Invalid comparison %s <= %s(   R   R   RY   RH  RX   R   R   R   t   is_nonpositiveR  R   R   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   
  s    		
c         C  s   y t  |  } Wn' t k
 r9 t d |  | f   n X| j r | j s[ | t j k rb t j S| j rr t j S| j	 r | j
 r t j Sn  t j |  |  S(   Ns   Invalid comparison %s > %s(   R   R   RY   RH  RX   R   R   R   R  R  R   R   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    		
c         C  sZ   y t  |  } Wn' t k
 r9 t d |  | f   n X| j rJ t j St j |  |  S(   Ns   Invalid comparison %s >= %s(   R   R   RY   RH  R   R   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    	c         C  s   t  j S(   N(   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR"    s    c         C  s   |  S(   N(    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   #  s    c         C  s   |  S(   N(    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   &  s    ('   R   R   R   R3   R   R   R  R   R+   R  R   R   R  R   R   R   R   Rr  R   R   Rs  R   R   R1  R  R)  R   RC  R   R   R   R   R   R   R   R"  R$  R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   2
  sB   $						'													R   c           B  sF  e  Z d  Z e Z e Z e Z e Z g  Z d   Z	 d   Z
 d   Z e d e  d    Z e Z e d e  d    Z e d e  d    Z e Z e d e  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  d   Z! e! Z" d   Z# d   Z$ RS(   s   Negative infinite quantity.

    NegativeInfinity is a singleton, and can be accessed
    by ``S.NegativeInfinity``.

    See Also
    ========

    Infinity
    c         C  s   t  j |   S(   N(   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   ?  s    c         C  s   d S(   Ns   -\infty(    (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  B  s    c         C  s   |  | k r | Sd  S(   N(    (   R   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   E  s    R   c         C  st   t  | t  rp | t j k s- | t j k r4 t j S| j rf | t d  k rY t d  St d  Sqp t j Sn  t S(   NR%  t   nans   -inf(	   R0   R1   R   R   R   R6  R5   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   I  s    	

c         C  st   t  | t  rp | t j k s- | t j k r4 t j S| j rf | t d  k rY t d  St d  Sqp t j Sn  t S(   Ns   -infR  (   R0   R1   R   R   R   R6  R5   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   X  s    	

c         C  s   t  | t  r | t j k s- | t j k r4 t j S| j r| | t j k sU | j r\ t j S| j ro t d  St d  Sq | j r t j	 St j
 Sn  t S(   Ns   -infR%  (   R0   R1   R   R   R   R6  R   R   R5   R   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   f  s    		
	
c         C  s   t  | t  r | t j k s< | t j k s< | t j k rC t j S| j r | t d  k s | t d  k s | t j k r t j S| j r t d  St d  Sq | d k r t j St j Sn  t	 S(   Ns   -infR%  i    (
   R0   R1   R   R   R   R   R6  R5   R  R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   z  s"    		

c         C  s   t  j S(   N(   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR1    s    c         C  s   t  j S(   N(   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  s   | j  r | t j k s6 | t j k s6 | t j k r= t j St | t  ro | j ro | j re t j St j Sn  t j	 | t j | Sd S(   s^  
        ``expt`` is symbolic object but not equal to 0 or 1.

        ================ ======= ==============================
        Expression       Result  Notes
        ================ ======= ==============================
        ``(-oo) ** nan`` ``nan``
        ``(-oo) ** oo``  ``nan``
        ``(-oo) ** -oo`` ``nan``
        ``(-oo) ** e``   ``oo``  ``e`` is positive even integer
        ``(-oo) ** o``   ``-oo`` ``o`` is positive odd integer
        ================ ======= ==============================

        See Also
        ========

        Infinity
        Pow
        NaN

        N(
   R   R   R   R   R   R0   R\   R   R  R   (   R   RK   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR)    s    		
c         C  s   t  j S(   N(   R   R    (   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   d d  l  j } | j S(   Ni(   R@  R:   R  (   R   RB  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRC    s    c         C  s   t  t |   j   S(   N(   R   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   | t  j k S(   N(   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   | t  j k	 S(   N(   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   y t  |  } Wn' t k
 r9 t d |  | f   n X| j r | j s[ | t j k rb t j S| j rr t j S| j	 r | j
 r t j Sn  t j |  |  S(   Ns   Invalid comparison %s < %s(   R   R   RY   RH  RX   R   R   R   R  R  R   R   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    		
c         C  sZ   y t  |  } Wn' t k
 r9 t d |  | f   n X| j rJ t j St j |  |  S(   Ns   Invalid comparison %s <= %s(   R   R   RY   RH  R   R   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    	c         C  sZ   y t  |  } Wn' t k
 r9 t d |  | f   n X| j rJ t j St j |  |  S(   Ns   Invalid comparison %s > %s(   R   R   RY   RH  R   R   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    	c         C  s   y t  |  } Wn' t k
 r9 t d |  | f   n X| j r | j s[ | t j k rb t j S| j rr t j S| j	 r | j
 r t j Sn  t j |  |  S(   Ns   Invalid comparison %s >= %s(   R   R   RY   RH  RX   R   R   R   R  R  R   R   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    		
c         C  s   t  j S(   N(   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR"    s    c         C  s   |  S(   N(    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR      s    c         C  s   |  S(   N(    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    (%   R   R   R   R3   R   R   R  R   R   R   R  R   R   R   R   Rr  R   R   Rs  R   R   R1  R  R)  R   RC  R   R   R   R   R   R   R   R"  R$  R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   ,  s@   
						$													R   c           B  sF  e  Z d  Z e Z d Z d Z d Z d Z	 d Z
 e Z d Z d Z d Z d Z d Z e Z g  Z d   Z d   Z e d e  d    Z e d e  d    Z e d e  d    Z e d e  d    Z e Z d   Z d	   Z d
   Z d   Z  d   Z! d   Z" d   Z# d   Z$ e% j& Z& e% j' Z' e% j( Z( e% j) Z) RS(   s  
    Not a Number.

    This serves as a place holder for numeric values that are indeterminate.
    Most operations on NaN, produce another NaN.  Most indeterminate forms,
    such as ``0/0`` or ``oo - oo` produce NaN.  Two exceptions are ``0**0``
    and ``oo**0``, which all produce ``1`` (this is consistent with Python's
    float).

    NaN is loosely related to floating point nan, which is defined in the
    IEEE 754 floating point standard, and corresponds to the Python
    ``float('nan')``.  Differences are noted below.

    NaN is mathematically not equal to anything else, even NaN itself.  This
    explains the initially counter-intuitive results with ``Eq`` and ``==`` in
    the examples below.

    NaN is not comparable so inequalities raise a TypeError.  This is in
    constrast with floating point nan where all inequalities are false.

    NaN is a singleton, and can be accessed by ``S.NaN``, or can be imported
    as ``nan``.

    Examples
    ========

    >>> from sympy import nan, S, oo, Eq
    >>> nan is S.NaN
    True
    >>> oo - oo
    nan
    >>> nan + 1
    nan
    >>> Eq(nan, nan)   # mathematical equality
    False
    >>> nan == nan     # structural equality
    True

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/NaN

    c         C  s   t  j |   S(   N(   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   D  s    c         C  s   d S(   Ns
   \text{NaN}(    (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  G  s    R   c         C  s   |  S(   N(    (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   J  s    c         C  s   |  S(   N(    (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   N  s    c         C  s   |  S(   N(    (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   R  s    c         C  s   |  S(   N(    (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   V  s    c         C  s   |  S(   N(    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   \  s    c         C  s   |  S(   N(    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   _  s    c         C  s   t  S(   N(   R   (   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   b  s    c         C  s   d d  l  j } | j S(   Ni(   R@  R:   R   (   R   RB  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRC  e  s    c         C  s   t  t |   j   S(   N(   R   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   i  s    c         C  s   | t  j k S(   N(   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   l  s    c         C  s   | t  j k	 S(   N(   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   p  s    c         C  s   t  j S(   N(   R   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_Eqs  s    N(*   R   R   R   R3   R   R4   RH  RG  R  t   is_transcendentalRq  R+   R9  RX   R   R  R   R   R   R   R   R  R   R   R   R   R   R   R   R   R   R   RC  R   R   R   R  R
   R   R   R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     sD   ,													RT  c           B  s   e  Z d  Z e Z e Z e Z e Z e Z	 e Z
 g  Z d   Z d   Z e d    Z d   Z d   Z e d    Z d   Z d   Z RS(	   s  Complex infinity.

    In complex analysis the symbol `\tilde\infty`, called "complex
    infinity", represents a quantity with infinite magnitude, but
    undetermined complex phase.

    ComplexInfinity is a singleton, and can be accessed by
    ``S.ComplexInfinity``, or can be imported as ``zoo``.

    Examples
    ========

    >>> from sympy import zoo, oo
    >>> zoo + 42
    zoo
    >>> 42/zoo
    0
    >>> zoo + zoo
    nan
    >>> zoo*zoo
    zoo

    See Also
    ========

    Infinity
    c         C  s   t  j |   S(   N(   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   d S(   Ns   \tilde{\infty}(    (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c           C  s   t  j S(   N(   R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR1    s    c         C  s   |  S(   N(    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   |  S(   N(    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c           C  s   t  j S(   N(   R   RT  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  sY   | t  j k r t  j St | t  rU | t  j k r; t  j S| j rK t  j St  j Sn  d  S(   N(   R   RT  R   R0   R1   R   R   (   R   RK   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR)    s    	c         C  s   d d  l  j } | j j   S(   Ni(   R@  R:   t   UnsignedInfinityRingR  (   R   RB  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRC    s    (   R   R   R   R3   R   R  R   R+   R  t
   is_complexRH  R   R   R  R  R1  R   R   R  R)  RC  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRT    s    					t   NumberSymbolc           B  s   e  Z e Z e Z e Z g  Z e Z d    Z d   Z	 d   Z
 d   Z d   Z d   Z d   Z d   Z d   Z d	   Z RS(
   c         C  s   t  j |   S(   N(   R   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   d S(   s    Return an interval with number_cls endpoints
        that contains the value of NumberSymbol.
        If not implemented, then return None.
        N(    (   R   t
   number_cls(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   approximation  R   c         C  s   t  j |  j |  |  S(   N(   R5   R   R   (   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  sO   y t  |  } Wn t k
 r$ t SX|  | k r5 t S| j rK |  j rK t St S(   N(   R   R   R   R3   R)   R5  R+   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   |  | k S(   N(    (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s#   |  | k r t  j St j |  |  S(   N(   R   R   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s#   |  | k r t  j St j |  |  S(   N(   R   R   R
   R   (   R   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s
   t   d  S(   N(   R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR2    s    c         C  s
   |  j    S(   N(   R2  (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRK    s    c         C  s   t  t |   j   S(   N(   R   R  R   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    (   R   R   R3   R   RX   R   R   R4  R   R  R   R   R   R   R   R2  RK  R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s   									t   Exp1c           B  s   e  Z d  Z e Z e Z e Z e Z e Z	 e Z
 e Z g  Z d   Z e d    Z d   Z d   Z d   Z d   Z d   Z d   Z d	   Z RS(
   s  The `e` constant.

    The transcendental number `e = 2.718281828\ldots` is the base of the
    natural logarithm and of the exponential function, `e = \exp(1)`.
    Sometimes called Euler's number or Napier's constant.

    Exp1 is a singleton, and can be accessed by ``S.Exp1``,
    or can be imported as ``E``.

    Examples
    ========

    >>> from sympy import exp, log, E
    >>> E is exp(1)
    True
    >>> log(E)
    1

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/E_%28mathematical_constant%29
    c         C  s   d S(   NRd   (    (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  ,  s    c           C  s   t  j S(   N(   R   R  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR1  /  s    c         C  s   d S(   Ni   (    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR2  3  s    c         C  s
   t  |  S(   N(   R   (   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   6  s    c         C  s;   t  | t  r% t d  t d  f St  | t  r7 n  d  S(   Ni   i   (   t
   issubclassR\   R`   (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   approximation_interval9  s    c         C  s   d d l  m } | |  S(   Ni(   t   exp(   R   R  (   R   RK   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR)  ?  s    c         K  s<   d d l  m } t j } | | t j d  | | |  S(   Ni(   t   sini   (   R   R  R   R,  t   Pi(   R   R   R  t   I(    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_rewrite_as_sinC  s    	c         K  s<   d d l  m } t j } | |  | | | t j d  S(   Ni(   t   cosi   (   R   R  R   R,  R  (   R   R   R  R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_rewrite_as_cosH  s    	c         C  s   d d  l  j } | j S(   Ni(   R@  R:   Rd   (   R   RB  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRC  M  s    (   R   R   R   R3   RH  R   R+   R   R5  R   R  R  R   R  R  R1  R2  R   R  R)  R  R  RC  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  	  s$   							R  c           B  sz   e  Z d  Z e Z e Z e Z e Z e Z	 e Z
 e Z g  Z d   Z e d    Z d   Z d   Z d   Z d   Z RS(   s  The `\pi` constant.

    The transcendental number `\pi = 3.141592654\ldots` represents the ratio
    of a circle's circumference to its diameter, the area of the unit circle,
    the half-period of trigonometric functions, and many other things
    in mathematics.

    Pi is a singleton, and can be accessed by ``S.Pi``, or can
    be imported as ``pi``.

    Examples
    ========

    >>> from sympy import S, pi, oo, sin, exp, integrate, Symbol
    >>> S.Pi
    pi
    >>> pi > 3
    True
    >>> pi.is_irrational
    True
    >>> x = Symbol('x')
    >>> sin(x + 2*pi)
    sin(x)
    >>> integrate(exp(-x**2), (x, -oo, oo))
    sqrt(pi)

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Pi
    c         C  s   d S(   Ns   \pi(    (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  ~  s    c           C  s   t  j S(   N(   R   R  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR1    s    c         C  s   d S(   Ni   (    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR2    s    c         C  s
   t  |  S(   N(   R   (   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  sT   t  | t  r% t d  t d  f St  | t  rP t d d  t d d  f Sd  S(   Ni   i   i   iG   i   i   (   R  R\   R`   (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  s   d d  l  j } | j S(   Ni(   R@  R:   t   pi(   R   RB  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRC    s    (   R   R   R   R3   RH  R   R+   R   R5  R   R  R  R   R  R  R1  R2  R   R  RC  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  S  s   				t   GoldenRatioc           B  sz   e  Z d  Z e Z e Z e Z e Z e Z	 e Z
 e Z g  Z d   Z d   Z d   Z d   Z d   Z d   Z e Z RS(   s[  The golden ratio, `\phi`.

    `\phi = \frac{1 + \sqrt{5}}{2}` is algebraic number.  Two quantities
    are in the golden ratio if their ratio is the same as the ratio of
    their sum to the larger of the two quantities, i.e. their maximum.

    GoldenRatio is a singleton, and can be accessed by ``S.GoldenRatio``.

    Examples
    ========

    >>> from sympy import S
    >>> S.GoldenRatio > 1
    True
    >>> S.GoldenRatio.expand(func=True)
    1/2 + sqrt(5)/2
    >>> S.GoldenRatio.is_irrational
    True

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Golden_ratio
    c         C  s   d S(   Ns   \phi(    (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  s   d S(   Ni   (    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR2    s    c         C  s.   t  j t | d  | d  } t | |  S(   Ni
   (   R   t   from_man_expR   RN   (   R   RH   RM   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    !c         K  s(   d d l  m } t j t j | d  S(   Ni(   t   sqrti   (   R   R  R   RU  (   R   t   hintsR  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _eval_expand_func  s    c         C  s8   t  | t  r" t j t d  f St  | t  r4 n  d  S(   Ni   (   R  R\   R   R   R`   (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  s   d d  l  j } | j S(   Ni(   R@  R:   t   golden_ratio(   R   RB  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRC    s    (   R   R   R   R3   RH  R   R+   R   R5  R   R  R  R   R  R2  R   R  R  RC  t   _eval_rewrite_as_sqrt(    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    						t   TribonacciConstantc           B  sq   e  Z d  Z e Z e Z e Z e Z e Z	 e Z
 e Z g  Z d   Z d   Z d   Z d   Z d   Z e Z RS(   s  The tribonacci constant.

    The tribonacci numbers are like the Fibonacci numbers, but instead
    of starting with two predetermined terms, the sequence starts with
    three predetermined terms and each term afterwards is the sum of the
    preceding three terms.

    The tribonacci constant is the ratio toward which adjacent tribonacci
    numbers tend. It is a root of the polynomial `x^3 - x^2 - x - 1 = 0`,
    and also satisfies the equation `x + x^{-3} = 2`.

    TribonacciConstant is a singleton, and can be accessed
    by ``S.TribonacciConstant``.

    Examples
    ========

    >>> from sympy import S
    >>> S.TribonacciConstant > 1
    True
    >>> S.TribonacciConstant.expand(func=True)
    1/3 + (19 - 3*sqrt(33))**(1/3)/3 + (3*sqrt(33) + 19)**(1/3)/3
    >>> S.TribonacciConstant.is_irrational
    True
    >>> S.TribonacciConstant.n(20)
    1.8392867552141611326

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Generalizations_of_Fibonacci_numbers#Tribonacci_numbers
    c         C  s   d S(   Ns   \text{TribonacciConstant}(    (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  s   d S(   Ni   (    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR2    s    c         C  s/   |  j  d t  j | d  } t | d | S(   Nt   functioni   R
  (   R  R3   R   R5   (   R   RH   RM   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   	  s    c         K  sN   d d l  m } m } d | d d | d   | d d | d   d S(   Ni(   R  t   cbrti   i   i   i!   (   R   R  R  (   R   R  R  R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  s8   t  | t  r" t j t d  f St  | t  r4 n  d  S(   Ni   (   R  R\   R   R   R`   (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    (   R   R   R   R3   RH  R   R+   R   R5  R   R  R  R   R  R2  R   R  R  R  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    					t
   EulerGammac           B  s_   e  Z d  Z e Z e Z e Z d Z	 e Z
 g  Z d   Z d   Z d   Z d   Z d   Z RS(   s  The Euler-Mascheroni constant.

    `\gamma = 0.5772157\ldots` (also called Euler's constant) is a mathematical
    constant recurring in analysis and number theory.  It is defined as the
    limiting difference between the harmonic series and the
    natural logarithm:

    .. math:: \gamma = \lim\limits_{n\to\infty}
              \left(\sum\limits_{k=1}^n\frac{1}{k} - \ln n\right)

    EulerGamma is a singleton, and can be accessed by ``S.EulerGamma``.

    Examples
    ========

    >>> from sympy import S
    >>> S.EulerGamma.is_irrational
    >>> S.EulerGamma > 0
    True
    >>> S.EulerGamma > 1
    False

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Euler%E2%80%93Mascheroni_constant
    c         C  s   d S(   Ns   \gamma(    (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  ?  s    c         C  s   d S(   Ni    (    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR2  B  s    c         C  s:   t  j j | d  } t  j | | d  } t | |  S(   Ni
   (   R   t   libhypert   euler_fixedR  RN   (   R   RH   R  RM   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   E  s    c         C  sH   t  | t  r t j t j f St  | t  rD t j t d d  f Sd  S(   Ni   i   (   R  R\   R   R   R   R`   RU  (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  K  s    c         C  s   d d  l  j } | j S(   Ni(   R@  R:   t   euler_gamma(   R   RB  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRC  Q  s    N(   R   R   R   R3   RH  R   R+   R   R4   R5  R   R   R  R2  R   R  RC  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s   				t   Catalanc           B  sV   e  Z d  Z e Z e Z e Z d Z	 e Z
 g  Z d   Z d   Z d   Z d   Z RS(   s  Catalan's constant.

    `K = 0.91596559\ldots` is given by the infinite series

    .. math:: K = \sum_{k=0}^{\infty} \frac{(-1)^k}{(2k+1)^2}

    Catalan is a singleton, and can be accessed by ``S.Catalan``.

    Examples
    ========

    >>> from sympy import S
    >>> S.Catalan.is_irrational
    >>> S.Catalan > 0
    True
    >>> S.Catalan > 1
    False

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Catalan%27s_constant
    c         C  s   d S(   Ni    (    (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR2  w  s    c         C  s7   t  j | d  } t  j | | d  } t | |  S(   Ni
   (   R   t   catalan_fixedR  RN   (   R   RH   R  RM   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR   z  s    c         C  sH   t  | t  r t j t j f St  | t  rD t d d  t j f Sd  S(   Ni	   i
   (   R  R\   R   R   R   R`   (   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c         C  s   d d  l  j } | j S(   Ni(   R@  R:   t   catalan(   R   RB  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRC    s    N(   R   R   R   R3   RH  R   R+   R   R4   R5  R   R   R2  R   R  RC  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR  V  s   			R,  c           B  s   e  Z d  Z e Z e Z e Z e Z e Z e	 Z
 g  Z d   Z e d    Z d   Z d   Z d   Z d   Z d   Z e d    Z RS(	   sT  The imaginary unit, `i = \sqrt{-1}`.

    I is a singleton, and can be accessed by ``S.I``, or can be
    imported as ``I``.

    Examples
    ========

    >>> from sympy import I, sqrt
    >>> sqrt(-1)
    I
    >>> I*I
    -1
    >>> 1/I
    -I

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Imaginary_unit
    c         C  s   | j  d S(   Nt   imaginary_unit_latex(   t	   _settings(   R   R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR    s    c           C  s   t  j S(   N(   R   R   (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR1    s    c         C  s   |  S(   N(    (   R   RH   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s   t  j S(   N(   R   R,  (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  st   t  | t  rp t  | t  rp | j d } | d k r> t j S| d k rQ t j S| d k re t j St j Sn  d S(   s  
        b is I = sqrt(-1)
        e is symbolic object but not equal to 0, 1

        I**r -> (-1)**(r/2) -> exp(r/2*Pi*I) -> sin(Pi*r/2) + cos(Pi*r/2)*I, r is decimal
        I**0 mod 4 -> 1
        I**1 mod 4 -> I
        I**2 mod 4 -> -1
        I**3 mod 4 -> -I
        i   i    i   i   N(   R0   R1   R\   RT   R   R   R,  (   R   RK   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR)    s    c         C  s   t  j t  j f S(   N(   R   R   RU  (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   as_base_exp  s    c         C  s   d d  l  j } | j S(   Ni(   R@  R:   R  (   R   RB  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyRC    s    c         C  s   t  d  j t  d  j f S(   Ni    i   (   R5   RR   (   R   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   _mpc_  s    (   R   R   R   R3   R   t   is_imaginaryRX   R   R  R+   R  R   R  R  R1  R   R   R)  R  RC  RI  R  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR,    s    						c         C  s   t  |  j |  j d  S(   Ni   (   R`   RR  RS  (   Rj   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   sympify_fractions  s    c         C  s   t  t |    S(   N(   R\   R   (   Ry   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   sympify_mpz  s    c         C  s   t  t |  j  t |  j   S(   N(   R`   R   RR  RS  (   Ry   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   sympify_mpq  s    c         C  s   t  j |  |  j j  S(   N(   R
   t   _from_mpmathR   RH   (   Ry   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   sympify_mpmath  s    c         C  s   |  j  \ } } t | | d  S(   Ni   (   t   _mpq_R`   (   Ry   RT   RV   (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyR     s    c         C  s6   t  t t |  j |  j f   \ } } | t j | S(   N(   R  t   mapR   t   realt   imagR   R,  (   R>   R  R  (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   sympify_complex  s    '(   R(  R}  (   t   Mul(   Rx  (   t
   __future__R    R   R   RP  t   mathR.  Rh   R   R   R   R   R   R   R   t	   singletonR   R	   Rb  R
   R   t
   decoratorsR   t   cacheR   R   t   logicR   t   sympy.core.compatibilityR   R   R   R   R   R   R   R   t   sympy.core.cacheR   RS   t   mpmath.libmpt   libmpR   RD   R   R   R   R   R   t   mpmath.ctx_mpR   t   mpmath.libmp.libmpfR   R  R    R  R!   R   R"   RC   R#   RE   R$   t   sympy.utilities.miscR%   R&   R&  R'   t   sympy.utilities.exceptionsR(   t   round_nearestRF   t   logt   _LOG2R4   RB   RN   R+   RP   RQ   RW   Rf   Rl   Rq   Rr   Rn   t   ImportErrorRt   Ru   R   R   R   R1   R5   R   R   RA  R`   R\   t   i_typeR  R  R  R   R   R   RU  R   R  R   R   R  RT  t   zooR  R  t   ER  R  R  R  R  R  R,  R  R  RQ  t   gmpy2t   gmpyR  R   R.   t   mpzt   mpqR  R   R  t   complext   powerR(  R}  t   mulR  t   identityt   addRx  (    (    (    s1   lib/python2.7/site-packages/sympy/core/numbers.pyt   <module>   s   (:".	(								+	A   U  	 y{C/=	v	L	:G	A	@C<5P				 	
		
