
    MZd\-                      d dl mZ d dlmZ d dlmZmZ d dl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ 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mZmZ ddl m!Z! ddl"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/m0Z0 d dl1m2Z2 d dl3m4Z5 d Z6d Z7d Z8d Z9 G d de      Z: e2d      Z;e;jy                  e=e=fe:       ddl<m>Z> ddl?m@Z@ ddlAmBZBmCZC dd lDmEZEmFZFmGZG y!)"    )annotations)Callable)logsqrt)product   )_sympify)cacheit)S)Expr)PrecisionExhausted)expand_complexexpand_multinomial
expand_mul_mexpand	PoleError)
fuzzy_bool	fuzzy_not	fuzzy_andfuzzy_or)global_parameters)is_gtis_lt)
NumberKindUndefinedKind)HAS_GMPYgmpy)sift)sympy_deprecation_warning)as_int)
Dispatcher)sqrtremc                    | dk  rt        d      t        |       } | dk  r+t        t        |             }d| ||z  z
  cxk  r	d|z  k  r|S  t        | d      d   S )z9Return the largest integer less than or equal to sqrt(n).r   zn must be nonnegativel            )
ValueErrorint_sqrtinteger_nthroot)nss     2/usr/lib/python3/dist-packages/sympy/core/power.pyisqrtr,      sm    1u011AA 	aMAaC1Q3H  1a ##    c                @   t        |       t        |      }} | dk  rt        d      |dk  rt        d      t        rW|dk  rRt        dk\  rt        j                  | |      \  }}nt        j
                  | |      \  }}t        |      t        |      fS t        | |      S )a@  
    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
    r   zy must be nonnegativer   zn must be positivel            r$   )r    r%   r   r   irootrootbool_integer_nthroot_python)yr)   xts       r+   r(   r(   .   s    6 !9fQiqA1u0111u-..AI q=::a#DAq99Q?DAqay$q'!!"1a((r-   c                X   | dv r| dfS |dk(  r| dfS |dk(  rt        |       \  }}t        |      | fS || j                         k\  ry	 t        | d|z  z  dz         }|d
kD  r3d|}}	 ||dz
  z  }||dz
  |z  | |z  z   |z  }}t        ||z
        dk  rn.|}||z  }|| k  r|dz  }||z  }|| k  r|| kD  r|dz  }||z  }|| kD  rt        |      || k(  fS # t        $ rK t	        | d      |z  }|dkD  r&t        |dz
        }t        d	||z
  z  dz         |z  }nt        d	|z        }Y w xY w)N)r   r   Tr   r$   )r   Fg      ?g      ?5   g       @l           )mpmath_sqrtremr&   
bit_lengthOverflowError_logabs)	r3   r)   r4   remguessexpshiftxprevr5   s	            r+   r2   r2   Y   s   F{$wAv$wAv"31v3wALLN"A1IO$ u}uqAE
AAE19q!t+a/1E1u9~!	  	1A
a%	QqD a% a%	QqD a% q616>3  "1ajl8bMEcEk*Q./58ESME"s   C AD)(D)c                   |dk(  rt        d      | dk(  rt        d      |dv r3t        |      }t        |       } | j                         dz
  }|||z  | k(  fS |dk  r7t	        | dkD  r| n|  |       \  }}||xr t        | dk  r|dz  n|dz         fS t        |      }t        |       } dx}}| |k\  r>|}d}| |k\  r/t        | |      \  } }|xs |}||z  }| |kD  r
||z  }|dz  }| |k\  r/| |k\  r>||dk(  xr | dk(  fS )a   
    Returns ``(e, bool)`` where e is the largest nonnegative integer
    such that :math:`|y| \geq |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
    r   zx cannot take value as 1r   zy cannot take value as 0)r$   r$   )r%   r&   r    r:   integer_logr1   divmod)	r3   r4   er)   brdmr>   s	            r+   rE   rE      sH   2 	Av344Av344G|F1ILLNQ!Q$!)|1uA1A2r21!;a!eQUQU;;;q	Aq	AIA
q&1fAq\FAsSAFA1uQQ 1f q& a1far-   c                      e Zd ZU dZdZdZded<   ded<   ed=d       Zd>dZ	e
d?d	       Ze
d?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'd% Z(d@d&Z)d' Z*d( Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3dAd1Z4dBd2Z5dCd3Z6ed4        Z7 fd5Z8d6 Z9d7 Z:d8 Z;d9 Z<dDd:Z=d; Z>d< Z? xZ@S )EPowa%  
    Defines the expression x**y as "x raised to a power y"

    .. deprecated:: 1.7

       Using arguments that aren't subclasses of :class:`~.Expr` in core
       operators (:class:`~.Mul`, :class:`~.Add`, and :class:`~.Pow`) is
       deprecated. See :ref:`non-expr-args-deprecated` for details.

    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 than 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/Zero_to_the_power_of_zero
    .. [3] https://en.wikipedia.org/wiki/Indeterminate_forms

    Tis_commutativeztuple[Expr, Expr]args_argsc                h	   |t         j                  }t        |      }t        |      }ddlm} t        ||      st        ||      rt        d      ||fD ]9  }t        |t              rt        dt        |      j                  dddd	       ; |r|t        j                  u rt        j                  S |t        j                  u rt        |t        j                         rt        j                  S t        |t        j"                        r*t%        |t        j                         rt        j&                  S t%        |t        j"                        r:|j(                  rt        j                  S |j(                  d
u rt        j                  S |t        j&                  u rt        j                   S |t        j                   u r|S |dk(  r|st        j                  S |j*                  j                  dk(  rJ|t        j,                  k(  rddlm}  |t3        ||j4                        t3        ||j6                              S |j8                  r|j:                  s|j<                  r^|j>                  r|j@                  s|jB                  r:|jE                         r*|jF                  r| }n|jH                  rt3        | |       S t        j                  ||fv rt        j                  S |t        j                   u r5tK        |      jL                  rt        j                  S t        j                   S ddl'm(} |jR                  s	|t        j,                  urt        ||      sddl*m+} ddl'm,}	 ddl-m.}
  ||d
      j_                         \  }} |
|      \  }}t        ||	      r(|j`                  d   |k(  rt        j,                  ||z  z  S |jb                  rsddl2m3}m4}  | ||            }|jB                  rQ|rO| |	 ||d
             |t        jj                  z  t        jl                  z  z   k(  rt        j,                  ||z  z  S |jo                  |      }||S t        jp                  | ||      }| js                  |      }t        |t2              s|S |jt                  xr |jt                  |_:        |S )Nr   )
Relationalz Relational cannot be used in Powzf
    Using non-Expr arguments in Pow is deprecated (in this case, one of the
    arguments is of type zf).

    If you really did intend to construct a power with this base, use the **
    operator instead.z1.7znon-expr-args-deprecated   )deprecated_since_versionactive_deprecations_target
