
\c           @  s  d  d l  m Z m Z d  d l m Z d d l m Z d d l m	 Z	 d d l
 m Z d d l m Z d d l m Z d d	 l 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 d  d l m  Z! d  d l m" Z# d   Z$ d   Z% d   Z& d e f d     YZ' d d l( m) Z) d d l* m+ Z+ d d l, m- Z- m. Z. d d l/ m0 Z0 m1 Z1 m2 Z2 d S(   i(   t   print_functiont   division(   t   logi   (   t   _sympify(   t   cacheit(   t   S(   t   Expr(   t   PrecisionExhausted(   t   _coeff_isnegt   expand_complext   expand_multinomialt
   expand_mul(   t
   fuzzy_boolt	   fuzzy_not(   t   as_intt   range(   t   global_evaluate(   t   sift(   t   sqrtrem(   t   sqrtc         C  s3   |  d k  r t  t |    St t  |   d  d S(   s9   Return the largest integer less than or equal to sqrt(n).l         ,WV8i   i    (   t   intt   _sqrtt   integer_nthroot(   t   n(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   isqrt   s    c   	      C  s.  t  |   t  |  }  } |  d k  r4 t d   n  | d k  rO t d   n  |  d k re |  t f S| d k r{ |  t f S| d k r t |   \ } } t |  | f S| |  k r d t f Sy t |  d | d  } Wno t k
 rMt |  d  | } | d k r:t | d  } t d	 | | d  | >} qNt d	 |  } n X| d k rd | } } xV | | d } | | d | |  | | } } t | |  d k  rjPqjqjWn | } | | } x$ | |  k  r| d 7} | | } qWx$ | |  k r| d 8} | | } qWt |  | |  k f S(   s@  
    Return a tuple containing x = floor(y**(1/n))
    and a boolean indicating whether the result is exact (that is,
    whether x**n == y).

    Examples
    ========

    >>> from sympy import integer_nthroot
    >>> integer_nthroot(16, 2)
    (4, True)
    >>> integer_nthroot(26, 2)
    (5, False)

    To simply determine if a number is a perfect square, the is_square
    function should be used:

    >>> from sympy.ntheory.primetest import is_square
    >>> is_square(26)
    False

    See Also
    ========
    sympy.ntheory.primetest.is_square
    integer_log
    i    s   y must be nonnegativei   s   n must be positivei   g      ?g      ?i5   g       @i2   i(   i    i   I       (	   R   t
   ValueErrort   Truet   mpmath_sqrtremR   t   Falset   OverflowErrort   _logt   abs(	   t   yR   t   xt   remt   guesst   expt   shiftt   xprevt   t(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyR      sL    


!


c   	      C  s  | d k r t  d   n  |  d k r6 t  d   n  | d k r~ t |  } t |   }  |  j   d } | | | |  k f S| d k  r t |  d k r |  n |  |  \ } } | | o t |  d k  r | d n | d  f St |  } t |   }  d } } x} |  | k r| } d } x^ |  | k rt |  |  \ }  } | pN| } | | 7} |  | k r$| | 9} | d 9} q$q$Wq	W| | d k o|  d k f S(   s	  Returns (e, bool) where e is the largest nonnegative integer
    such that |y| >= |x**e| and bool is True if y == x**e

    Examples
    ========

    >>> from sympy import integer_log
    >>> integer_log(125, 5)
    (3, True)
    >>> integer_log(17, 9)
    (1, False)
    >>> integer_log(4, -2)
    (2, True)
    >>> integer_log(-125,-5)
    (3, True)

    See Also
    ========
    integer_nthroot
    sympy.ntheory.primetest.is_square
    sympy.ntheory.factor_.multiplicity
    sympy.ntheory.factor_.perfect_power
    i   s   x cannot take value as 1i    s   y cannot take value as 0ii   (   ii   (   R   R   R   t
   bit_lengtht   integer_logt   boolt   divmod(	   R    R!   t   eR   t   bt   rt   dt   mR"   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyR)   g   s4    )1


t   Powc           B  s  e  Z d  Z e Z d g Z e d0 d   Z e	 d    Z
 e	 d    Z e d    Z d   Z d   Z d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z 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& d   Z' d    Z( d!   Z) d"   Z* d#   Z+ d$   Z, d%   Z- d&   Z. d'   Z/ i  e0 d(  Z1 d)   Z2 d*   Z3 e d+    Z4 d,   Z5 e0 e d-  Z6 d.   Z7 d/   Z8 RS(1   sD  
    Defines the expression x**y as "x raised to a power y"

    Singleton definitions involving (0, 1, -1, oo, -oo, I, -I):

    +--------------+---------+-----------------------------------------------+
    | expr         | value   | reason                                        |
    +==============+=========+===============================================+
    | z**0         | 1       | Although arguments over 0**0 exist, see [2].  |
    +--------------+---------+-----------------------------------------------+
    | z**1         | z       |                                               |
    +--------------+---------+-----------------------------------------------+
    | (-oo)**(-1)  | 0       |                                               |
    +--------------+---------+-----------------------------------------------+
    | (-1)**-1     | -1      |                                               |
    +--------------+---------+-----------------------------------------------+
    | S.Zero**-1   | zoo     | This is not strictly true, as 0**-1 may be    |
    |              |         | undefined, but is convenient in some contexts |
    |              |         | where the base is assumed to be positive.     |
    +--------------+---------+-----------------------------------------------+
    | 1**-1        | 1       |                                               |
    +--------------+---------+-----------------------------------------------+
    | oo**-1       | 0       |                                               |
    +--------------+---------+-----------------------------------------------+
    | 0**oo        | 0       | Because for all complex numbers z near        |
    |              |         | 0, z**oo -> 0.                                |
    +--------------+---------+-----------------------------------------------+
    | 0**-oo       | zoo     | This is not strictly true, as 0**oo may be    |
    |              |         | oscillating between positive and negative     |
    |              |         | values or rotating in the complex plane.      |
    |              |         | It is convenient, however, when the base      |
    |              |         | is positive.                                  |
    +--------------+---------+-----------------------------------------------+
    | 1**oo        | nan     | Because there are various cases where         |
    | 1**-oo       |         | lim(x(t),t)=1, lim(y(t),t)=oo (or -oo),       |
    |              |         | but lim( x(t)**y(t), t) != 1.  See [3].       |
    +--------------+---------+-----------------------------------------------+
    | b**zoo       | nan     | Because b**z has no limit as z -> zoo         |
    +--------------+---------+-----------------------------------------------+
    | (-1)**oo     | nan     | Because of oscillations in the limit.         |
    | (-1)**(-oo)  |         |                                               |
    +--------------+---------+-----------------------------------------------+
    | oo**oo       | oo      |                                               |
    +--------------+---------+-----------------------------------------------+
    | oo**-oo      | 0       |                                               |
    +--------------+---------+-----------------------------------------------+
    | (-oo)**oo    | nan     |                                               |
    | (-oo)**-oo   |         |                                               |
    +--------------+---------+-----------------------------------------------+
    | oo**I        | nan     | oo**e could probably be best thought of as    |
    | (-oo)**I     |         | the limit of x**e for real x as x tends to    |
    |              |         | oo. If e is I, then the limit does not exist  |
    |              |         | and nan is used to indicate that.             |
    +--------------+---------+-----------------------------------------------+
    | oo**(1+I)    | zoo     | If the real part of e is positive, then the   |
    | (-oo)**(1+I) |         | limit of abs(x**e) is oo. So the limit value  |
    |              |         | is zoo.                                       |
    +--------------+---------+-----------------------------------------------+
    | oo**(-1+I)   | 0       | If the real part of e is negative, then the   |
    | -oo**(-1+I)  |         | limit is 0.                                   |
    +--------------+---------+-----------------------------------------------+

    Because symbolic computations are more flexible that floating point
    calculations and we prefer to never return an incorrect answer,
    we choose not to conform to all IEEE 754 conventions.  This helps
    us avoid extra test-case code in the calculation of limits.

    See Also
    ========

    sympy.core.numbers.Infinity
    sympy.core.numbers.NegativeInfinity
    sympy.core.numbers.NaN

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Exponentiation
    .. [2] https://en.wikipedia.org/wiki/Exponentiation#Zero_to_the_power_of_zero
    .. [3] https://en.wikipedia.org/wiki/Indeterminate_forms

    t   is_commutativec         C  s  | d  k r t d } n  d d l m } t |  } t |  } | r| t j k r] t j S| t j k rs t j	 S| t j	 k r | S| j
 s | j r | j
 s | j r | j r t |  r | j r | } q | j r t | |  Sn  t j | | f k r	t j S| t j	 k r5t |  j r.t j St j	 S| j rc| t j k	 rct | |  rcd d l m } m } m } m } m }	 m }
 |
 | d t j   \ } } | |  } t | |  r| j d | k rt j | | |  S| j  rc| |	 |   } | j! r`| r`| | |
 | d t  | t j" t j# k r`t j | | |  Sqcn  | j$ |  } | d  k	 r| Sn  t% j& |  | |  } |  j' |  } t | t  s| S| j( o| j( | _( | S(   Ni    i(   t	   exp_polar(   t   numert   denomR   t   signt   imt   factor_termsR6   ()   t   NoneR   t&   sympy.functions.elementary.exponentialR3   R   R   t   ComplexInfinityt   NaNt   Zerot   Onet	   is_Symbolt	   is_numbert
   is_integerR   t   is_event   is_oddR1   R   t   is_infinitet   is_Atomt   Exp1t
   isinstancet   sympyR4   R5   R   R6   R7   R8   R   t   as_coeff_Mult   argst   is_Addt	   is_Numbert   ImaginaryUnitt   Pit   _eval_powerR   t   __new__t    _exec_constructor_postprocessorsR2   (   t   clsR-   R,   t   evaluateR3   R4   R5   R   R6   R7   R8   t   ct   ext   dent   st   obj(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyRP      sX    $	
	)."	.c         C  s   |  j  d S(   Ni    (   t   _args(   t   self(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   base(  s    c         C  s   |  j  d S(   Ni   (   RY   (   RZ   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyR$   ,  s    c         C  s   d d |  j  f S(   Ni   i   (   t   __name__(   RR   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt	   class_key0  s    c         C  s   d d l  m } m } |  j   \ } } | | j |  |  r t |  r | | j |  |  rr t | |  S| | j |  |  r t | |  Sn  d  S(   Ni(   t   askt   Q(	   t   sympy.assumptions.askR^   R_   t   as_base_expt   integerR   t   evenR1   t   odd(   RZ   t   assumptionsR^   R_   R-   R,   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_refine4  s    $c         C  sw  d d l  m } m } m } m } m } m } m } m }	 |  j	   \ }
 } |
 t
 j k rg |
 | | Sd  } | j r d } n|
 j r d } n| j d  k	 rRd   } d   } | j r| d k r5| |  r~|
 j t k r t
 j | t |
 | |  S|
 j t k r2t |
 j   | |
  d |  Sq~nI | j r~|
 j rVt |
  }
 n  |
 j r~t | |
   t
 j }
 q~n  t |  d k  t k s| d k rd } qO|
 j rd } qO| |
  j rt |  d k  t k rd } qOt | |
  j  rt |  d k rd } qO| |  rO| d t
 j t
 j | | t
 j | | |
  d t
 j   } | j r| |	 |  |  d k r|	 |  } qd  } qOqRy | d t
 j t
 j | | t
 j | | | |
   d t
 j   } | j r.| |	 |  |  d k r.|	 |  } n d  } WqRt k
 rNd  } qRXn  | d  k	 rs| t |
 | |  Sd  S(   Ni(   t   Abst   argR$   t   floorR7   R   t   reR6   i   c         S  sK   t  |  d d  d k r t S|  j   \ } } | j rG | d k rG t Sd S(   sZ   Return True if the exponent has a literal 2 as the
                denominator, else None.t   qi   N(   t   getattrR9   R   t   as_numer_denomRA   (   R,   R   R/   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _halfJ  s
    c         S  s>   y& |  j  d d t } | j r% | SWn t k
 r9 n Xd S(   sX   Return ``e`` evaluated to a Number with 2 significant
                digits, else None.i   t   strictN(   t   evalfR   RL   R   (   R,   t   rv(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _n2R  s    	i   i    (    RH   Rg   Rh   R$   Ri   R7   R   Rj   R6   Ra   R   R<   R9   RA   t   is_polart   is_realt   is_negativeR   t   NegativeOneR1   R   t	   conjugateRB   R   t   is_imaginaryRM   t   is_nonnegativeR   t   is_zeroRN   t   HalfR   (   RZ   t   otherRg   Rh   R$   Ri   R7   R   Rj   R6   R-   R,   RW   Rn   Rr   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyRO   =  s`    :						
	'			$			'	'	)%2%
c         C  s  |  j  j r|  j  j r| j r; |  j | d k r; t j S|  j j r|  j  j r| j rt |  j  t |  j   t |  } } } | j   } | d k r | | k r | j   d | k r d d l	 m
 } | |  } t | | | | |  St | | |  Sqn  d  S(   Ni    iP   i   i(   t   totient(   R$   RA   t   is_positiveR[   R   R=   t
   is_IntegerR   R(   t   sympy.ntheoryR}   t   pow(   RZ   Rk   R-   R,   R0   t   mbR}   t   phi(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt	   _eval_Mod  s    !,.c         C  s&   |  j  j r" |  j  j r" |  j j Sd  S(   N(   R$   RA   R~   R[   RB   (   RZ   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_even  s    c         C  s;  d d l  m } |  j |  j k r5 |  j j r7t Sn|  j j rT |  j j r7t Sn |  j j r |  j j	 rp t S|  j j
 r7t Sn |  j j r |  j j r7|  j j Sn |  j j r |  j j
 r7t Snp |  j j r7|  j j r|  j d } | j r t S| j r| j t k rt Sn  |  j j r7| |  j  j Sn  d  S(   Ni(   R   i   (   RH   R   R[   R$   Ry   R   R~   Rt   Ru   RB   RC   R   Rz   t   is_nonpositiveRx   RA   (   RZ   R   R0   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_positive  s6    	c         C  s   |  j  j r/ |  j j r t S|  j j r t Sn |  j  j rN |  j j r t Sn| |  j  j	 rm |  j j r t Sn] |  j  j
 r |  j j
 r t Sn> |  j  j r |  j j r t Sn |  j  j r |  j j r t Sn  d  S(   N(   R[   Ru   R$   RC   R   RB   R   R~   Rt   Rz   Ry   R   (   RZ   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_negative  s(    c         C  s   |  j  j r/ |  j j r t S|  j j r t Snx |  j  j t k r |  j j rQ t S|  j j r d t	 |  j   j r} |  j j Sd t	 |  j   j
 r |  j j
 Sq n d  Sd  S(   Ni   (   R[   Rz   R$   R~   R   R   R   t	   is_finiteRD   R   Ru   R9   (   RZ   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_zero  s    
c         C  s   |  j  \ } } | j r7 | j t k r7 | j r7 t Sn  | j ru | j ru | t j k r\ t S| j sn | j ru t Sn  | j r | j	 r | j
 s | j r t | d j  r t | d j  r t Sn  | j r | j r |  j |  j    } | j Sd  S(   Ni   (   RJ   t   is_rationalRA   R   R~   R   Rv   R   Ry   Ru   R   R   Rz   RL   t   funcR   (   RZ   R-   R,   t   check(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_integer  s    	$&c         C  s  d d l  m } m } m } m } |  j j } | d  k rm |  j j | k ri |  j j	 d j
 ri |  j j
 Sd  S|  j j } | d  k r d  S| r | r |  j j r t S|  j j r |  j j r t Sq |  j j r t S|  j j r |  j j r t Sq n  | r|  j j rt |  j |  j  j S|  j j
 } |  j j
 } | r|  j j rl|  j j rYt S|  j j rt Sq| r| |  j  j
 rt S|  j j r|  j j   \ }	 }
 |	 r|	 j r| |  j |	 |  j |
 d t j Sq|  j t j t j f k r|  j d j t k rt Sqn  | r| r|  j t j k r=t S|  j j t j  }	 |	 r|	 | |  j  t j j } | d  k	 r| Sqn  | t k r| |  j  |  j t j } | j Sd  S(   Ni(   Rh   R$   R   t   Muli    RS   i   (   RH   Rh   R$   R   R   R[   Rt   R9   R   RJ   Rx   R~   R   Ry   RA   Ru   t   is_RationalR   R1   RB   RC   RK   t   as_coeff_AddR   R   RM   Rv   t   coeffRN   (   RZ   Rh   R$   R   R   t   real_bt   real_et   im_bt   im_eRT   t   at   okt   i(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_real  sf    "%

$

c         C  s!   t  d   |  j D  r t Sd  S(   Nc         s  s   |  ] } | j  Vq d  S(   N(   t
   is_complex(   t   .0R   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pys	   <genexpr>9  s    (   t   allRJ   R   (   RZ   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_complex8  s    c   	      C  sa  d d l  m } m } |  j j rQ |  j j rQ |  j j } | d  k	 rJ | Sd  Sn  |  j j r | |  j  j } | d  k	 r t	 Sn  |  j j
 r |  j j
 r |  j j r t	 S|  j j } | s | S|  j j r t	 Sd |  j j } | r |  j j S| Sn  |  j j
 t	 k rF| |  j  |  j t j } d | j } | d  k	 rF| Sn  |  j j r]d |  j Sd  S(   Ni(   Rh   R   i   i   (   RH   Rh   R   R[   Rx   R$   RA   RC   R9   R   Rt   R~   R   Ru   R   RN   (	   RZ   Rh   R   Rd   t   imlogt   ratt   halfR   t   isodd(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_imaginary<  s<    
c         C  s[   |  j  j rW |  j  j r" |  j j S|  j  j r> |  j j r> t S|  j t j k rW t Sn  d  S(   N(	   R$   RA   R~   R[   RC   Ry   R   R   Rv   (   RZ   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_oddb  s    
c         C  s   |  j  j r/ |  j j r t S|  j j r/ t Sn  |  j j } | d  k rK d  S|  j  j } | d  k rg d  S| r | r |  j  j	 s t
 |  j j  r t Sn  d  S(   N(   R$   Ru   R[   Rz   R   RD   R   R   R9   Ry   R   (   RZ   t   c1t   c2(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_finitek  s    c         C  s0   |  j  j r, |  j j r, |  j d j r, t Sd S(   sM   
        An integer raised to the n(>=2)-th power cannot be a prime.
        i   N(   R[   RA   R$   R~   R   (   RZ   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_prime{  s    (c         C  sh   |  j  j rd |  j j rd |  j  d j r8 |  j d j s` |  j  d j rd |  j j rd |  j j rd t Sd S(   sS   
        A power is composite if both base and exponent are greater than 1
        i   N(   R[   RA   R$   R~   Ru   RB   R   (   RZ   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_composite  s     (c         C  s
   |  j  j S(   N(   R[   Rs   (   RZ   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_polar  s    c           sb  d d l  m  m } m      f d   } | |  j k rT | |  j j | |  St | |  j  r |  j | j k r | |  j | j  } | j r t	 | |  Sn  t | |  j  r|  j | j k r|  j j
 t k rp|  j j   d t } | j j   d t } | | | |  \ } }	 }
 | r|  j | |	  } |
 d  k	 rit | t	 | j |
   } n  | Sq| j } g  } g  } | j   } x |  j j D] } | j | |  } | j   } | | | |  \ } }	 }
 | r| j | |	  |
 d  k	 r| j |
  qqn | j r.| j r.d  S| j |  qW| rt |   } | j | d k r{t	 |  j | d t n |  j  t |   Sn  t |   r^|  j j r^|  j j r^| j d j   d t } |  j | |  j  j   d t } | | | |  \ } }	 }
 | r^|  j | |	  } |
 d  k	 rWt | t	 | j |
   } n  | Sn  d  S(   Ni(   R$   R   t   Symbolc           s  |  \ } } | \ } } | | k r| j  r | | } y t | d t } t } WnG t k
 r t t j t d t | j    |  t    f  } n X| | d f St | t
  s | f } n  t d   | D  s t d d f Sy t t |  t |   \ } }	 | d k  rA|	 d k rA| d 7} |	 t |  8}	 n  |	 d k rVd }
 n t |	 |  }
 t | |
 f SWqt k
 rqXn  t d d f S(   s*  Return (bool, pow, remainder_pow) where, if bool is True, then the
            exponent of Pow `old` will combine with `pow` so the substitution
            is valid, otherwise bool will be False.

            For noncommutative objects, `pow` will be an integer, and a factor
            `Pow(old.base, remainder_pow)` needs to be included. If there is
            no such factor, None is returned. For commutative objects,
            remainder_pow is always None.

            cti are the coefficient and terms of an exponent of self or old
            In this _eval_subs routine a change like (b**(2*x)).subs(b**x, y)
            will give y**2 since (b**x)**2 == b**(2*x); if that equality does
            not hold then the substitution should not occur so `bool` will be
            False.

            Ro   RS   c         s  s   |  ] } | j  Vq d  S(   N(   RA   (   R   t   term(    (    s/   lib/python2.7/site-packages/sympy/core/power.pys	   <genexpr>  s    i    i   N(   R2   R   R   R   R   RG   R1   RO   Ra   R9   t   tupleR   R+   R   (   t   ct1t   ct2t   oldt   coeff1t   terms1t   coeff2t   terms2R   t   combinest	   remaindert   remainder_pow(   R   R$   (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _check  s:    	

	!
	t   as_Addi   RS   i    (   RH   R$   R   R   R[   t   _subsRG   R   RL   R1   RK   R   t   as_independentR9   R   t   as_coeff_mulRJ   t   appendR2   RA   t   AddRt   R~   (   RZ   R   t   newR   R   t   lR   R   R   R   R   t   resultt   oargt   new_lt   o_alR   t   newat   expo(    (   R   R$   s/   lib/python2.7/site-packages/sympy/core/power.pyt
   _eval_subs  s`    9$	$	4'c         C  sT   |  j  \ } } | j rJ | j d k rJ | j d k rJ t | j  | f S| | f S(   s  Return base and exp of self.

        If base is 1/Integer, then return Integer, -exp. If this extra
        processing is not needed, the base and exp properties will
        give the raw arguments

        Examples
        ========

        >>> from sympy import Pow, S
        >>> p = Pow(S.Half, 2, evaluate=False)
        >>> p.as_base_exp()
        (2, -2)
        >>> p.args
        (1/2, 2)

        i   (   RJ   R   t   pRk   t   Integer(   RZ   R-   R,   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyRa     s    'c         C  s   d d l  m } |  j j |  j j } } | rC | |  j  |  j S| r] |  j | |  j  S| t k r | t k r t |   } | |  k r | |  Sn  d  S(   Ni(   t   adjoint(   t$   sympy.functions.elementary.complexesR   R$   RA   R[   R~   R   R	   (   RZ   R   R   R   t   expanded(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_adjoint  s    c         C  s   d d l  m } |  j j |  j j } } | rC | |  j  |  j S| r] |  j | |  j  S| t k r | t k r t |   } | |  k r | |  Sn  |  j r |  Sd  S(   Ni(   Rw   (	   R   Rw   R$   RA   R[   R~   R   R	   Rt   (   RZ   RT   R   R   R   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_conjugate%  s    	c         C  s   d d l  m } |  j j |  j j } } | r= |  j |  j S| rW | |  j  |  j S| t k r | t k r t |   } | |  k r | |  Sn  d  S(   Ni(   t	   transpose(   R   R   R$   RA   R[   R   R   R	   (   RZ   R   R   R   R   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_transpose3  s    c         K  st   |  j  } |  j } | j rd | j rd g  } x- | j D]" } | j |  j |  j  |   q4 Wt |   S|  j | |  S(   s   a**(n + m) -> a**n*a**m(   R[   R$   RK   R2   RJ   R   R   R   (   RZ   t   hintsR-   R,   t   exprR!   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_expand_power_exp?  s    		 
c      	   K  s]  | j  d t  } |  j } |  j } | j s1 |  S| j d t  \ } } | r5g  | D]* } t | d  rz | j |   n | ^ qV } | j r| j	 r t
 | |   } n5 t
 g  | d d d  D] } | d ^ q |   } | r | t
 |   | 9} n  | S| s#|  j t
 |   | d t St
 |   g } n  t | d   d t \ }	 }
 d	   } t |
 |  } | t } |	 | d 7}	 | t } | t j } | rt j } t |  d
 } | d k rn | d k r|	 j |  n | d k r8| r%| j   } | t j k	 r5| j |  q5q| j t j  nR | rm| j   } | t j k	 r}| j |  q}n | j t j  |	 j |  ~ n  | s| j r| | |	 } | }	 n1| j st  t |  d k rft j } |	 r| d j r| | j d  9} n  t |  d r%| } n  x | D] } | j |  q,W| t j k	 r|	 j |  qnn | r|	 r| d j r| d t j k	 r|	 j t j  | j | d  q|	 j |  n |	 j |  ~ | } |	 | 7}	 t j } | r.| t
 g  | D] } |  j | | d t ^ q  9} n  |	 rY| |  j t
 |	   | d t 9} n  | S(   s   (a*b)**n -> a**n * b**nt   forcet   split_1t   _eval_expand_power_baseNiRS   c         S  s   |  j  t k S(   N(   Rt   R   (   R!   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   <lambda>l  t    t   binaryc         S  sF   |  t  j k r t  j S|  j } | r) t S| d  k rB t |  j  Sd  S(   N(   R   RM   Rs   R   R9   R   Ry   (   R!   t   polar(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   predn  s    	i   i    i   i   (   t   getR   R[   R$   t   is_Mult   args_cnct   hasattrR   R   R~   R   R   R   R   R9   R   RM   t   lenR   t   popR>   Rv   RA   t   AssertionErrorRL   t   extend(   RZ   R   R   R-   R,   t   cargst   ncR   Rq   R|   t
   maybe_realR   t   siftedt   nonnegt   negt   imagt   It   nonnt   oR   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyR   J  s    			4		5	

			
 
	8%c         K  sa  |  j  \ } } |  } | j r| j d k r| j r| j s t | j | j  } | s_ | S|  j | | |  g  } } |  j | |  } | j r | j	   } n  x( t
 j |  D] } | j | |  q Wt
 |   Sn  t |  } | j rg  g  }	 }
 x7 | j  D], } | j r)|	 j |  q
|
 j |  q
W|	 rt
 |
   } t
 |	   } | d k rt | | d t | | | St | | d d t } t | | d t | | | Sn  | j r| j   \ } } | j r| j r| j so| j s@|  j | j | j |  } | j | j | j | j } } q|  j | j |  } | j | j | } } n> | j s|  j | j |  } | | j | j } } n d } t |  t |  d d f \ } } } } xq | rJ| d @r| | | | | | | | } } | d 8} n  | | | | d | | } } | d } qWt j } | d k rl| | | St |  | | | | Sqn  |
 } d d l m } d d l m } | t |  |  } | | |  S| d k rt
 g  | j  D]  } | j  D] } | | ^ qq  S| | d j	   } | j ret
 g  | j  D]  } | j  D] } | | ^ qKq>  St
 g  | j  D] } | | ^ qr  Sn | j r| j d k  r| j rt | j  | j k rd |  j | |  j	   S| j rY| j rYt j t j } } x= | j  D]2 } | j r7| |  j | |  9} q| | 7} qW| |  j | |  S| Sd S(	   sA   (a + b + ..)**n -> a**n + n*a**(n-1)*b + .., n is nonzero integeri    i   t   deepi   i(   t   multinomial_coefficients(   t   basic_from_dictN(    RJ   R   R   RK   R   R   Rk   R   t   is_Powt   _eval_expand_multinomialR   t	   make_argsR   R   R2   t   is_OrderR
   R   R   R@   t   as_real_imagR   RM   RH   R   t   sympy.polys.polyutilsR   R   R   RL   R>   R=   (   RZ   R   R[   R$   R   R   t   radicalt   expanded_base_nR   t   order_termst   other_termsR-   t   fR   t   gR   t   kRT   R/   R   R   R   R   t   expansion_dictt   multiR   t   tail(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyR     s    !				 #			$	*	
%!	 4	!'!	c         K  s  d d l  m } m } m } m } m } d d l m } |  j j	 r#|  j }	 |  j
 j d |  \ } } | s{ |  t j f St d d t \ }
 } |	 d k r | j r | j r t |  j
 |	  } | |  k r | j   Sn  | |
 | |	  } n | d | d } | | | | } } | j rc| j rct | | t j |	  } | |  k rc| j   Sn  | |
 | |	  } g  | j   D] } | d d	 d s| ^ q} t g  | D]( \ \ } } } | |
 | | | ^ q  } g  | j   D]$ } | d d	 d
 d	 k r| ^ q} t g  | D]( \ \ } } } | |
 | | | ^ q%  } g  | j   D]$ } | d d	 d
 d k rc| ^ qc} t g  | D]( \ \ } } } | |
 | | | ^ q  } | j i | |
 6t j | | 6 | j i | |
 6| | 6 | j i | |
 6| | 6 f S|  j j r |  j
 j d |  \ } } | j r|  j t j k r| j r{|  t j f S| j rt j |  j
 |  j f Sn  |  j |  j | d  |  j | d  t j  } | | |  } |  j | |  j  | |  j } } | | |  | | |  f S| rtt | d <|  j | |  } | j d  | k r[d  S| |  | |  f Sn | |   | |   f Sd  S(   Ni(   t   atan2t   cosR7   Rj   t   sin(   t   polyR   s   a bRR   i    i   i   i   i   t   complext   ignore(    RH   R  R  R7   Rj   R  t   sympy.polys.polytoolsR  R$   R   R[   R   R   R=   t   symbolst   DummyRL   R
   RM   t   termsR   t   subsR   Rz   R{   Ry   R   R   R   t   expandR   R9   (   RZ   R   R   R  R  R7   Rj   R  R  R$   R   R-   R   t   magR   R.   t   aat   bbt   cct   re_partt   im_part1t   im_part3R'   t   rpt   tpR   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyR   :  s`    (	1;7;7;!:		1#
c         C  s[   d d l  m } |  j j |  } |  j j |  } |  | | |  j  | |  j |  j S(   Ni(   R   (   RH   R   R[   t   diffR$   (   RZ   RW   R   t   dbaset   dexp(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_derivative  s    c         C  s   |  j    \ } } | j |  } | j s< | j |  } n  | j r | j r | j t k r | j   | | j   j |  } | } |  j | |  j	   S|  j | |  S(   N(
   Ra   t   _evalfR   Ru   R@   Rt   R   Rw   R   R  (   RZ   t   precR[   R$   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_evalf  s    	!#c         C  sa   |  j  j |   r t S|  j j |   rY t |  j j |  oU |  j  j oU |  j  d k  St Sd  S(   Ni    (   R$   t   hasR   R[   R*   t   _eval_is_polynomialR   R   (   RZ   t   syms(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyR    s    c         C  s   |  j  |  j     } | j s% | j S| j   \ } } | j rM | j rM t S| j r | j r t | j  sw | j	 r{ t
 S| | k r t
 Sq | j r | j Sn  d  S(   N(   R   Ra   R   R   R   R   RA   R   Rz   Ry   R   t   is_irrational(   RZ   R   R-   R,   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_rational  s    				c         C  s   d   } |  j  j s$ | |  j   r( t S|  j j rZ |  j  j t k rP |  j j S|  j  j S|  j  j r |  j j r t |  j  j  r t | |  j    s |  j  j t k s |  j  j	 r |  j j Sn  d  S(   Nc         S  s(   y |  d j  SWn t k
 r# t SXd  S(   Ni   (   Rz   R   R   (   R   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _is_one  s    (
   R[   Rz   R   R$   R   t   is_algebraicR   R   RA   R   (   RZ   R"  (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_is_algebraic  s    	

c         C  sL   |  j  j |   r t S|  j j |   rD |  j j |  oC |  j  j St Sd  S(   N(   R$   R  R   R[   t   _eval_is_rational_functionR   R   (   RZ   R  (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyR%    s    
c         C  sL   |  j  j |   r t S|  j j |   rD |  j j |  oC |  j  j St Sd  S(   N(   R$   R  R   R[   t   _eval_is_algebraic_exprR   R   (   RZ   R  (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyR&    s    
c         K  s   d d l  m } m } m } m } | j sI | j |  sI | j |  rQ | | S| j t  r | | |  | d | j t  S| | t |   | | |  |  Sd  S(   Ni(   R$   R   R   Rh   RS   (	   RH   R$   R   R   Rh   Rz   R  R   R   (   RZ   R[   R   t   kwargsR$   R   R   Rh   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_rewrite_as_exp  s    "'#c         C  s  |  j  s |  t j f S|  j   \ } } | j   \ } } | j } | rd | j rd t |  } n  | j } | j py | s | } t j } n  | j	 } | r | | } } n% | d  k r | r | } t j } n  | r | | } } | } n  | j re| t j k r.| t j k	 r.| |  j | |  f S| t j k	 re| t j k re|  j | |  | f Sn  |  j | |  |  j | |  f S(   N(   R2   R   R>   Ra   Rm   Ru   R   RA   Rt   R   R9   RD   R   (   RZ   R[   R$   R   R/   t   neg_expt   int_expt   dnonpos(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyRm     s4    				
	c   	      C  sL  t  |  } | t j k rR | j   } |  j j t j |  } | d  k	 rR | Sn  t | t	  se d  S| j
   \ } } |  j
   \ } } | j r | j r | r | j r | j | | | |  S| j | d | |  S| j   } |  j j | |  } | d  k rd  S|  j j |  j | |  } | d  k rHt	 j |  | |  S| S(   Ni   (   R   R   R>   t   copyR$   t   matchesR=   R9   RG   R   Ra   R?   R   R   R[   t   xreplace(	   RZ   R   t	   repl_dictR   R/   R-   R,   t   sbt   se(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyR-  
  s,    	c   .        s  d d l  m } m } m } m } m } m }	 m }
 |  j \ } } | j	 r| d k r t
 |  j | j   d | d | |  d t S| t j k rr| } d } yT | j    } |	 |    j   } | r | j r | d | |  } n d } Wn t k
 rn X| | d    } } xA | j re| d 7} | j   d | d | } | j    } q%Wt | | |  } | j rd | | | |   |    S| j    \ } } | j r| d k rnn | j r| d k r| j   } nJ | d k r6| j   } | d k r*d | |    St    n	 t    | d k  rat j t |  } n  y8 |	 d |    j   } | r| d k  rn d } Wn t k
 rd } n Xd | g } xy t d | | | d | |   D]R } | d | } | j r| j d t  } n t | d t } | j  |  qW| j  |   |     |
 t! |   d t" d	 d
 S| | d    } } x7 | j r| | j   d | d | } | d 7} qWd | |  k r|  Sd | j   d | d | Sn  | j# t$  r.| | | |   j   d | d | S| } x" | j rX| j j rX| j% } q7W|   k ri|  S  f d   } |   |    } | |  \ } } | j&   d  } | r'| t j k s| j# t$  r'| t j k r| d }  |  j' rt j( S|  j) rt j* St+ d |    n  | | S| t j* k s?| j, r>| t k	 rS| | S| j sot+ d |   n  | | } | j- r| j' r| j    }! y1 |	 |!    j   } | | | | d  } Wqt k
 rqXn  | j   d | d | }" |" j.   } | j/ rp| }" | j    }! |  j |! |  |  j |" |! j0   |  j1   d | d | j0   | S|" j/ rd d l  m } t2 d  }# g  }$ x7 |" j D], }% |% j r|# |% j3 }% n  |$ j  |%  qWt! |$   }" |" | j4    j5 |# | d     }& |& | 7}& |& S|" | }& | |" k r:|& | 7}& n  |& S| | | }' | | d }( | |(    }) |) t j* k s|' t j* k rt" } nZ |) j3 j r| |' j3    |    }* n | |' j3  | |) j3  }* | |*  \ } } | rd |( }+ np g  } d  }, xU t | d  D]C }- |  j7 |- |( |,  }, |, j1   d | d | }, | j  |,  qWt! |   }+ t |+ | |  | S(   Ni(   t   ceilingt   collectR$   R   t   Ot   Ordert   powsimpi    R   t   logxR   i   i   t   combineR$   c           s   |  j    d  } | j } | s y t |  } Wn? t k
 rr y t | j    d } Wqs t k
 rn qs Xn Xt |  } n  | | f S(   sk   return the integer value (if possible) of e and a
            flag indicating whether it is bounded or not.i    i   (   t   limitRD   R   t	   TypeErrorRp   R   (   R,   R   t   infinite(   R!   (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   e2int  s    	s   cannot determine sign of %ss'   expecting numerical exponent but got %s(   R4  RT   (8   RH   R2  R3  R$   R   R4  R5  R6  RJ   R   R
   R   t   _eval_nseriesR   R   Rv   t   as_leading_termt   getnRL   t   NotImplementedErrorR   R   t   leadtermR   R@   Rp   t   simplifyR>   R   R   R   R   R   R   R   R  R   R[   R9  R~   t   InfinityRu   R=   R   RD   Rt   t   removeORK   R  t   nseriesR	  R   t   seriesR  R9   t   _taylor_term(.   RZ   R!   R   R7  R2  R3  R$   R   R4  R5  R6  R-   R,   t   nuset   cft   ordt   b_origt	   prefactort   restR   R   t   dnR
  R0   t   new_termt   denominatort   bxR<  t   ordert   eiR;  t   b0t   residt   ltt   bsRT   t   resRh   Rq   t   o2t   zR   t   e2R.   R   R   (    (   R!   s/   lib/python2.7/site-packages/sympy/core/power.pyR=  +  s   4	

	!	

,		  )$
			
	+		(

	 c         C  sj   d d l  m } m } |  j j |  sG |  j |  j j |  |  j  S| |  j | |  j   j |  S(   Ni(   R$   R   (   RH   R$   R   R  R   R[   R>  (   RZ   R!   R$   R   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_as_leading_term  s    c         G  s0   d d l  m } | |  j |  |  j | |  S(   Ni(   t   binomial(   RH   R]  R$   R   (   RZ   R   R!   t   previous_termsR]  (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyRG    s    c         C  s"   |  j  d j   |  j  d j   S(   Ni    i   (   RJ   t   _sage_(   RZ   (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyR_    s    c         C  s  |  j    \ } } t | j d | d |    } | j d | d |  \ } } | j r| j   \ } } | j r| | }	 |  j | |	  }
 t j } |
 j s t |	 j	 |	 j
  \ } } |  j | |  }
 n  |
 |  j | t | | | | |	 j
   f Sn  t | |  } | j r| j r| j d | d |  \ } } |  j | |  j   \ }
 } | j    \ } } | t j k s| | k r|
 |  j t | |  |  f Sn  t j |  j | |  f S(   s  Return the tuple (R, self/R) where R is the positive Rational
        extracted from self.

        Examples
        ========

        >>> from sympy import sqrt
        >>> sqrt(4 + 4*sqrt(2)).as_content_primitive()
        (2, sqrt(1 + sqrt(2)))
        >>> sqrt(3 + 3*sqrt(2)).as_content_primitive()
        (1, sqrt(3)*sqrt(1 + sqrt(2)))

        >>> from sympy import expand_power_base, powsimp, Mul
        >>> from sympy.abc import x, y

        >>> ((2*x + 2)**2).as_content_primitive()
        (4, (x + 1)**2)
        >>> (4**((1 + y)/2)).as_content_primitive()
        (2, 4**(y/2))
        >>> (3**((1 + y)/2)).as_content_primitive()
        (1, 3**((y + 1)/2))
        >>> (3**((5 + y)/2)).as_content_primitive()
        (9, 3**((y + 1)/2))
        >>> eq = 3**(2 + 2*x)
        >>> powsimp(eq) == eq
        True
        >>> eq.as_content_primitive()
        (9, 3**(2*x))
        >>> powsimp(Mul(*_))
        3**(2*x + 2)

        >>> eq = (2 + 2*x)**y
        >>> s = expand_power_base(eq); s.is_Mul, s
        (False, (2*x + 2)**y)
        >>> eq.as_content_primitive()
        (1, (2*(x + 1))**y)
        >>> s = expand_power_base(_[1]); s.is_Mul, s
        (True, 2**y*(x + 1)**y)

        See docstring of Expr.as_content_primitive for more examples.
        R   t   clear(   Ra   t   _keep_coefft   as_content_primitiveR   R   R   R   R=   R+   R   Rk   R   RI   R>   (   RZ   R   R`  R-   R,   t   cet   pet   hR'   t   cehRT   R.   t   icehR0   t   me(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyRb    s*    +		
		1"c   
      O  s   |  } | j  d t  r' | j   } n  | j   \ } } | j d  } | rq | | } | | k rq | j   Sn  | j |   } | j |   }	 |	 r | r t S| j d  } | t k r t Sn |	 d  k r d  S| j d  S(   NRB  i    (   R   R   RB  Ra   t   equalst   is_constantR   R9   (
   RZ   t   wrtt   flagsR   R-   R,   t   bzR   t   econt   bcon(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyRj  k  s(    
c         C  s\   |  j  \ } } | j |  rX | j |  rX | j | | |  } | | | d |  Sd  S(   Ni   (   RJ   R  R  (   RZ   R   t   stepR-   R,   t   new_e(    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   _eval_difference_delta  s    N(9   R\   t
   __module__t   __doc__R   R   t	   __slots__R   R9   RP   t   propertyR[   R$   t   classmethodR]   Rf   RO   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   Ra   R   R   R   R   R   R   R   R  R  R  R!  R$  R%  R&  R(  Rm   R   R-  R=  R\  RG  R_  Rb  Rj  Rr  (    (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyR1      sd   R	3			S							7		&								s						v	zI			
			
	
		#!			Q	(   R   (   R   (   R   Ra  (   R   R	  R  N(3   t
   __future__R    R   t   mathR   R   t   sympifyR   t   cacheR   t	   singletonR   R   R   Rp   R   t   functionR   R	   R
   R   t   logicR   R   t   compatibilityR   R   RS   R   t   sympy.utilities.iterablesR   t   mpmath.libmpR   R   R   R   R   R   R)   R1   t   addR   t   numbersR   t   mulR   Ra  t   symbolR   R	  R  (    (    (    s/   lib/python2.7/site-packages/sympy/core/power.pyt   <module>   s4   "		I	6     