stacklevelFr8   AccumulationBoundsr   AccumBounds)	exp_polar)factor_termsr   )fraction)sign)r_   im);r   evaluater	   
relationalrS   
isinstance	TypeErrorr   r   type__name__r   ComplexInfinityNaNInfinityr   OneNegativeOner   Zero	is_finite	__class__Exp1!sympy.calculus.accumulationboundsrZ   rM   minmax	is_Symbol
is_integer
is_Integer	is_numberis_Mul	is_Numbercould_extract_minus_signis_evenis_oddr=   is_infinite&sympy.functions.elementary.exponentialr[   is_Atom	exprtoolsr\   r   sympy.simplify.radsimpr^   as_coeff_MulrP   is_Add$sympy.functions.elementary.complexesr_   r`   ImaginaryUnitPi_eval_power__new__ _exec_constructor_postprocessorsrO   )clsrH   rG   ra   rS   argrZ   r[   r\   r   r^   cexnumdenr_   r`   r*   objs                      r+   r   zPow.__new__  s   (11HQKQK 	+a$
1j(A>?? q6 	Cc4()s),,/ 0 .3/I 
	 A%%%uuAJJAEE?::%AMM*uQ66MAMM*{{ 000{{e+ uuAFF{uuaeeb(((%%)==;M&s1aee}c!QUUmDD ++!,,!,,;;188q{{44699AXXAJ;&uuAuuaeeq6%%55Luu MyyQaff_Z9=U7J?(7DDFEAr'|HC!#s+q0@ vv#.Q AK;;1 #\!%%@$@ AAaooDUVWVZVZDZ Z2[#$66AcE?2mmA&?Jll31%2237#s#J..C13C3C
r-   c                N    | j                   t        j                  k(  rddlm} |S y Nr   r]   )baser   ro   r}   r   )selfargindexr   s      r+   inversezPow.inverse}  s    99BJr-   c                     | j                   d   S Nr   rQ   r   s    r+   r   zPow.base      zz!}r-   c                     | j                   d   S Nr   r   r   s    r+   r@   zPow.exp  r   r-   c                r    | j                   j                  t        u r| j                  j                  S t        S N)r@   kindr   r   r   r   s    r+   r   zPow.kind  s&    88==J&99>>!  r-   c                     dd| j                   fS )N   r$   )rf   r   s    r+   	class_keyzPow.class_key  s    !S\\!!r-   c                $   ddl m}m} | j                         \  }} ||j	                  |      |      r]|j                         rL ||j                  |      |      rt        | |      S  ||j                  |      |      rt        | |       S y y y )Nr   )askQ)	sympy.assumptions.askr   r   as_base_expintegerry   evenrM   odd)r   assumptionsr   r   rH   rG   s         r+   _eval_refinezPow._eval_refine  s    0!1qyy|[)a.H.H.J166!9k*A2qz!QUU1X{+QB
{" , /K)r-   c                   | j                         \  }}|t        j                  u r||z  |z  S d }|j                  rd}nu|j                  rd}ne|j
                  Xddlm}m}m	}m
} ddlm}	m}
 ddlm} d }d }|j
                  r|dk(  rU ||      r|j                   d	u r$t        j"                  |z  t%        | ||z        z  S |j                   d
u r^t%        ||       S |j&                  rE|j
                  rt)        |      }|j*                  r"t)         ||            t        j,                  z  }t)        |      dk  d	k(  s|dk(  rd}nf|j.                  rd}nV ||      j.                  rt)        |      dk  d	k(  rd}n/ ||      r& |	dt        j0                  z  t        j,                  z  |z   |t        j2                  | ||      z  dt        j0                  z  z  z
        z        }|j
                  r | ||      |z
        dk(  r	 ||      }nd }n	  |	dt        j,                  z  t        j0                  z  |z   |t        j2                   || |
|      z        dz  t        j0                  z  z
        z        }|j
                  r | ||      |z
        dk(  r	 ||      }nd }||t%        |||z        z  S y # t4        $ r d }Y "w xY w)Nr   r   )r   r`   rer_   r@   r   )floorc                r    t        | dd      dk(  ry| j                         \  }}|j                  r|dk(  ryyy)zZReturn True if the exponent has a literal 2 as the
                denominator, else None.qNr$   T)getattras_numer_denomrt   )rG   r)   rJ   s      r+   _halfzPow._eval_power.<locals>._half  sA     1c4(A-'')1<<AF %+<r-   c                f    	 | j                  dd      }|j                  r|S y# t        $ r Y yw xY w)zXReturn ``e`` evaluated to a Number with 2 significant
                digits, else None.r$   TstrictN)evalfrx   r   )rG   rvs     r+   _n2zPow._eval_power.<locals>._n2  s<    40B||!	 $) s    $ 	00r8   TFr$   )r   r   rh   rt   is_polaris_extended_realr   r   r`   r   r_   r}   r@   r   #sympy.functions.elementary.integersr   is_negativerk   rM   rz   r=   is_imaginaryr   is_extended_nonnegativer   Halfr   )r   otherrH   rG   r*   r   r`   r   r_   r@   r   r   r   r   s                 r+   r   zPow._eval_power  s   !1:qD5= AZZA+NNGA  !! 7U|==D0#$==%#7QB%8H#HH]]e3#&q5&>1YY))F~~1Jq6FQJ4'16A..AU22A
t7KA5\AaddF1??2583q61QTT6!22:4 4 5A))c$q'A+.>!.C G 

Aaoo-add258affr!CF(|A~add'::;< =A ))c$q'A+.>!.C G  =SAeG_$$  * As    BK
 
KKc                   | j                   | j                  }}|j                  r|j                  r|j                  r||z  dk(  rt        j
                  S ddlm} |j                  r|j                  r|j                  rt        |      t        |      t        |      }}}|j                         }|dk  rH||k\  rC|j                         dz  |k\  r-t         ||            }	t        t        ||	||	z  z   |            S t        t        |||            S ddlm}
 t        |t               r6|j                  r*|j"                  r |
||      } |
t!        ||d      |      S t        |t               rb|j                  rU|j"                  rHt        |      j                         }|dk  r) ||      }	|	 |
||	      z   } |
t!        ||d      |      S y	y	y	y	y	y	)
aO  A dispatched function to compute `b^e \bmod q`, dispatched
        by ``Mod``.

        Notes
        =====

        Algorithms:

        1. For unevaluated integer power, use built-in ``pow`` function
        with 3 arguments, if powers are not too large wrt base.

        2. For very large powers, use totient reduction if $e \ge \log(m)$.
        Bound on m, is for safe factorization memory wise i.e. $m^{1/4}$.
        For pollard-rho to be faster than built-in pow $\log(e) > m^{1/4}$
        check is added.

        3. For any unevaluated power found in `b` or `e`, the step 2
        will be recursed down to the base and the exponent
        such that the $b \bmod q$ becomes the new base and
        $\phi(q) + e \bmod \phi(q)$ becomes the new exponent, and then
        the computation for the reduced expression can be done.
        r   )totientP   rT   r   )ModFra   N)r   r@   rt   is_positiver   rl   sympy.ntheory.factor_r   ru   r&   r:   Integerpowmodr   rc   rM   rv   )r   r   r   r@   r   rH   rG   rK   mbphir   r:   s               r+   	_eval_ModzPow._eval_Mod  s   0 IItxxc>>coo||qAvv53>>alld)SXs1va1\\^8RALLNA,=,Bgaj/C"3q##+q#9::s1a|,, $$T^^4|3tS591==#s#3== V..0
 #!!*CC-Cs4u=qAA $ <I#) .>r-   c                    | j                   j                  r-| j                   j                  r| j                  j                  S y y r   )r@   rt   r   r   rz   r   s    r+   _eval_is_evenzPow._eval_is_even+  s3    88488#7#799$$$ $8r-   c                P    t         j                  |       }|du r| j                  S |S NT)rM   _eval_is_extended_negativerm   )r   ext_negs     r+   _eval_is_negativezPow._eval_is_negative/  s(    006d?>>!r-   c                f   | j                   | j                  k(  r| j                   j                  ryy | j                   j                  r| j                  j                  ryy | j                   j
                  r/| j                  j                  ry| j                  j                  ryy | j                   j                  r-| j                  j                  r| j                  j                  S y | j                   j                  r| j                  j                  ryy | j                   j                  r| j                  j                  r7| j                  dz  }|j                  ry|j                  r|j                  du ry| j                  j                  r"ddlm}  || j                         j                  S y y )NTFrT   r   r]   )r   r@   r   r   is_realis_extended_negativerz   r{   is_zeror   is_extended_nonpositiver   rt   r}   r   )r   rK   r   s      r+   _eval_is_extended_positivezPow._eval_is_extended_positive5  s<   99 yy00 1YY""xx  YY++xxxx YYxx((xx''' )YY..xx YY##xx""HHqL99<<AII$6 xx$$F499~222 % $r-   c                   | j                   t        j                  u r-| j                  j                  s| j                  j
                  ry| j                  j                  rE| j                   j                  r| j                  j                  ry| j                   j                  ryy | j                  j                  r| j                   j
                  ryy | j                  j                  r| j                   j
                  ryy | j                  j                  r| j                   j                  ryy | j                  j                  r| j                   j                  ryy | j                  j
                  r| j                   j                  ryy y NFT)r@   r   r   r   
is_complexr   r   r{   rm   rz   is_extended_positiver   r   r   r   s    r+   r   zPow._eval_is_extended_negativeR  s   88qvvyy##tyy'A'A99))xx499#6#6xx  YY++xx(( )YYxx(( )YY..xx// 0YY..xx  YY''xx   (r-   c                   | j                   j                  r/| j                  j                  ry| j                  j                  ryy | j                   t
        j                  k(  r| j                  t
        j                  u S | j                   j                  du r| j                   j                  r| j                  j                  ry| j                  j                  r| j                   j                  S | j                  j                  ry| j                  j                  r| j                  j                  rqdt        | j                         z
  j                  r| j                  j                  S dt        | j                         z
  j                  r| j                  j                  S y y y | j                   j                  r| j                  j                  ryy y )NTFr   )r   r   r@   r   r   r   ro   NegativeInfinityrm   r   r|   is_nonnegativer   r=   r   r   s    r+   _eval_is_zerozPow._eval_is_zerok  sM   99xx,,11 2YY!&& 88q1111YY%'yy""txx'9'9%%yy,,,((%%$((*C*CDII&<<88888#dii.(>>88888 ? +D%
 YY  TXX%9%9 &: r-   c                   | j                   \  }}|j                  r|j                  du r|j                  ry|j                  r8|j                  r,|t        j
                  u ry|j                  s|j                  ry|j                  rU|j                  rI|j                  s|j                  r1t        |dz
  j                        rt        |dz   j                        ry|j                  r1|j                  r% | j                  | j                    }|j                  S |j                  r|j                  r|dz
  j                  ry|j                  r|j                  r|dz   j                  ryy y y )NFTr   )rP   is_rationalrt   r   r   rk   r   r   rm   r   r   rx   funcru   )r   rH   rG   checks       r+   _eval_is_integerzPow._eval_is_integer  s   yy1==||u$<<ALLAMM!1==<<AMMq{{all!a%)iQ.H;;1;;DIItyy)E###==Q]]A/B/B==Q]]A/B/B 0C]=r-   c                h
   | j                   t        j                  u rh| j                  j                  ry| j                  j
                  r;dt        j                  z  | j                  z  t        j                  z  j                  S ddl	m
}m} | j                   j                  }|| j                   j                  |k(  r6| j                   j                  j
                  r| j                  j
                  S | j                   j                  t        k(  r\| j                   j                   t        j                  u r6| j                   j                  j
                  r| j                  j
                  S y | j                  j                  }|y |r|r| j                   j                  ry| j                   j                  r| j                  j                  ry| j                  j                  r| j                   j                   ry| j                  j                  r| j                  j"                  ry| j                   j$                  r| j                  j&                  ry|rY| j                  j$                  rC| j                   j(                  du r+t        | j                   | j                         j                  S | j                   j
                  }| j                  j
                  }|r| j                  j                  r.| j                  j                  ry| j                  j*                  ry|r || j                         j
                  ry| j                  j,                  r]| j                  j/                         \  }}|r|j0                  r{t3        | j                   |z  | j                   |z  d      j                  S | j                   t        j                   t        j                  fv r| j                  dz  j                  du ry|r|r| j                   t        j4                  u ry| j                  j7                  t        j                        }|r| j                   j8                  rH|j8                  r<| j                   j:                  r&| j                   dz
  j:                  r|j:                  ry| || j                         z  t        j                  z  j                  }	|	|	S |du rR|rOddlm}
  |
| j                         | j                  z  t        j                  z  }|j@                  r|j                  S y y y )	NTr$   r   )r   r@   Fr   r   r   )!r   r   ro   r@   r   r   r   r   rz   r}   r   r   rM   r   r   rt   is_extended_nonzeror   r   is_Rationalr   r{   r   as_coeff_Addru   Mulrk   coeffr   
is_nonzeror   r   r   )r   r   r@   real_breal_eim_bim_er   aokr   is               r+   _eval_is_extended_realzPow._eval_is_extended_real  s   99xx((&&!//)$((21447@@@C++>yy~~$)C)Cxx,,,yy~~$166)AdiimmF`F`xx,,,**>fyy--22txx7W7W$$)F)F$$)@)@//88'' dhh33		8I8IU8Rtyy488),===yy%%xx$$xx""88##XX__ #dii.55xx,,.1		1diilUDDTDTU/AAHHQJ**e3 dyyAMM)q/A99((Q]]yy++Q0J0Jq||$DII&qtt+77>IU?v@DIItxx',A||||#   &?r-   c                   | j                   t        j                  k(  r5t        | j                  j
                  | j                  j                  g      S t        d | j                  D              r| j                         ryy y )Nc              3  4   K   | ]  }|j                     y wr   )r   ).0r   s     r+   	<genexpr>z'Pow._eval_is_complex.<locals>.<genexpr>  s     /q||/   T)
r   r   ro   r   r@   r   r   allrP   _eval_is_finiter   s    r+   _eval_is_complexzPow._eval_is_complex  s_    99TXX00$((2O2OPQQ/TYY//D4H4H4J 5K/r-   c                   | j                   j                  du ry| j                   j                  r1| j                  j                  r| j                  j
                  }||S y | j                   t        j                  k(  rLd| j                  z  t        j                  t        j                  z  z  }|j                  ry|j
                  ryy | j                  j                  r%ddlm}  || j                         j                  }|y| j                   j                  r| j                  j                  r{| j                   j                  ry| j                  j                  }|s|S | j                  j                  ryd| j                  z  j                  }|r| j                   j                   S |S | j                   j                  du rJddlm}  || j                         | j                  z  t        j                  z  }d|z  j
                  }	|	|	S y y )NFr$   Tr   r]   r   )r   rO   r   r@   rt   r{   r   ro   r   r   rz   r}   r   r   r   r   r   r   r   )
r   r   fr   imlograthalfr   r   isodds
             r+   _eval_is_imaginaryzPow._eval_is_imaginary  s   99##u,99!!xx""hhoo?J99DHHQ__ 45Ayyxx88  B		N//E 99%%$((*C*Cyy$$hh**J88&& dhhJ22D#yy444K99%%.@DIItxx',AqSLLE  !	 /r-   c                   | j                   j                  rw| j                   j                  r| j                  j                  S | j                   j
                  r| j                  j                  ry| j                  t        j                  u ryy y r   )r@   rt   r   r   r{   r   r   rk   r   s    r+   _eval_is_oddzPow._eval_is_odd  se    88xx##yy'''((TYY-=-=amm+ , r-   c                   | j                   j                  rD| j                  j                  ry| j                  j                  s| j                  j
                  ry| j                  j                  }|y | j                   j                  }|y |r:|r7| j                   j                  st        | j                  j                        ryy y y r   )	r@   r   r   r   r|   r   rm   r   r   )r   c1c2s      r+   r  zPow._eval_is_finite  s    88yy  yy$$		(<(<YY  :XX:"xx&&)DII4E4E*F +G 2r-   c                    | j                   j                  r2| j                  j                  r| j                  dz
  j                  ryyyy)zM
        An integer raised to the n(>=2)-th power cannot be a prime.
        r   FN)r   rt   r@   r   r   s    r+   _eval_is_primezPow._eval_is_prime.  s<     99DHH$7$7TXX\<V<V =W$7r-   c                T   | j                   j                  r| j                  j                  r{| j                   dz
  j                  r| j                  dz
  j                  sE| j                   dz   j                  r/| j                  j                  r| j                  j
                  ryyyyyy)zS
        A power is composite if both base and exponent are greater than 1
        r   TN)r   rt   r@   r   r   rz   r   s    r+   _eval_is_compositezPow._eval_is_composite5  s     II  TXX%8%8ii!m((dhhl-G-GYY]''DHH,@,@TXXEUEU FV,@' &9 r-   c                .    | j                   j                  S r   )r   r   r   s    r+   _eval_is_polarzPow._eval_is_polar>  s    yy!!!r-   c                   ddl m} t        | j                  |      rg| j                  j                  ||      }| j                  j                  ||      }t        ||      r|j                  |      S | j                  ||      S ddlm}m	} d }|| j                  k(  s"||k(  rz| j                  t        j                  k(  r]|j                  r2t        |t              r" || j                  j                  ||            S || j                  j                  ||      z  S t        || j                        rN| j                  |j                  k(  r5 || j                  |j                        }	|	j                  rt!        ||	      S t        || j                        r| j                  |j                  k(  r| j                  j"                  du r| j                  j%                  t&        d      }
|j                  j%                  t&        d      } ||
||      \  }}}|r@| j                  ||      }| t)        |t!        |j                  |            }|S |j                  }g }g }|j+                         }| j                  j,                  D ]  }|j                  ||      }|j+                         }
 ||
||      \  }}}|r(|j/                  ||z         ||j/                  |       ]|j0                  s|j2                  s y |j/                  |        |rHt5        | }|j/                  |dk7  rt!        | j                  |d      n| j                         t)        | S t        ||      s(|j6                  r|j                  t        j                  u r| j                  j8                  r| j                  j:                  r|j                  j%                  t&        d      }
| j                   || j                        z  j%                  t&        d      } ||
||      \  }}}|r6| j                  ||      }| t)        |t!        |j                  |            }|S y y y y y )	Nr   rY   r   c                8   | \  }}|\  }}||k(  r|j                   r||z  }	 t        |d       d}||dfS t        |t              s|f}t        d |D              sy	 t        t        |      t        |            \  }}|dk  r|dk7  r|dz  }|t        |      z  }|dk(  rd}nt        |g| }d||fS y# t        $ rL |j                         \  }	}
|	j                  xr |
j
                  xs |	j                  xr |
j                  }Y w xY w# t        $ r Y yw xY w)	a*  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.

            Fr   TNc              3  4   K   | ]  }|j                     y wr   )rt   )r   terms     r+   r   z1Pow._eval_subs.<locals>._check.<locals>.<genexpr>q  s     B4tBr   )FNNr   r   )rO   r    r%   r   r   r   r   rc   tupler  rF   r   )ct1ct2oldcoeff1terms1coeff2terms2r   combinesrH   rG   	remainderremainder_pows                r+   _checkzPow._eval_subs.<locals>._checkM  sH   " !NFF NFF%% -Chs51#' $S$.. &fe4"(B6BB0)/vv)OY7yA~1HC%7I$>,0M,/	,CF,CM#S-77
 %= & h"01#$==#>QYY#g!BRBRBgWXWgWgh4 & $	s%   B5 AD 5AD
	D
	DDF)as_Addr   r   )rp   rZ   rc   r@   r   subs__rpow__r   r}   r   r   ro   is_Functionr   _subsrx   rM   r   as_independentSymbolr   as_coeff_mulrP   appendrO   rt   Addis_Powr   r   )r   r  newrZ   rH   rG   r@   r   r%  lr  r  r   r   r$  resultoargnew_lo_alr   newaexpos                         r+   
_eval_subszPow._eval_subsA  s   Adhh,		sC(Ac3'A![)zz!}$99Q?"C8	%t $))s
tyyAFF/B:c8#<488>>#s344DHHNN3444 c499%$((cgg*=DIIsxx(A{{3{"c499%$))sxx*?xx%'hh--fU-Cgg,,VE,B)/S#)>&C!YYsC0F$0!$VS=-I!J!M ww'') &A773,D++-C-3Cc-B*B]S#X.(4 KK6  // KK%& :DLLQRTYYu!EX\XaXab;&sC SZZCHH4FTXXMfMfkoktkt  lA  lA''(((>C88C		N*::u ; &C%+Cc%:"B]3, , SXX})EFF	  lAMf4FZr-   c                    | j                   \  }}|j                  r0|j                  |j                  k  r|j                  dkD  rd|z  | fS ||fS )a  Return base and exp of self.

        Explanation
        ===========

        If base a Rational less than 1, then return 1/Rational, -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)
        >>> p.base, p.exp
        (1/2, 2)

        r   r   )rP   r   pr   )r   rH   rG   s      r+   r   zPow.as_base_exp  sH    0 yy1==QSS133Y1337Q37N!tr-   c                0   ddl m} | j                  j                  | j                  j
                  }}|r || j                        | j                  z  S |r| j                   || j                        z  S |du r|du rt        |       }|| k7  r ||      S y y y )Nr   )adjointF)r   r=  r@   rt   r   r   r   )r   r=  r   r;  expandeds        r+   _eval_adjointzPow._eval_adjoint  s    @xx""DII$9$91499%txx//99gdhh///:!u*%d+H4x((   %:r-   c                H   ddl m} | j                  j                  | j                  j
                  }}|r || j                        | j                  z  S |r| j                   || j                        z  S |du r|du rt        |       }|| k7  r ||      S | j                  r| S y )Nr   )	conjugateF)r   rA  r@   rt   r   r   r   r   )r   r   r   r;  r>  s        r+   _eval_conjugatezPow._eval_conjugate  s    Gxx""DII$9$91TYY<))99ak)):!u*%d+H4{"  K !r-   c                   ddl m} | j                  t        j                  k(  r8| j                  t        j                  | j                  j                               S | j                  j                  | j                  j                  xs | j                  j                  }}|r| j                  | j                  z  S |r || j                        | j                  z  S |du r|du rt        |       }|| k7  r ||      S y y y )Nr   )	transposeF)r   rD  r   r   ro   r   r@   rt   r   r|   r   )r   rD  r   r;  r>  s        r+   _eval_transposezPow._eval_transpose  s    B9999QVVTXX%7%7%9::xx""TYY%9%9%RTYY=R=R199dhh&&TYY'11:!u*%d+H4 **   %:r-   c           	        | j                   }| j                  }|t        j                  k(  rQddlm} t        ||      r?|j                  r3ddlm	}  || j                  ||j                        g|j                   S |j                  r|j                  dd      s|j                  du s|j!                         r|j                  r0t#        |j$                  D cg c]  }| j                  ||       c} S |j                  r]t'        |j$                  d d      \  }}|r?t#        |D cg c]  }| j                  ||       c} |t)        j*                  |      z  z  S | S c c}w c c}w )	za**(n + m) -> a**n*a**mr   )Sum)ProductforceFc                    | j                   S r   rN   r4   s    r+   <lambda>z,Pow._eval_expand_power_exp.<locals>.<lambda>  s    q/?/? r-   Tbinary)r   r@   r   ro   sympy.concrete.summationsrG  rc   rO   sympy.concrete.productsrH  r   functionlimitsr   getr   _all_nonneg_or_nonpposr   rP   r   r/  
_from_args)	r   hintsrH   rG   rG  rH  r4   r   ncs	            r+   _eval_expand_power_expzPow._eval_expand_power_exp  s   IIHH;5!S!a&6&6;tyyAJJ7C!((CC887E2		U"a&>&>&@aff=TYYq!_=>>QVV%?M2! <Q1a < S^^B//0 0 > !=s   E (E%c                   |j                  dd      }| j                  }| j                  }|j                  s| S |j	                  d      \  }}|r|D cg c]"  }t        |d      r |j                  di |n|$ }}|j                  rM|j                  rt        ||z   }n#t        |ddd   D cg c]  }|dz  	 c}| z   }|r|t        | |z  z  }|S |s| j                  t        | |d      S t        | g}t        |d d	
      \  }	}
d }t        |
|      }|d	   }|	|d   z  }	|d   }|t        j                     }|rt        j                  }t        |      dz  }|dk(  rn|dk(  r|	j                  |       n|dk(  rW|r5|j!                          }|t        j"                  ur|j                  |       n|j                  t        j$                         ng|r5|j!                          }|t        j"                  ur1|j                  |       n|j                  t        j$                         |	j                  |       ~|s|j&                  r||z   |	z   }|}	n'|j                  rJ t        |      dkD  rt        j"                  }|	s#|d   j(                  r||j!                  d      z  }t        |      dz  r| }|D ]  }|j                  |         |t        j"                  ur|	j                  |       n|rm|	rk|d   j(                  rJ|d   t        j$                  ur5|	j                  t        j$                         |j                  |d           n#|	j+                  |       n|	j+                  |       ~|}|	|z  }	t        j"                  }|r|j,                  rOt        |d d	
      \  }}t        |D cg c]+  }| j                   |j                  |j.                   |      - c} }|t        |D cg c]  }| j                  ||d       c} z  }|	r|| j                  t        |	 |d      z  }|S c c}w c c}w c c}w c c}w )z(a*b)**n -> a**n * b**nrI  F)split_1_eval_expand_power_baseNr8   r   c                    | j                   du S NF)r   rK  s    r+   rL  z-Pow._eval_expand_power_base.<locals>.<lambda>=  s    !2D2D2M r-   TrM  c                    | t         j                  u rt         j                  S | j                  }|ry|t        | j                        S y r   )r   r   r   r   r   )r4   polars     r+   predz)Pow._eval_expand_power_base.<locals>.pred?  sB    AOO#&JJE}!!";";<< r-   rT   r   r   r$   c                z    | j                   xr. | j                  j                  xr | j                  j                  S r   )r0  r@   r   r   rv   rK  s    r+   rL  z-Pow._eval_expand_power_base.<locals>.<lambda>  s1    AHH 5;EE%%5;*+&&*:*: r-    )rS  r   r@   rw   args_cnchasattrr[  ru   r   r   r   r   r   r   lenr.  poprj   rk   rt   rx   extendr   rP   )r   rV  rI  rH   rG   cargsrW  r   r   r   
maybe_realr`  siftednonnegnegimagInonnor)   npows                        r+   r[  zPow._eval_expand_power_base  s   		'5)IIHHxxKJJuJ-	r
   178 ,!++4e4>?@ B  ||==bdBb2h7q"u7:;B#u+q.(B	yyb1uy==r(B !(Mz	= j$'Umaoo&AD	AAAvaQaGGI:D155(d+JJq}}-GGI:D155(d+JJq}}-Q ALLSL5(EE ||## 3x!|EEQ!1!1OAs8a<A &AMM1"%&AEE>LLOq6##Aamm(CLL/MM3q6'*LL%S!ERKEUU}}"5 +;!e $GQ499VQVVQVV_a8GH#GA		!Q	7GHHB$))CKU);;B	U 8| HGs   'P<0Q<0Q:Q
c           	     
   | j                   \  }}| }|j                  r|j                  dkD  r|j                  r|j                  st        |j                  |j                  z        }|s|S | j                  |||z
        g }}| j                  ||      }|j                  r|j                         }t        j                  |      D ]  }|j                  ||z          t        | S t        |      }|j                  rg g }
}	|j                   D ]1  }|j                  r|	j                  |       !|
j                  |       3 |	rZt        |
 }t        |	 }|dk(  rt!        ||z  d      ||z  |z  z   S t!        ||dz
  z  d      }t#        ||z  d      ||z  |z  z   S |j$                  r|j'                         \  }}|j                  r|j                  r|j                  s|j                  s\| j                  |j                  |j                  z  |      }|j                  |j                  z  |j                  |j                  z  }}n~| j                  |j                  |      }|j                  |j                  |z  }}nF|j                  s8| j                  |j                  |      }||j                  z  |j                  }}nd}t        |      t        |      ddf\  }}}}|r;|dz  r||z  ||z  z
  ||z  ||z  z   }}|dz  }||z  ||z  z
  d|z  |z  }}|dz  }|r;t(        j*                  }|dk(  r|||z  z   S t        |      |z  ||z  |z  z   S |
}ddlm} ddlm}  |t5        |      |      } ||g| S |dk(  r6t        |j                   D cg c]  }|j                   D ]  }||z  	  c}} S ||dz
  z  j                         }|j                  r6t        |j                   D cg c]  }|j                   D ]  }||z  	  c}} S t        |j                   D cg c]  }||z  	 c} S |j                  ra|j                  dk  rR|j                  rFt7        |j                        |j                  kD  r$d| j                  ||       j                         z  S |j                  r|j8                  r|j;                  dd      s|j<                  du s|j?                         rg g }}|j                   D ]A  }|j8                  r"|j                  | j                  ||             1|j                  |       C tA        || j                  |t        jB                  |            gz    S |S c c}}w c c}}w c c}w )	zA(a + b + ..)**n -> a**n + n*a**(n-1)*b + .., n is nonzero integerr   r$   Fdeepr   )multinomial_coefficients)basic_from_dictrI  )"rP   r   r;  r   ru   r   r   r   r0  _eval_expand_multinomialr/  	make_argsr.  r&   rO   is_Orderr   r   rv   as_real_imagr   r   sympy.ntheory.multinomialru  sympy.polys.polyutilsrv  re  r=   rx   rS  r   rT  r   rU  )r   rV  r   r@   r3  r)   radicalexpanded_base_nr  order_termsother_termsrH   r  rp  gr   kr   rJ   rn  r;  ru  rv  expansion_dictmultir   tails                              r+   rw  zPow._eval_expand_multinomial  s    II	c??suuqyT[[>>CEESUUN+!M&*iicAg&>VG&*iia&8O&--+DDF ( #o > 4d7l34 <'CA""+-r[ .Azz#**1-#**1-	. [)A[)AAv1!Q$UCac!eKK.q1q5zF)!A#E:QqSUBB>>  ,,.DAq}} ||#$<<$(IIaccACCi$;'(ss133wACC1$(IIacc1$5'(ssACCE1!" $		!##q 1A#$QSS5!##qA !A%(VSVQ%9
1a 1u'(sQqSy!A#!)1 !Q#$Q319ac!eqA!GA   OO6#$qs7N#*1:a<!A#a%#77 OA!9#a&!!D '~:::6dii K KA1 K KLL!AE]DDFE||"$)) %1Q%*ZZ%1 ! &'qS %1S %1  2 2  #dii$@QuW$@AAoo#%%!)CEE
SUU"tyyt,EEGGGZZDNN		'50I%)C)C)E b4E &>>LL4!67KK%	&
 $))D#..2F"G!HHJJM3 !L%1 %As   U4
5U:
*V c           
     	   | j                   j                  r~ddlm} | j                   }| j                  j                  |      \  }}|s| t        j                  fS t        dt              \  }}|dk\  rT|j                  r9|j                  r-t        | j                  |z        }	|	| k7  r|	j                         S  |||z   |z        }	nu|dz  |dz  z   }
||
z  | |
z  }}|j                  rD|j                  r8t        ||t        j                  z  z   | z        }	|	| k7  r|	j                         S  |||z   | z        }	|	j                         D cg c]  }|d   d   dz  r| }}t        |D cg c]  \  \  }}}|||z  z  ||z  z   c}}} }|	j                         D cg c]  }|d   d   dz  dk(  s| }}t        |D cg c]  \  \  }}}|||z  z  ||z  z   c}}} }|	j                         D cg c]  }|d   d   dz  d	k(  s| }}t        |D cg c]  \  \  }}}|||z  z  ||z  z   c}}} }|j                  |||t        j                  |z  i      |j                  ||||i      |j                  |||| i      z   fS dd
lm}m}m} | j                   j(                  r(| j                  j                  |      \  }}|j*                  rp| j                   t        j,                  u rT|j.                  r| t        j                  fS |j0                  r*t        j                  | j                   | j                   z  fS | j3                  | j3                  |d      | j3                  |d      z   t        j,                        } |||      }| j3                  || j                         || j                   z  }}| ||      z  | ||      z  fS | j                  t        j4                  u rqddlm } | j                   j                         \  }}|r& |j8                  |fi |} |j8                  |fi |} ||       ||      }} ||      |z   ||      |z  fS ddlm}m} |r=d|d<    | j8                  |fi |}|jA                  d      |k(  ry  ||       ||      fS  ||        ||       fS c c}w c c}}}w c c}w c c}}}w c c}w c c}}}w )Nr   )polyrs  za br   r$   r   rT   r   )atan2cossinr@   )r`   r   Fcomplexignore)!r@   ru   sympy.polys.polytoolsr  r   rz  r   rl   symbolsDummyrx   r   r   termsr/  r'  (sympy.functions.elementary.trigonometricr  r  r  r   r   r   r   r   r   ro   r}   expandr   r`   r   rS  )r   rt  rV  r  r@   re_er   r   rH   exprmagr   rI   aabbccre_partim_part1im_part3r  r  r  r5   rptpr   r*   r`   r   r>  s                                 r+   rz  zPow.as_real_imag  s   882((C//T/:JD$QVV|#5e,DAqax>>dnn-diin=Dt|#0022USL" Aga'!#XuSyd>>dnn-td1??6J/JcT.QRDt|#0022QUcTM* !JJL<q!Q!<A<qAA|xBBq"uHQUNABG JJL=qAaDGaK1,<=A=BBR"R2Xae^BCH JJL=qAaDGaK1,<=A=BBR"R2Xae^BCHLL!T1aood.B!CDMM1dAt,-q$D5>Q0RRT T 	ML88//T/:JD$||AFF 2//<'//66TYYJ#999
 		$))D!,tyyq/AA166JAdD!AYYq$((+QtxxZBc"g:r#b'z))YY!&& B..0JD$"t{{4151"t{{4151t9c$iqAt9Q;D	!++C#(i &4;;t5u599X&(2xL"X,77$xD))g =A=B=Bs6   S"S3S&S:SS>SS#S c                    ddl m} | j                  j                  |      }| j                  j                  |      }| | || j                        z  || j                  z  | j                  z  z   z  S r   )r}   r   r   diffr@   )r   r*   r   dbasedexps        r+   _eval_derivativezPow._eval_derivativec  sX    >		q!xx}}Qtc$))n,utxx/?		/IIJJr-   c                   | j                         \  }}|t        j                  k(  r)ddlm}  || j                  d      j                  |      S |j                  |      }|j                  s|j                  |      }|j                  rp|j                  rd|j                  du rV|j                         ||j                         z  j                  |      z  }| }| j                  ||      j                         S | j                  ||      S )Nr   r  Fr   )r   r   ro   r}   r@   _eval_evalf_evalfru   r   rv   r   rA  r   r  )r   precr   r@   exp_functions        r+   r  zPow._eval_evalfi  s    $$&	c166>R59EEdKK{{4 ~~**T"C??t~~$2G2G52P>>#tdnn.>'>&F&Ft&LLD$C99T3'..00yys##r-   c                    | j                   j                  | ry | j                  j                  | rMt        | j                  j	                  |      xr' | j                   j
                  xr | j                   dk\        S y)NFr   T)r@   hasr   r1   _eval_is_polynomialru   r   symss     r+   r  zPow._eval_is_polynomialx  sn    488<<499==$		55d; 8##8)-Q9 9 r-   c                   | j                   j                  rU| j                  j                  r?t	        t        | j                   j                  | j                  j                  g            ry | j                  | j                          }|j                  s|j                  S |j                         \  }}|j                  r|j                  ry|j                  rL|j                  r(t	        |j                        s|j                  ry||k(  ry|j                  r|j                  S |t        j                  u r|j                  r|j                   ryy y y )NTF)r@   rt   r   r   r   r   r   r   r   r   r0  r   r   is_irrationalr   ro   r   )r   r;  rH   rG   s       r+   _eval_is_rationalzPow._eval_is_rational  s     HHDII$9$9i)=)=tyy?P?P(QRSDIIt'')*xx== }}1==Q]] <<}}QYY'1+;+;6yy ;}} ".} r-   c                    d }| j                   j                  s || j                         ry| j                   t        j                  u r | j                  | j
                   }|j                  | j                  k(  r| j                  j                  r| j                  j                  ry| j                  t        j                  z  j                  ry| j                  t        j                  t        j                  z  z  j                  ry|j                  S y y | j                  j                  r| j                   j                  du r| j                  j                  S | j                   j                  du rC| j                  j                  r| j                   j                  S | j                   j                  ry| j                  j                  r| j                   j                  S y | j                   j                  r| j                  j                  rt        | j                   j                        rt         || j                               s.| j                   j                  du s| j                   j                  r| j                  j                  S y y y )Nc                @    	 | dz
  j                   S # t        $ r Y yw xY w)Nr   F)r   r%   )r  s    r+   _is_onez'Pow._eval_is_algebraic.<locals>._is_one  s)    q))) s    	TF)r   r   r   ro   r   rP   r@   r   is_algebraicr   r   r   r   r   rt   r  )r   r  r*   s      r+   _eval_is_algebraiczPow._eval_is_algebraic  s   	 99		 2YY!&& 		499%Avv"88&&xx,,$((144-44$((AOOADD$89FF#~~% G ' XX!!yy%%.xx'''yy  E)88&&99111YY++xx##yy--- $YY##(=(=499,,-gdii0199''5099**xx+++ +	 )>#r-   c                     | j                   j                  | ry | j                  j                  | r3| j                  j                  |      xr | j                   j                  S yr   )r@   r  r   _eval_is_rational_functionru   r  s     r+   r  zPow._eval_is_rational_function  sW    488<<499==$9977= $##$ r-   c                   | j                   j                  ||      }| j                  j                  }|r|S | j                  j                  ||      }|du r|rdS d S |y | j                   j	                  ||      }|j
                  }|rd}n t        |j                  t        |      f      }|du r|S |y |s|S | j                  j	                  ||      j                  S r]  )	r   _eval_is_meromorphicr@   ru   r'  r   r   rm   r   )	r   r4   r   
base_meromexp_integer	exp_meromrH   b_zerolog_defineds	            r+   r  zPow._eval_is_meromorphic  s     YY33Aq9
hh))HH11!Q7	 &5/4/IINN1a  K#Q[[)F2C$DEK% xx}}Q",,,r-   c                     | j                   j                  | ry | j                  j                  | r3| j                  j                  |      xr | j                   j                  S yr   )r@   r  r   _eval_is_algebraic_exprr   r  s     r+   r  zPow._eval_is_algebraic_expr  sW    488<<499==$9944T: %$$% r-   c                   ddl m}m} |j                  s"|j	                  |      s|j	                  |      r||z  S |j	                  t
              rnt        j                  r8t        t        j                   ||      |z  |j	                  t
                    S  | ||      |z  |j	                  t
                    S ddlm}m}  | | ||            t        j                   ||      z  z   |z        S )Nr   r   r   )r   Abs)r}   r@   r   r   r  r,  r   
exp_is_powrM   r   ro   r   r   r  r   )r   r   r8  kwargsr@   r   r   r  s           r+   _eval_rewrite_as_expzPow._eval_rewrite_as_exp  s    C<<488C=DHHSM:88F !++1663t9T>DHHV<LMM3t9T>DHHV4DEE FCIT)BBDHIIr-   c                   | j                   s| t        j                  fS | j                         \  }}|j	                         \  }}|j
                  }|j                  r|s|j                  s|j                         }|j                  }|j                  s|s|}t        j                  }|j                  }|r| | }}n||s|}t        j                  }|r||}}| }|j                  rp|t        j                  u r&|t        j                  ur|| j                  ||      fS |t        j                  ur&|t        j                  u r| j                  ||      |fS | j                  ||      | j                  ||      fS r   )rO   r   rj   r   r   r   rw   r   ry   rt   r   is_nonpositiver|   r   )r   r   r@   r)   rJ   neg_expint_expdnonposs           r+   r   zPow.as_numer_denom  sJ   "";$$&	c""$1 //::gcoo224G.. ""gAA""2rqA_WAAaqA$C??AEEzaquun$))As+++~!quu*yyC(!++yyC $))As"333r-   c                   t        |      }|i }|t        j                  u r.| j                  j	                  t        j
                  |      }||S t        |t              sy |j                         \  }}| j                         \  }}|j                  rJ|j                  r>|r<|j                  r|j	                  |||z  z  |      S |j	                  |d|z  z  |      S |j                         }| j                  j	                  ||      }|y | j                  j                  |      j	                  ||      }|t        j                  | ||      S |S r   )r	   r   rj   r@   matchesrl   rc   r   r   rs   ru   r   copyr   xreplace)	r   r  	repl_dictr  rJ   rH   rG   sbses	            r+   r  zPow.matches2  s,   ~I 155=  3A} $%!1 !!#B<<BMMd}}zz!ad)Y77::dQrTlI66NNIIa#9HHa ((A.9<<dI66r-   c                8  3 ddl m}m} ddlm} ddlm} ddlm}	 | j                  t        j                  u r| j                  j                  |||      }
|
j                  rd|
z   S  ||
j                         |d      }|t        j                  u r |||z  |      S |t        j                   u r| S |
|z
  } ||      x}}t#        d|      D ]#  }|||z  z  }|j                  |||      }||z  }% | |||z  |      z  }ddlm}  ||d	d
      S ddlm} ddlm}  || d	      j/                         } | j1                         \  }} |j2                  | r
t5               |j3                  |      r$ || ||      z        j7                  ||||      S |X|j3                  |      rGddlm} t=        d||g      \  }}|j?                   ||||z  z         ||      ||z  z         }||z  } |j                         }	 ddl m!} |j3                  |t        jD                        r|
tG               |jI                  |      \  }}|j3                  |      rddl)m*}  ||      jW                         }|jX                  sk|jZ                  r|j\                  sS| | j_                  |||      k(  r< || ||      z        j7                  ||||      }| || ||      z        k(  r| S |S |ja                  ||      }||z  t        jb                  z
  jW                  d      }|jZ                  s
tK               |||z  z
  33j3                  td              r |	|      33jf                  r ||||z  z  |      S |jX                  r||z  }|| k7  r| |||z  |      z  }|S d } 3fd}!	 |jI                  ||      \  }}"|jh                  r5|"t        jj                  k(  r"ddl)m6}#  |#|      jI                  ||      \  }}"|"jn                  s|jq                         }|jX                  r||z  S |jI                  ||      \  }}"|"jn                  sB||z
  |z  js                         }|jI                  ||      \  }}"|"jn                  s
tK               ddl:m;}$ |j7                  | |$3      ||      j                         }%i }&ty        jz                  |%      D ]4  } | ||      \  }'}(|&j}                  |(t        jj                        |'z   |&|(<   6 t        jb                  })t        jj                  t        jb                  i}*|&}+ddl?m@},mA}- |)|"z  3z
  jf                  rt |-||)       |,|)      z  }.|+D ].  }|*j}                  |t        jj                        |.|+|   z  z   |*|<   0  |!|+|&      }+|)t        jb                  z  })|)|"z  3z
  jf                  rtddlBmC}/ |j                  s|jX                  r|jf                  r||z
  j                  ||      }0 |/|0      jf                  r | ||z  d d!|z  z  z  |      \  }1}2n_ |/|0      jX                  r. |  || ||      z        ja                  |||      |      \  }1}2n | ||z  |      \  }1}2n | ||z  |      \  }1}2t        jj                  }|*D ]  }(|(|2z   }||*|(   |1z  ||z  z  z  } |j                  r,|jn                  r ||"z  |z
  j                  r|t        |       k(  s	 | |||z  |      z  }|S |S # tF        tJ        t4        f$ r} |j7                  |tM        d|      ||      j                         }|j3                  t        jN                  t        jP                        r
tK               |jI                  |      \  }}Y Zw xY w# tF        tJ        f$ r1  |||3z  z  |d      dk(  r||z  |||z  z  |z  z   cY S tK               w xY w# tJ        $ r'  || ||      z        j7                  ||||      cY S w xY w)"Nr   r   )limit)Ordersympify)r)   logxr   )powsimpTr@   )rt  combine)	powdenest)_illegal)rI  )r)   r  cdir)Wildzc, ex)r   exclude)	polygammar$   )
logcombiner  r  r  F)r  c                J   t         j                  t         j                  }}t        j                  |       D ]E  }|j                  |      r-|j                         \  }}||k7  s-	 | j                  |      c S ||z  }G ||fS # t        $ r | t         j                  fcY c S w xY wr   )	r   rj   rl   r   rx  r  r   leadtermr%   )r  r4   r   r@   factorr   s         r+   	coeff_expz$Pow._eval_nseries.<locals>.coeff_exp  s    3E--- 	$::a= & 2 2 4ID#qy0#'==#33 VOE	$ #:	  * 0#'</0s   $BB"!B"c                    i }t        | |      D ]?  \  }}||z   }|k  s|j                  |t        j                        | |   ||   z  z   ||<   A |S r   )r   rS  r   rl   )d1d2rese1e2r   maxpows         r+   mulzPow._eval_nseries.<locals>.mul  sc    C!"b/ BB"W;!ggb!&&1BrF2b6MACGB Jr-   )	nsimplify)ceiling)	factorialffr`   r8   rD   )Hr}   r@   r   sympy.series.limitsr  sympy.series.orderr  sympy.core.sympifyr  r   r   ro   nseriesry  removeOr   ri   rangesympy.simplify.powsimpr  r  numbersr  trigsimpr   r  r   _eval_nseriessymbolr  r  replace'sympy.functions.special.gamma_functionsr  
EulerGammar%   r  NotImplementedErrorrr   rh   rg   sympy.simplify.simplifyr  cancelr   rv   r   _eval_as_leading_termas_leading_termrj   r,  r   is_Floatrl   r  r   simplifyr  r   r  r/  rx  rS  (sympy.functions.combinatorial.factorialsr  r  r   r`   rt   dirr  r   )4r   r4   r)   r  r  r@   r   r  r  r  e_seriese0r5   
exp_seriesr  r   r  r  r  rH   rG   r  r   r   r  _rK   r  r  r  r  rI   r  r  rJ   r  r  gpolygtermsco1r  r  r  tkr  r  r   r`   ndirincoinexr  s4                                                      @r+   r  zPow._eval_nseriesT  s    	D-,.99xx''QT':H  8|#x'')1a0BQ'''QT1~%QZZ2A #B'J1a[ #!||A|6d"
# %1a.(J6:D%@@4%T*335!1155(+558qQx=..qADt.LLc
$Gs;EAr		#a2g,AD(89Aa4DIIK		!IuuY-$2B l"::a=DAq 55::1$$&A		Q[[QYYt11!$T1JJ!CF(m11!qt$1O#aAh-'K
ad+qS155[   .{{%''QqS::fQZFQqS1%%991ADyU1a4^#H			,::ad:+DAq ::!qvv+ :Q<(((6DAq}}

Ayy!t::ad:+DAq==!eQY&&(zz!$z/1}}-//?WV_4dKSSUMM%( 	6Da(GCB/#5F2J	6 EEJsV|((q!HYq\)E A!IIb!&&1E"R&L@b	ARBJA sV|(( 	<||		ammE;;q$'D$x##&q!tR2a4L'8!<
dD!!&s1SV8}'D'DQTX\'D']_`a
d&q!tQ/
d"1a4+JD$ff 	*BdB59T>!b'))C	* AaC!G3K3Kx~%QuQT1~% 
s
} /; 	!SAYTEMMOAuuQUUA--.)++::a=DAq		!t /0 	,Qq&y[!Q'1,!ta1fQh&)++	,D ' Q1SV8}22142PPQs8   A\ +^& ?_) B^#"^#&3_&_&)-``c                   ddl m}m} | j                  }| j                  }| j                  t        j
                  u rx|j                  ||      }|j                  |d      }	|	t        j                  u r|j                  |d      }	|	j                  du rt        j
                  |	z  S t        d| z        |j                  |      r% || ||      z        }
|
j                  |||      S ddlm} 	 |j                  |||      }|j                  s|j                   r|j                  |      s||z
  j#                  ||      } ||      j                   r| j%                  ||      dd	|z  z  z  S  ||      j&                  r3 ||      j)                  |||      }|j                  du r |||z        S | j%                  ||      S # t        $ r | cY S w xY w)
Nr   r   r  FzCannot expand %s around 0r  r  r8   rD   )r}   r@   r   r   r   ro   r  r'  rh   r  r|   r   r  r   r`   rt   r   r
  r   r   r  )r   r4   r  r  r@   r   rG   rH   r   arg0ltr`   r  r  log_leadterms                  r+   r  zPow._eval_as_leading_term  s   CHHII99##AD#1C88Aq>Dquu}yyA5(vvt|#74@AAUU1XQQZB%%ad%>>?%%ad%> <<AMM!%%(A{{1d+d8''  99Q?bBqD\99X%%#&q6#?#?SW#?#XL#//58"1\>2299Q?"  s   2G GGc                Z    ddl m}  || j                  |      | j                  ||      z  S )Nr   )binomial)r	  r  r@   r   )r   r)   r4   previous_termsr  s        r+   _taylor_termzPow._taylor_term1  s%    E!$tyyA66r-   c                   | j                   t        j                  urt        |   ||g| S |dk  rt        j
                  S |dk(  rt        j                  S ddlm}  ||      }|r|d   }|||z  |z  S ddlm	} ||z   ||      z  S )Nr   r   r  r8   )r  )
r   r   ro   supertaylor_termrl   rj   r  r	  r  )r   r)   r4   r  r  r;  r  rn   s          r+   r   zPow.taylor_term6  s    99AFF"7&q!=n==q566M655L$AJr"A}1uqy F!tIaL  r-   c                    | j                   t        j                  u rrddlm}  |t        j
                  | j                  z  t        j                  dz  z         t        j
                   |t        j
                  | j                  z        z  z
  S y )Nr   )r  r$   )r   r   ro   r  r  r   r@   r   )r   r   r@   r  s       r+   _eval_rewrite_as_sinzPow._eval_rewrite_as_sinF  se    99Dqtxx/!$$q&89AOOCPQP_P_`d`h`hPhLi<iii r-   c                    | j                   t        j                  u rrddlm}  |t        j
                  | j                  z        t        j
                   |t        j
                  | j                  z  t        j                  dz  z         z  z   S y )Nr   )r  r$   )r   r   ro   r  r  r   r@   r   )r   r   r@   r  s       r+   _eval_rewrite_as_coszPow._eval_rewrite_as_cosK  sg    99Dqtxx/01??3qW[W_W_G_bcbfbfghbhGhCi3iii r-   c                    | j                   t        j                  u r7ddlm} d || j
                  dz        z   d || j
                  dz        z
  z  S y )Nr   )tanhr   r$   )r   r   ro   %sympy.functions.elementary.hyperbolicr&  r@   )r   r   r@   r&  s       r+   _eval_rewrite_as_tanhzPow._eval_rewrite_as_tanhP  sI    99BTXXaZ((1tDHHQJ/?+?@@ r-   c                   ddl m}m} |t        j                  ury |j
                  r|j                  t        j                  t        j                  z        }|ro|j                  rb |t        j                  |z         |t        j                  |z        }}t        ||      s#t        ||      s|t        j                  |z  z   S y y y y y )Nr   )r  r  )r  r  r  r   ro   rw   r   r   r   rv   rc   )	r   r   r@   r  r  r  r   cosinesines	            r+   _eval_rewrite_as_sqrtzPow._eval_rewrite_as_sqrtU  s    Eqvv::IIaddQ__45E"144:ADDJ!&#.z47M!AOOD$888 8N. )u r-   c           
        | j                         \  }}t        |j                  ||       }|j                  ||      \  }}|j                  r|j	                         \  }}|j                  r|t
        j                  k7  r||z  }	| j                  ||	      }
t
        j                  }|
j                  s5t        |	j                  |	j                        \  }}| j                  ||      }
|
| j                  |t        ||||z  |	j                  z  z               fS t        ||      }|j                  r|j                  r|j                  ||      \  }}| j                  ||      j                         \  }
}|j                         \  }}|t
        j                  u s||k(  r|
| j                  t        ||      |      fS t
        j                  | j                  ||      fS )a  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}  clear)r   _keep_coeffas_content_primitiver   r   r   rl   r   rF   r;  r   rw   r   rj   )r   r}  r.  rH   rG   cepehr5   cehr   rI   icehrK   mes                  r+   r0  zPow.as_content_primitive`  s   V !1//u/MN''u'EB== ??$DAq}}affdIIa%FF}}$SUUCEE2GD!		!T*A$))A{2q1R4:~'FGGGB==QXX))')GDAq99Q?//1DAqMMOEArAEEzR1W $))K1$5q999uudii1o%%r-   c                d   | }|j                  dd      r|j                         }|j                         \  }}|j                  d      }|r||z  }||k7  r|j	                         S  |j                  | } |j                  | }	|	r|ry|j                  d      }|du ry|	y |j                  d      S )Nr  Tr   F)rS  r  r   equalsis_constant)
r   wrtflagsr  rH   rG   bzr1  econbcons
             r+   r9  zPow.is_constant  s    99Z&==?D!1XXa[Q$Cd{((q}}c"q}}c"!BU{\xx{r-   c                    | j                   \  }}|j                  |      r5|j                  |      s#|j                  |||z         }|||z
  z  dz
  | z  S y y r   )rP   r  r'  )r   r)   steprH   rG   new_es         r+   _eval_difference_deltazPow._eval_difference_delta  sW    yy1558AEE!HFF1a$h'E	NQ&$.. %8r-   r   )r   )returnr   )Tr]  )r   r   )FT)Arf   
__module____qualname____doc__r0  	__slots____annotations__r
   r   r   propertyr   r@   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r  r9  r   r?  rB  rE  rX  r[  rw  rz  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r   r"  r$  r(  r,  r0  r9  rB  __classcell__)rn   s   @r+   rM   rM      s   Wp F#I
` `D     ! ! " "#R%h6Bp%3:20*B$H/b "B:
)+(yvxtQ*fK$6%,N#-JJ$!4F Dyv #D 7 7! j
j
A
	9O&b./r-   rM   power)r/  )r   )r   r/  )r,  r  r  N)H
__future__r   typingr   mathr   r<   r   r'   	itertoolsr   r  r	   cacher
   	singletonr   r  r   r   r   rQ  r   r   r   r   r   logicr   r   r   r   
parametersr   rb   r   r   r   r   r   sympy.external.gmpyr   r   sympy.utilities.iterablesr   sympy.utilities.exceptionsr   sympy.utilities.miscr    sympy.multipledispatchr!   mpmath.libmpr"   r9   r,   r(   r2   rE   rM   rL  addobjectr/  r  r   r  r   r/  r  r,  r  r  rb  r-   r+   <module>r]     s    "  +      %% % = = ) $ + . * @ ' - 2$&))V'T4 nR/$ R/h8 	7 		66
C     ! * *r-   