
    \h                      S SK Jr  S SKJrJr  S SKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SS	KJr  SS
KJrJrJrJrJr  SSKJrJrJrJr  SSKJr  SSKJrJ r   SSK!J"r"J#r#  S SK$J%r%  S SK&J'r'  S SK(J)r)  S SK*J+r+   " S S\5      r,\+" S5      r-\-R]                  \/\/4\,5        SSK.J0r0  SSK1J2r2J3r3  SSK4J5r5J6r6  SSK7J8r8J9r9J:r:  g)    )annotations)CallableTYPE_CHECKING)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)sift)sympy_deprecation_warning)as_int)
Dispatcherc                    ^  \ rS rSrSrSrSr\(       a
  \S=S j5       r	\S>S j5       r
\S>S j5       r\S 5       r\S?S@S	 jj5       rSAS
 jr\S 5       rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#S r$S r%S  r&S! r'S" r(S# r)S$ r*SBS% jr+S& r,S' r-S( r.S) r/S* r0S+ r1S, r2S- r3S. r4S/ r5SCS0 jr6SDS1 jr7S2 r8\S3 5       r9U 4S4 jr:S5 r;S6 r<S7 r=S8 r>SES9 jr?S: r@S; rAS<rBU =rC$ )FPow   a  
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_commutativec                    g N selfs    H/var/www/auris/envauris/lib/python3.13/site-packages/sympy/core/power.pyargsPow.argsu   s        c                     U R                   S   $ )Nr   r*   r'   s    r)   basePow.basey       yy|r,   c                     U R                   S   $ Nr   r.   r'   s    r)   expPow.exp}   r1   r,   c                t    U R                   R                  [        L a  U R                  R                  $ [        $ r%   )r4   kindr   r/   r   r'   s    r)   r7   Pow.kind   s&    88==J&99>>!  r,   c                
   Uc  [         R                  n[        U5      n[        U5      nSSKJn  [        XF5      (       d  [        XV5      (       a  [        S5      eXE4 H>  n[        U[        5      (       a  M  [        S[        U5      R                  < S3SSSS	9  M@     U(       Ga6  U[        R                  L a  [        R                  $ U[        R                  L a  [        U[        R                   5      (       a  [        R                  $ [        U[        R"                  5      (       a/  [%        U[        R                   5      (       a  [        R&                  $ [%        U[        R"                  5      (       a@  UR(                  (       a  [        R                  $ UR(                  S
L a  [        R                  $ U[        R&                  L a  [        R                   $ U[        R                   L a  U$ US:X  a  U(       d  [        R                  $ UR*                  R                  S:X  aJ  U[        R,                  :X  a5  SSKJn  U" [3        XER4                  5      [3        XER6                  5      5      $ OUR8                  (       a  UR:                  (       d  UR<                  (       a|  UR>                  (       a  UR@                  (       d  URB                  (       aI  URE                  5       (       a4  URF                  (       a  U* nOURH                  (       a  [3        U* U5      * $ [        R                  XE4;   a  [        R                  $ U[        R                   L a:  [K        U5      RL                  (       a  [        R                  $ [        R                   $ SSK'J(n	  URR                  (       Gd  U[        R,                  LGa  [        XI5      (       d  SSK*J+n
  SSK'J,n  SSK-J.n  U
" US
S9R_                  5       u  pU" U5      u  nn[        UU5      (       a(  UR`                  S   U:X  a  [        R,                  X-  -  $ URb                  (       az  SSK2J3nJ4n  U" U" U5      5      nURB                  (       aS  U(       aL  UU" U
" US
S9* 5      U[        Rj                  -  [        Rl                  -  -   :X  a  [        R,                  X-  -  $ URo                  U5      nUb  U$ [        Rp                  " XU5      nU Rs                  U5      n[        U[2        5      (       d  U$ URt                  =(       a    URt                  Ul:        U$ )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
stacklevelFAccumulationBoundsr   AccumBounds)	exp_polar)factor_termslog)fraction)sign)rH   im);r   evaluater   
relationalr:   
isinstance	TypeErrorr   r   type__name__r
   ComplexInfinityNaNInfinityr   OneNegativeOner   Zero	is_finite	__class__Exp1!sympy.calculus.accumulationboundsrB   r    minmax	is_Symbol
is_integer
is_Integer	is_numberis_Mul	is_Numbercould_extract_minus_signis_evenis_oddabsis_infinite&sympy.functions.elementary.exponentialrC   is_Atom	exprtoolsrD   rF   sympy.simplify.radsimprG   as_coeff_Mulr*   is_Add$sympy.functions.elementary.complexesrH   rI   ImaginaryUnitPi_eval_power__new__ _exec_constructor_postprocessorsr#   )clsberJ   r/   r4   r:   argrB   rC   rD   rF   rG   cexnumdenrH   rI   sobjs                        r)   rq   Pow.__new__   s   (11H{qk 	+d'':c+F+F>?? ;Cc4(()s),,/ 0 .3/I 
  a'''uuajj quu%%::%q}}--%aee2D2D66Mq}}--~~ 000~~. uuaff}uu4(((''+??166>M&s4'93tWW;MNN " --CNNcnn>>dkkT^^7799;; 5DZZsO++uu#uus8''55Luu M{{{t166'9*TB]B]7J?(59FFHEA'|HC!#s++t0C vv.Q DN;;1 #\$U%C$C DqGXYZY]Y]G] ]2^#$66AE?2&&s+?Jll3c*2237#s##J"11Hc6H6H
r,   c                P    U R                   [        R                  :X  a  SSKJn  U$ g Nr   rE   )r/   r
   rX   rg   rF   )r(   argindexrF   s      r)   inversePow.inverse   s    99BJr,   c                     SSU R                   4$ )N      )rO   rs   s    r)   	class_keyPow.class_key   s    !S\\!!r,   c                J   SSK JnJn  U R                  5       u  pEU" UR	                  U5      U5      (       al  UR                  5       (       aV  U" UR                  U5      U5      (       a  [        U* U5      $ U" UR                  U5      U5      (       a  [        U* U5      * $ g g g )Nr   )askQ)	sympy.assumptions.askr   r   as_base_expintegerrb   evenr    odd)r(   assumptionsr   r   rt   ru   s         r)   _eval_refinePow._eval_refine   s    0!qyy|[))a.H.H.J.J166!9k**A2qz!QUU1X{++QB
{" , /K)r,   c                :   U R                  5       u  p#U[        R                  L a  X#-  U-  $ S nUR                  (       a  SnGOUR                  (       a  SnGOUR
                  Gb  SSKJnJnJ	nJ
n  SSKJn	Jn
  SSKJn  S nS nUR
                  (       Ga  US:X  a[  U" U5      (       aM  UR                   S	L a#  [        R"                  U-  [%        U* X1-  5      -  $ UR                   S
L a  [%        X!* 5      $ O`UR&                  (       aO  UR
                  (       a  [)        U5      nUR*                  (       a"  [)        U" U5      5      [        R,                  -  n[)        U5      S:  S	:X  d  US:X  a  SnGOUR.                  (       a  SnGOkU" U5      R.                  (       a  [)        U5      S:  S	:X  a  SnGO>U" U5      (       a  U	" S[        R0                  -  [        R,                  -  U-  U" [        R2                  X5" U5      -  S[        R0                  -  -  -
  5      -  5      nUR
                  (       a  U" U" U5      U-
  5      S:X  a	  U" U5      nOS nO U	" S[        R,                  -  [        R0                  -  U-  U" [        R2                  U" X:" U5      -  5      S-  [        R0                  -  -
  5      -  5      nUR
                  (       a  U" U" U5      U-
  5      S:X  a	  U" U5      nOS n Ub  U[%        X#U-  5      -  $ g ! [4         a    S n N#f = f)Nr   r   )rv   rI   rerH   r4   rF   )floorc                ~    [        U SS5      S:X  a  gU R                  5       u  pUR                  (       a  US:X  a  ggg)zJReturn True if the exponent has a literal 2 as the
denominator, else None.qNr   T)getattras_numer_denomr]   )ru   nds      r)   _halfPow._eval_power.<locals>._half  s?     1c4(A-'')<<AF %+<r,   c                l     U R                  SSS9nUR                  (       a  U$ g! [         a     gf = f)zHReturn ``e`` evaluated to a Number with 2 significant
digits, else None.r   TstrictN)evalfra   r   )ru   rvs     r)   _n2Pow._eval_power.<locals>._n2  s<    40B||!	 $) s   "& 
33r?   TFr   )r   r
   rQ   r]   is_polaris_extended_realrm   rv   rI   r   rH   rg   r4   rF   #sympy.functions.elementary.integersr   is_negativerT   r    rc   re   is_imaginaryrn   is_extended_nonnegativero   Halfr   )r(   exptrt   ru   r{   rv   rI   r   rH   r4   rF   r   r   r   s                 r)   rp   Pow._eval_power   s   !:D4<??AZZA+NNGA  !!! 7T{{==D0#$==$#6sA2qv#FF]]e3#&q%=0YY))F~~1Jq6FQJ4'16A..AU22A
t7KA4[[AaddF1??2473q61QTT6!2294 4 5A))c$q'A+.>!.C G 

Aaoo-add247affr!CF(|A~add'::;< =A ))c$q'A+.>!.C G  =SdF^##  * As   BL 3L LLc                
   U R                   U R                  p2UR                  (       Ga  UR                  (       Ga  UR                  (       a  X!-  S:X  a  [        R
                  $ SSKJn  UR                  (       a  UR                  (       a  UR                  (       a  [        U5      [        U5      [        U5      pvnUR                  5       nUS::  aG  Xh:  aB  UR                  5       S-  U:  a+  [        U" U5      5      n	[        [        XYXi-  -   U5      5      $ [        [        XVU5      5      $ SSKJn
  [        U[         5      (       a;  UR                  (       a*  UR"                  (       a  U
" X!5      nU
" [!        X#SS9U5      $ [        U[         5      (       ag  UR                  (       aU  UR"                  (       aC  [        U5      R                  5       nUS::  a#  U" U5      n	X" X95      -   nU
" [!        X#SS9U5      $ g	g	g	g	g	g	)
a  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   r;   r   )ModFrJ   N)r/   r4   r]   is_positiver
   rU   %sympy.functions.combinatorial.numbersr   r^   int
bit_lengthIntegerpowmodr   rL   r    r_   )r(   r   r/   r4   r   rt   ru   mmbphir   r   s               r)   	_eval_ModPow._eval_ModR  sw   0 IItxxc>>>cooo||AvvE3>>alld)SXs1va\\^8ALLNA,=,Bgaj/C"3q+q#9::s1|,, $$$T^^4|3t591==#s##3== V..0
 #!!*CC-Cs4u=qAA $ <I#) .>r,   c                    U R                   R                  (       a2  U R                   R                  (       a  U R                  R                  $ g g r%   )r4   r]   r   r/   rc   r'   s    r)   _eval_is_evenPow._eval_is_even  s3    88488#7#799$$$ $8r,   c                R    [         R                  U 5      nUSL a  U R                  $ U$ NT)r    _eval_is_extended_negativerV   )r(   ext_negs     r)   _eval_is_negativePow._eval_is_negative  s(    006d?>>!r,   c                    U R                   U R                  :X  a  U R                   R                  (       a  gg U R                   R                  (       a  U R                  R                  (       a  gg U R                   R
                  (       a9  U R                  R                  (       a  gU R                  R                  (       a  gg U R                   R                  (       a2  U R                  R                  (       a  U R                  R                  $ g U R                   R                  (       a  U R                  R                  (       a  gg U R                   R                  (       a  U R                  R                  (       aB  U R                  S-  nUR                  (       a  gUR                  (       a  UR                  SL a  gU R                  R                  (       a"  SSKJn  U" U R                   5      R                  $ g g )NTFr;   r   rE   )r/   r4   r   r   is_realis_extended_negativerc   rd   is_zeror   is_extended_nonpositiver   r]   rg   rF   )r(   r   rF   s      r)   _eval_is_extended_positivePow._eval_is_extended_positive  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                   U R                   [        R                  L a7  U R                  R                  (       d  U R                  R
                  (       a  gU R                  R                  (       aT  U R                   R                  (       a  U R                  R                  (       a  gU R                   R                  (       a  gg U R                  R                  (       a  U R                   R
                  (       a  gg U R                  R                  (       a  U R                   R
                  (       a  gg U R                  R                  (       a  U R                   R                  (       a  gg U R                  R                  (       a  U R                   R                  (       a  gg U R                  R
                  (       a  U R                   R                  (       a  gg g NFT)r4   r
   r   r/   
is_complexr   r   rd   rV   rc   is_extended_positiver   r   r   r'   s    r)   r   Pow._eval_is_extended_negative  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                2   U R                   R                  (       a9  U R                  R                  (       a  gU R                  R                  (       a  gg U R                   [
        R                  :X  a  U R                  [
        R                  L $ U R                   R                  SL Ga7  U R                   R                  (       a  U R                  R                  (       a  gU R                  R                  (       a  U R                   R                  $ U R                  R                  (       a  gU R                  R                  (       a  U R                  R                  (       a{  S[        U R                   5      -
  R                  (       a  U R                  R                  $ S[        U R                   5      -
  R                  (       a  U R                  R                  $ g g g U R                   R                  (       a  U R                  R                  (       a  gg g )NTFr   )r/   r   r4   r   r   r
   rX   NegativeInfinityrV   r   rf   is_nonnegativer   re   r   r'   s    r)   _eval_is_zeroPow._eval_is_zero  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                   U R                   u  pUR                  (       a!  UR                  SL a  UR                  (       a  gUR                  (       aH  UR                  (       a7  U[        R
                  L a  gUR                  (       d  UR                  (       a  gUR                  (       an  UR                  (       a]  UR                  (       d  UR                  (       a;  [        US-
  R                  5      (       a  [        US-   R                  5      (       a  gUR                  (       a6  UR                  (       a%  U R                  " U R                   6 nUR                  $ UR                  (       a&  UR                  (       a  US-
  R                  (       a  gUR                  (       a(  UR                  (       a  US-   R                  (       a  gg g g )NFTr   )r*   is_rationalr]   r   r
   rT   r   r   rV   r   r   ra   funcr^   )r(   rt   ru   checks       r)   _eval_is_integerPow._eval_is_integer  s   yy==||u$<<ALLAMM!1==<<AMMq{{all!a%))iQ.H.H;;1;;IItyy)E###==Q]]A/B/B==Q]]A/B/B 0C]=r,   c                Z   U R                   [        R                  L ar  U R                  R                  (       a  gU R                  R
                  (       a;  S[        R                  -  U R                  -  [        R                  -  R                  $ SSK	J
nJn  U R                   R                  nUc  U R                   R                  U:X  a;  U R                   R                  R
                  (       a  U R                  R
                  $ U R                   R                  [        :X  ab  U R                   R                   [        R                  L a;  U R                   R                  R
                  (       a  U R                  R
                  $ g U R                  R                  nUc  g U(       a  U(       a  U R                   R                  (       a  gU R                   R                  (       a  U R                  R                  (       a  gU R                  R                  (       a  U R                   R                   (       a  gU R                  R                  (       a  U R                  R"                  (       a  gU R                   R$                  (       a  U R                  R&                  (       a  gU(       a_  U R                  R$                  (       aD  U R                   R(                  SL a+  [        U R                   U R                  * 5      R                  $ U R                   R
                  nU R                  R
                  nU(       GaH  U R                  R                  (       a9  U R                  R                  (       a  gU R                  R*                  (       a  gOU(       a"  U" U R                   5      R
                  (       a  gU R                  R,                  (       ad  U R                  R/                  5       u  pxU(       a@  UR0                  (       a/  [3        U R                   U-  U R                   U-  SS9R                  $ OLU R                   [        R                  * [        R                  4;   a  U R                  S-  R                  SL a  gU(       Ga   U(       a  U R                   [        R4                  L a  gU R                  R7                  [        R                  5      nU(       a  U R                   R8                  (       a\  UR8                  (       aK  U R                   R:                  (       a0  U R                   S-
  R:                  (       a  UR:                  (       a  gXq" U R                   5      -  [        R                  -  R                  n	U	b  U	$ USL a  U(       a  [=        U R                  [>        5      (       a  U R                  R@                  S:X  a  gSSK!J"n
  U
" U R                   5      U R                  -  [        R                  -  nURF                  (       a  UR                  $ g g g )	NTr   r   )rF   r4   Fr   r   rv   )$r/   r
   rX   r4   r   r   rn   ro   rc   rg   rF   r   r    r   r   r]   is_extended_nonzeror   r   is_Rationalr   rd   rl   as_coeff_Addr^   MulrT   coeffr   
is_nonzerorL   Rationalprm   rv   r   )r(   rF   r4   real_breal_eim_bim_erw   aokrv   is               r)   _eval_is_extended_real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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$((H--$((**/@DIItxx',A||||#   &?r,   c                   U R                   [        R                  :X  a5  [        U R                  R
                  U R                  R                  /5      $ [        S U R                   5       5      (       a  U R                  5       (       a  gg g )Nc              3  8   #    U  H  oR                   v   M     g 7fr%   )r   ).0r   s     r)   	<genexpr>'Pow._eval_is_complex.<locals>.<genexpr>B  s     /Y||Y   T)
r/   r
   rX   r   r4   r   r   allr*   _eval_is_finiter'   s    r)   _eval_is_complexPow._eval_is_complex=  se    99TXX00$((2O2OPQQ/TYY///D4H4H4J4J 5K/r,   c                   U R                   R                  SL a  gU R                   R                  (       a7  U R                  R                  (       a  U R                  R
                  nUb  U$ g U R                   [        R                  :X  aV  SU R                  -  [        R                  [        R                  -  -  nUR                  (       a  gUR
                  (       a  gg U R                  R                  (       a&  SSKJn  U" U R                   5      R                  nUb  gU R                   R                  (       a  U R                  R                  (       a  U R                   R                  (       a  gU R                  R                  nU(       d  U$ U R                  R                  (       a  gSU R                  -  R                  nU(       a  U R                   R                   $ U$ U R                   R                  SL aK  SSKJn  U" U R                   5      U R                  -  [        R                  -  nSU-  R
                  n	U	b  U	$ g g )NFr   Tr   rE   r   )r/   r#   r   r4   r]   rd   r
   rX   ro   rn   rc   rg   rF   r   r   r   r   rm   rv   )
r(   r   frF   imlograthalfrv   r   isodds
             r)   _eval_is_imaginaryPow._eval_is_imaginaryE  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                H   U R                   R                  (       a  U R                   R                  (       a  U R                  R                  $ U R                   R
                  (       a  U R                  R                  (       a  gU R                  [        R                  L a  gg g r   )r4   r]   r   r/   rd   r   r
   rT   r'   s    r)   _eval_is_oddPow._eval_is_oddv  se    88xx##yy'''((TYY-=-=amm+ , r,   c                   U R                   R                  (       aS  U R                  R                  (       a  gU R                  R                  (       d  U R                  R
                  (       a  gU R                  R                  nUc  g U R                   R                  nUc  g U(       aI  U(       aA  U R                   R                  (       d$  [        U R                  R                  5      (       a  gg g g r   )	r4   r   r/   r   rf   r   rV   r   r   )r(   c1c2s      r)   r   Pow._eval_is_finite  s    88yy  yy$$		(<(<YY  :XX:"xx&&)DII4E4E*F*F +G 2r,   c                    U R                   R                  (       a<  U R                  R                  (       a   U R                  S-
  R                  (       a  gggg)z=
An integer raised to the n(>=2)-th power cannot be a prime.
r   FN)r/   r]   r4   r   r'   s    r)   _eval_is_primePow._eval_is_prime  s<     99DHH$7$7TXX\<V<V =W$7r,   c                   U R                   R                  (       a  U R                  R                  (       a  U R                   S-
  R                  (       a  U R                  S-
  R                  (       dT  U R                   S-   R                  (       a9  U R                  R                  (       a  U R                  R
                  (       a  gggggg)zC
A power is composite if both base and exponent are greater than 1
r   TN)r/   r]   r4   r   r   rc   r'   s    r)   _eval_is_compositePow._eval_is_composite  s     II  TXX%8%8ii!m((dhhl-G-GYY]''DHH,@,@TXXEUEU FV,@' &9 r,   c                .    U R                   R                  $ r%   )r/   r   r'   s    r)   _eval_is_polarPow._eval_is_polar  s    yy!!!r,   c                6	   SSK Jn  [        U R                  U5      (       ah  U R                  R                  X5      nU R                  R                  X5      n[        XS5      (       a  UR                  U5      $ U R                  XE5      $ SSKJnJ	n  S nXR                  :X  d#  X:X  a  U R                  [        R                  :X  ad  UR                  (       a6  [        U[        5      (       a!  U" U R                  R                  X5      5      $ X R                  R                  X5      -  $ [        XR                  5      (       aS  U R                  UR                  :X  a9  U" U R                  UR                  5      n	U	R                  (       a  [!        X)5      $ [        XR                  5      (       Ga  U R                  UR                  :X  Ga  U R                  R"                  SL a  U R                  R%                  [&        SS9n
UR                  R%                  [&        SS9nU" XU5      u  pnU(       a6  U R                  X-5      nUb   [)        U[!        UR                  U5      5      nU$ GOUR                  n/ n/ nUR+                  5       nU R                  R,                   H  nUR                  X5      nUR+                  5       n
U" XU5      u  pnU(       a)  UR/                  X--  5        Ub  UR/                  U5        M`  UR0                  (       d  UR2                  (       d    g UR/                  U5        M     U(       aF  [5        U6 nUR/                  US:w  a  [!        U R                  USS9OU R                  5        [)        U6 $ [        X5      (       d.  UR6                  (       a  UR                  [        R                  L a  U R                  R8                  (       a  U R                  R:                  (       a  UR                  R%                  [&        SS9n
U R                  U" U R                  5      -  R%                  [&        SS9nU" XU5      u  pnU(       a6  U R                  X-5      nUb   [)        U[!        UR                  U5      5      nU$ g g g g g )	Nr   rA   r   c                j   U u  p4Uu  pVXF:X  a  UR                   (       a  X5-  n [        USS9  SnXS4$ [        U[        5      (       d  U4n[        S U 5       5      (       d  g [        [        U5      [        U5      5      u  p{US:  a  US:w  a  US-  nU[        U5      -  nUS:X  a  SnO[        U/UQ76 nSX|4$ g! [         aZ    UR                  5       u  pU	R                  =(       a    U
R
                  =(       d    U	R                  =(       a    U
R                  n Nf = f! [         a     gf = f)	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  8   #    U  H  oR                   v   M     g 7fr%   )r]   )r   terms     r)   r   1Pow._eval_subs.<locals>._check.<locals>.<genexpr>  s     B646r   )FNNr   r   )r#   r   
ValueErrorr   r   r   r   rL   tupler   divmodr   )ct1ct2oldcoeff1terms1coeff2terms2r   combinesrt   ru   	remainderremainder_pows                r)   _checkPow._eval_subs.<locals>._check  s>   " !NF NF%% -Chs51#' $$.. &fe44"(B6BBB0)/vv)O7yA~1HC%7I$>,0M,/	,CF,CM#S77
 %= & h"0#$==#>QYY#g!BRBRBgWXWgWgh4 & $	s%   B> %AD% >A!D"!D"%
D21D2F)as_Addr   r   )rY   rB   rL   r4   r/   subs__rpow__r   rg   rF   r
   rX   is_Functionr   _subsra   r    rl   as_independentSymbolr   as_coeff_mulr*   appendr#   r]   Addis_Powr   r   )r(   r   newrB   rt   ru   r4   rF   r(  lr  r  r   r   r'  resultoargnew_lo_alr   newaexpos                         r)   
_eval_subsPow._eval_subs  s   Adhh,,		s(Ac'A!))zz!}$99Q?"C8	%t ))
tyyAFF/B:c8#<#<488>>#344HHNN3444 c99%%$((cgg*=DIIsxx(A{{3{"c99%%$))sxx*?xx%'hh--fU-Cgg,,VE,B)/#)>&!YYs0F$0!$VS=-I!J!M  ww'')A773,D++-C-3Cc-B*B]SX.(4 KK6  // KK% ' :DLLQRTYYu!EX\XaXab;&s  SZZCHH4FTXXMfMfkoktkt  lA  lA''(((>C88C		N*::u ; &C%+Cc%:"B]3, , SXX})EFF	  lAMf4FZr,   c                    U R                   u  pUR                  (       a8  UR                  S:X  a(  UR                  S:w  a  [	        UR                  5      U* 4$ X4$ )az  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*   r   r   r   r   )r(   rt   ru   s      r)   r   Pow.as_base_exp#  sF    . yy==QSSAX!##(133<!##tr,   c                F   SSK Jn  U R                  R                  U R                  R
                  p2U(       a  U" U R                  5      U R                  -  $ U(       a  U R                  U" U R                  5      -  $ USL a  USL a  [        U 5      nX@:w  a  U" U5      $ g g g )Nr   )adjointF)rm   rB  r4   r]   r/   r   r   )r(   rB  r   r   expandeds        r)   _eval_adjointPow._eval_adjoint?  s    @xx""DII$9$91499%txx//99gdhh///:!u*%d+Hx((   %:r,   c                h   SSK Jn  U R                  R                  U R                  R
                  p2U(       a  U" U R                  5      U R                  -  $ U(       a  U R                  U" U R                  5      -  $ USL a  USL a  [        U 5      nX@:w  a  U" U5      $ U R                  (       a  U $ g )Nr   )	conjugateF)rm   rG  r4   r]   r/   r   r   r   )r(   rw   r   r   rC  s        r)   _eval_conjugatePow._eval_conjugateK  s    Gxx""DII$9$91TYY<))99ak)):!u*%d+H{"  K !r,   c                    SSK Jn  U R                  [        R                  :X  a8  U R                  [        R                  U R                  R                  5       5      $ U R                  R                  U R                  R                  =(       d    U R                  R                  p2U(       a  U R                  U R                  -  $ U(       a  U" U R                  5      U R                  -  $ USL a  USL a  [        U 5      nX@:w  a  U" U5      $ g g g )Nr   )	transposeF)rm   rK  r/   r
   rX   r   r4   r]   r   rf   r   )r(   rK  r   r   rC  s        r)   _eval_transposePow._eval_transposeY  s    B9999QVVTXX%7%7%9::xx""TYY%9%9%RTYY=R=R199dhh&&TYY'11:!u*%d+H **   %:r,   c           	     "   U R                   nU R                  nU[        R                  :X  aY  SSKJn  [        X45      (       aC  UR                  (       a2  SSKJ	n  U" U R                  X#R                  5      /UR                  Q76 $ UR                  (       a  UR                  SS5      (       d$  UR                  SL d  UR!                  5       (       a  UR                  (       a1  [#        UR$                   Vs/ s H  o`R                  X&5      PM     sn6 $ UR                  (       a`  ['        UR$                  S SS9u  pxU(       aA  [#        U Vs/ s H  o`R                  X&5      PM     sn6 U[(        R*                  " U5      -  -  $ U $ s  snf s  snf )	za**(n + m) -> a**n*a**mr   )Sum)ProductforceFc                    U R                   $ r%   r"   xs    r)   <lambda>,Pow._eval_expand_power_exp.<locals>.<lambda>u  s
    q/?/?r,   Tbinary)r/   r4   r
   rX   sympy.concrete.summationsrO  rL   r#   sympy.concrete.productsrP  r   functionlimitsrl   getr   _all_nonneg_or_nonpposr   r*   r   r3  
_from_args)	r(   hintsrt   ru   rO  rP  rT  rw   ncs	            r)   _eval_expand_power_expPow._eval_expand_power_expg  s!   IIHH;5!!!a&6&6;tyyJJ7C!((CC887E22		U"a&>&>&@&@aff=fYYq_f=>>QVV%?M! <!Q1! < S^^B//0 0 > !=s   6FFc                n	   UR                  SS5      nU R                  nU R                  nUR                  (       d  U $ UR	                  SS9u  pVU(       a  U Vs/ s H(  n[        US5      (       a  UR                  " S0 UD6OUPM*     nnUR                  (       aX  UR                  (       a  [        Xd-  6 nO%[        USSS2    Vs/ s H  owS-  PM	     snU* -  6 nU(       a  U[        U6 U-  -  nU$ U(       d  U R                  [        U6 USS9$ [        U6 /n[        US S	S
9u  pS n[        X5      nUS	   nXS   -  n	US   nU[        R                     nU(       Ga  [        R                  n[        U5      S-  nUS:X  a  OUS:X  a  U	R                  U5        OUS:X  a]  U(       a6  UR!                  5       * nU[        R"                  La  UR                  U5        OUR                  [        R$                  5        OmU(       a6  UR!                  5       * nU[        R"                  La  UR                  U5        OUR                  [        R$                  5        U	R                  U5        AU(       d  UR&                  (       a  X-   U	-   nUn	GONUR                  (       a   e[        U5      S:  a  [        R"                  nU	(       d(  US   R(                  (       a  UUR!                  S5      -  n[        U5      S-  (       a  U* nU H  nUR                  U* 5        M     U[        R"                  La  U	R                  U5        OU(       ax  U	(       aq  US   R(                  (       aK  US   [        R$                  La5  U	R                  [        R$                  5        UR                  US   * 5        O#U	R+                  U5        OU	R+                  U5        AUnX-  n	[        R"                  nU(       a  UR,                  (       aN  [        US S	S
9u  nn[        U Vs/ s H+  o0R                  UR                  " UR.                  6 U5      PM-     sn6 nU[        U Vs/ s H  o0R                  X4SS9PM     sn6 -  nU	(       a  XR                  [        U	6 USS9-  nU$ s  snf s  snf s  snf s  snf )z(a*b)**n -> a**n * b**nrQ  F)split_1_eval_expand_power_baseNr?   r   c                    U R                   SL $ NF)r   rS  s    r)   rU  -Pow._eval_expand_power_base.<locals>.<lambda>  s    !2D2D2Mr,   TrW  c                    U [         R                  L a  [         R                  $ U R                  nU(       a  gUc  [        U R                  5      $ g r   )r
   rn   r   r   r   )rT  polars     r)   pred)Pow._eval_expand_power_base.<locals>.pred  sB    AOO#&JJE}!!";";<< r,   r;   r   r   r   c                    U R                   =(       a3    U R                  R                  =(       a    U R                  R                  $ r%   )r4  r4   r   r/   r_   rS  s    r)   rU  ri    s1    AHH 5;EE%%5;*+&&*:*:5;r,   r&   )r]  r/   r4   r`   args_cnchasattrrf  r^   r   r   r   r   r
   rn   lenr2  poprS   rT   r]   ra   extendr   r*   )r(   r`  rQ  rt   ru   cargsra  r   r   other
maybe_realrl  siftednonnegnegimagInonnor   npows                        r)   rf  Pow._eval_expand_power_base{  s   		'5)IIHHxxKJJuJ-	
  A 1788 ++4e4>?@   ||==bdBb2h7h"uh7:;B#u+q.(B	yyb1uy==r(B !(M	= j'Umaoo&AD	AAAvaQaGGI:D155(d+JJq}}-GGI:D155(d+JJq}}-Q ALLL5(EE ||## 3x!|EEQ!1!1OAs8a<AAMM1"% AEE>LLOq6##Aamm(CLL/MM3q6'*LL%S!EKEUU}}"5 +;!e $G$Q99QVVQVV_a8$GH#GA		!	7GHHB))CKU);;B	U 8| HGs   /R#R("2R-"R2
c           	        U R                   u  p#U nUR                  (       Gai  UR                  S:  GaX  UR                  (       GaF  UR                  (       d  [        UR                  UR                  -  5      nU(       d  U$ U R                  X#U-
  5      / pFU R                  X%5      nUR                  (       a  UR                  5       n[        R                  " U5       H  nUR                  X-  5        M     [        U6 $ [        U5      nUR                  (       Ga  / / pUR                    H8  nUR                  (       a  U	R                  U5        M'  U
R                  U5        M:     U	(       aM  [        U
6 n[        U	6 nUS:X  a  [!        X-  SS9X\-  U-  -   $ [!        XS-
  -  SS9n[#        X-  SS9X^-  U-  -   $ UR$                  (       Ga  UR'                  5       u  pUR                  (       Ga  UR                  (       Ga  UR                  (       d  UR                  (       d[  U R                  UR                  UR                  -  U5      nUR                  UR                  -  UR                  UR                  -  pOU R                  UR                  U5      nUR                  UR                  U-  pOIUR                  (       d6  U R                  UR                  U5      nXR                  -  UR                  pOSn[        U5      [        U5      SS4u  pnnU(       aC  US-  (       a  UU-  UU-  -
  UU-  UU-  -   nnUS-  nX-  X-  -
  SU-  U-  pUS-  nU(       a  MC  [(        R*                  nUS:X  a  UUU-  -   $ [        U5      U-  UU-  U-  -   $ U
nSSKJn  SSKJn  U" [5        U5      U5      nU" U/UQ76 $ US:X  a:  [        UR                    VVs/ s H  oR                     H  oU-  PM	     M     snn6 $ X%S-
  -  R                  5       nUR                  (       a;  [        UR                    VVs/ s H  nUR                     H  nX-  PM	     M     snn6 $ [        UR                    Vs/ s H  oU-  PM	     sn6 $ UR                  (       ag  UR                  S:  aW  UR                  (       aF  [7        UR                  5      UR                  :  a#  SU R                  X#* 5      R                  5       -  $ UR                  (       a  UR8                  (       a  UR;                  SS5      (       d$  UR<                  SL d  UR?                  5       (       a  / / nnUR                    HG  nUR8                  (       a"  UR                  U R                  X(5      5        M6  UR                  U5        MI     [A        UU R                  U[        RB                  " U5      5      /-   6 $ U$ s  snnf s  snnf s  snf )	zA(a + b + ..)**n -> a**n + n*a**(n-1)*b + .., n is nonzero integerr   r   Fdeepr   )multinomial_coefficients)basic_from_dictrQ  )"r*   r   r   rl   r^   r   r   r   r4  _eval_expand_multinomialr3  	make_argsr2  r   r#   is_Orderr   r   r_   as_real_imagr
   rn   sympy.ntheory.multinomialr  sympy.polys.polyutilsr  rq  re   ra   r]  r   r^  r   r_  )r(   r`  r/   r4   r7  r   radicalexpanded_base_nr  order_termsother_termsrt   r   r}  gr   krw   r   r{  r   r  r  expansion_dictmultir   tails                              r)   r  Pow._eval_expand_multinomial  s    II	???suuqyT[[[>>CEESUUN+!M&*iiAg&>V&*ii&8O&--+DDF ( #o >dl3 !? <'CA"""+-r[Azz#**1-#**1-	 # [)A[)AAv1!$UCac!eKK.qq5zF)!#E:QSUBB>>>  ,,.DA}}} ||#$<<$(IIaccACCi$;'(ss133wACC1$(IIacc1$5'(ssACCE1!" $		!##q 1A#$SS5!##q !A%(VSVQ%9
a 1u'(sQqSy!A#!)1 !Q#$39ac!eq!GA  a OO6#$qs7N#*1:a<!A#a%#77 OA!9#a&!!D '~:::6dii KiA1i KLL!E]DDFE||"$)) %1)Q%*ZZ &'S%/ &)) %1  2 2  #dii$@iuWi$@AAoo#%%!)CEE
SUU"tyyt,EEGGGZZDNN		'50I0I%)C)C)E)E b4E>>LL4!67KK%	 !
 $))D#..2F"G!HHJJM3 !L%1 %As    !W.
 "W4
:W:c           
     6
   U R                   R                  (       Ga  SSKJn  U R                   nU R                  R                  US9u  pVU(       d  U [        R                  4$ [        S[        S9u  pxUS:  a]  UR                  (       a>  UR                  (       a-  [        U R                  U-  5      n	X:w  a  U	R                  5       $ U" Xx-   U-  5      n	O{US-  US-  -   n
XZ-  U* U
-  peUR                  (       aH  UR                  (       a7  [        XV[        R                  -  -   U* -  5      n	X:w  a  U	R                  5       $ U" Xx-   U* -  5      n	U	R                  5        Vs/ s H  oS   S   S-  (       a  M  UPM     nn[        U VVVs/ s H  u  u  poX}-  -  X-  -  PM     snnn6 nU	R                  5        Vs/ s H  oS   S   S-  S:X  d  M  UPM     nn[        U VVVs/ s H  u  u  poX}-  -  X-  -  PM     snnn6 nU	R                  5        Vs/ s H  oS   S   S-  S	:X  d  M  UPM     nn[        U VVVs/ s H  u  u  poX}-  -  X-  -  PM     snnn6 nUR                  XuU[        R                  U-  05      UR                  XuX05      UR                  XuX* 05      -   4$ SS
KJnJnJn  U R                   R(                  (       Ga2  U R                  R                  US9u  pVUR*                  (       a{  U R                   [        R,                  L a^  UR.                  (       a  U [        R                  4$ UR0                  (       a*  [        R                  U R                  * U R                   -  4$ U R3                  U R3                  US5      U R3                  US5      -   [        R,                  5      nU" Xe5      nU R3                  XR                   5      UU R                   -  nnUU" U5      -  UU" U5      -  4$ U R                  [        R4                  L au  SSKJ n  U R                   R                  5       u  pVU(       a&  UR8                  " U40 UD6nUR8                  " U40 UD6nU" U5      U" U5      nnU" U5      U-  U" U5      U-  4$ SSKJnJn  U(       a>  SUS'   U R8                  " U40 UD6nURA                  S5      U:X  a  g U" U5      U" U5      4$ U" U 5      U" U 5      4$ s  snf s  snnnf s  snf s  snnnf s  snf s  snnnf )Nr   )polyr  za br   r   r   r;   r   )atan2cossinr4   )rI   r   Fcomplexignore)!r4   r^   sympy.polys.polytoolsr  r/   r  r
   rU   symbolsDummyra   r   rn   termsr3  r+  (sympy.functions.elementary.trigonometricr  r  r  r   r   r   r   r   r   rX   rg   expandrm   rI   r   r]  )r(   r  r`  r  r4   re_er   r   rt   exprmagr   raabbccre_partim_part1im_part3r  r  r  trptprw   r{   rI   r   rC  s                                 r)   r  Pow.as_real_imagp  sE   882((C//T/:JDQVV|#5e,DAax>>dnn-diin=D|#0022USL" Aga'!XuSyd>>dnn-t1??6J/JcT.QRD|#0022QUcTM* !JJL<Lq!Q!LA<qAq|xquHQUNqABG JJL=LqaDGaK1,<LA=B"Xae^BCH JJL=LqaDGaK1,<LA=B"Xae^BCHLL!1aood.B!CDMM1A,-q5>Q0RRT T 	ML88//T/:JD||AFF 2//<'//66TYYJ#999
 		$))D!,tyyq/AA166JAd!AYYq((+QtxxZBc"g:r#b'z))YY!&& B..0JD{{4151{{4151t9c$iqAt9Q;D	!++C#(i ;;t5u599X&(2xL"X,77$xD))g =A=B=Bs6   #S7:S7S<?TT(TT0TTc                    SSK Jn  U R                  R                  U5      nU R                  R                  U5      nXU" U R                  5      -  X0R                  -  U R                  -  -   -  $ r   )rg   rF   r/   diffr4   )r(   r{   rF   dbasedexps        r)   _eval_derivativePow._eval_derivative  sT    >		q!xx}}Qc$))n,uxx/?		/IIJJr,   c                ,   U R                  5       u  p#U[        R                  :X  a&  SSKJn  U" U R                  SS9R                  U5      $ UR                  U5      nUR                  (       d  UR                  U5      nUR                  (       at  UR                  (       ac  UR                  SL aT  UR                  5       X"R                  5       -  R                  U5      -  nU* nU R                  X#5      R                  5       $ U R                  X#5      $ )Nr   r  Fr   )r   r
   rX   rg   r4   _eval_evalf_evalfr^   r   r_   r   rG  r   r  )r(   precr/   r4   exp_functions        r)   r  Pow._eval_evalf  s    $$&	166>R59EEdKK{{4 ~~**T"C??t~~$2G2G52P>>#tnn.>'>&F&Ft&LLD$C99T'..00yy##r,   c                ,   U R                   R                  " U6 (       a  gU R                  R                  " U6 (       aW  [        U R                  R	                  U5      =(       a,    U R                   R
                  =(       a    U R                   S:  5      $ g)NFr   T)r4   hasr/   bool_eval_is_polynomialr^   r(   symss     r)   r  Pow._eval_is_polynomial  sj    88<<99==$		55d; 8##8)-Q9 9 r,   c                *   U R                   R                  (       a_  U R                  R                  (       aD  [	        [        U R                   R                  U R                  R                  /5      5      (       a  gU R                  " U R                  5       6 nUR                  (       d  UR                  $ UR                  5       u  p#UR                  (       a  UR                  (       a  gUR                  (       aa  UR                  (       a3  [	        UR                  5      (       d  UR                  (       a  gX#:X  a  gOUR                  (       a  UR                  $ U[        R                  L a%  UR                  (       a  UR                   (       a  gg g g )NTF)r4   r]   r/   r   r   r   r   r   r   r   r4  r   r   is_irrationalr
   rX   r   )r(   r   rt   ru   s       r)   _eval_is_rationalPow._eval_is_rational  s     HHDII$9$9i)=)=tyy?P?P(QRSSIIt'')*xx== }}==Q]] <<}}QYY''1+;+;6 yy ;}} ".} r,   c                   S nU R                   R                  (       d  U" U R                   5      (       a  gU R                   [        R                  L a  U R                  " U R
                  6 nUR                  U R                  :X  a  U R                  R                  (       a  U R                  R                  (       a  gU R                  [        R                  -  R                  (       a  gU R                  [        R                  [        R                  -  -  R                  (       a  gg g UR                  $ U R                  R                  (       a  U R                   R                  SL a  U R                  R                  $ U R                   R                  SL aM  U R                  R                  (       a  U R                   R                  $ U R                   R                  (       a  gU R                  R                  (       a  U R                   R                  $ g U R                   R                  (       a  U R                  R                  (       a  [        U R                   R                  5      (       a   [        U" U R                   5      5      (       d4  U R                   R                  SL d  U R                   R                  (       a  U R                  R                  $ g g g )Nc                B     U S-
  R                   $ ! [         a     gf = f)Nr   F)r   r  )r  s    r)   _is_one'Pow._eval_is_algebraic.<locals>._is_one  s)    q))) s    
TF)r/   r   r
   rX   r   r*   r4   r   is_algebraicro   r   rn   r   r   r]   r  )r(   r  r{   s      r)   _eval_is_algebraicPow._eval_is_algebraic  s   	 99		 2 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199''5099**xx+++ +	 )>#r,   c                    U R                   R                  " U6 (       a  gU R                  R                  " U6 (       a8  U R                  R                  U5      =(       a    U R                   R                  $ gr   )r4   r  r/   _eval_is_rational_functionr^   r  s     r)   r  Pow._eval_is_rational_function$  sS    88<<99==$9977= $##$ r,   c                   U R                   R                  X5      nU R                  R                  nU(       a  U$ U R                  R                  X5      nUSL a  U(       a  S$ S $ Uc  g U R                   R	                  X5      nUR
                  nU(       a  SnO [        UR                  [        U5      45      nUSL a  U$ Uc  g U(       d  U$ U R                  R	                  X5      R                  $ rh  )	r/   _eval_is_meromorphicr4   r^   r+  r   r   rV   r   )	r(   rT  r   
base_meromexp_integer	exp_meromrt   b_zerolog_defineds	            r)   r  Pow._eval_is_meromorphic.  s     YY33A9
hh))HH11!7	 &5/4/IINN1  K#Q[[)F2C$DEK% xx}}Q",,,r,   c                    U R                   R                  " U6 (       a  gU R                  R                  " U6 (       a8  U R                  R                  U5      =(       a    U R                   R                  $ gr   )r4   r  r/   _eval_is_algebraic_exprr   r  s     r)   r  Pow._eval_is_algebraic_exprS  sS    88<<99==$9944T: %$$% r,   c                   SSK JnJn  UR                  (       d,  UR	                  U5      (       d  UR	                  U5      (       a  X-  $ UR	                  [
        5      nUR	                  [
        5      (       aG  [        R                  (       a"  [        [        R                  U" U5      U-  US9$ U" U" U5      U-  US9$ SSKJnJn  U" U" U" U5      5      [        R                  U" U5      -  -   U-  5      $ )Nr   r   r   )rv   Abs)rg   r4   rF   r   r  r0  r   
exp_is_powr    r
   rX   rm   rv   r  rn   )	r(   r/   r<  kwargsr4   rF   rJ   rv   r  s	            r)   _eval_rewrite_as_expPow._eval_rewrite_as_exp]  s    C<<488C==DHHSMM:88F#88F !++1663t9T>HEE3t9T>H== FCIT)BBDHIIr,   c                P   U R                   (       d  U [        R                  4$ U R                  5       u  pUR	                  5       u  p4UR
                  nUR                  (       a(  U(       d!  UR                  (       d  UR                  5       nUR                  nUR                  (       d  U(       d  Un[        R                  nUR                  nU(       a  U* U* pCOUc  U(       d  Un[        R                  nU(       a  XCpCU* nUR                  (       aq  U[        R                  L a%  U[        R                  La  X0R                  XB5      4$ U[        R                  La&  U[        R                  L a  U R                  X25      U4$ U R                  X25      U R                  XB5      4$ r%   )r#   r
   rS   r   r   r   r`   r   rb   r]   r   is_nonpositiverf   r   )r(   r/   r4   r   r   neg_expint_expdnonposs           r)   r   Pow.as_numer_denomq  s6   "";$$&	""$ //::gcoo224G.. ""gAA""2rq_WAAq$C??AEEzaquun))A+++~!quu*yy(!++yy $))A"333r,   c                   [        U5      nUc  0 nU[        R                  L a/  U R                  R	                  [        R
                  U5      nUb  U$ [        U[        5      (       d  g UR                  5       u  pVU R                  5       u  pxUR                  (       aX  UR                  (       aG  U(       a@  UR                  (       a  UR	                  XVU-  -  U5      $ UR	                  USU-  -  U5      $ UR                  5       nU R                  R	                  XT5      nUc  g U R                  R                  U5      R	                  Xd5      nUc  [        R                  " XU5      $ U$ r3   )r   r
   rS   r4   matchesrU   rL   r   r   r\   r^   r   copyr/   xreplace)	r(   r  	repl_dictr   r   rt   ru   sbses	            r)   r  Pow.matches  s#   ~I 155=  3A} $%%! !!#<<BMMd}}zz!d)Y77::dQrTlI66NNIIa#9HHa ((.9<<I66r,   c                  ^2 SSK JnJn  SSKJn  SSKJn  SSKJn	  U R                  [        R                  L a  U R                  R                  XUS9n
U
R                  (       a  SU
-   $ U" U
R                  5       US5      nU[        R                  L a  U" X-  U5      $ U[        R                   L a  U $ X-
  nU" U5      =p[#        SU5       H  nXU-  -  nUR                  XUS9nX-  nM      X" X-  U5      -  nSSKJn  U" US	S
S9$ SSKJn  SSKJn  U" U S	S9R/                  5       n U R1                  5       u  nnUR2                  " U6 (       a
  [5        5       eUR3                  U5      (       a  U" UU" U5      -  5      R7                  XX4S9$ UbZ  UR3                  U5      (       aD  SSKJn  [=        SUU/S9u  nnUR?                  U" UUU-  -  5      U" U5      UU-  -   5      nUU-  n UR                  5       n SSK J!n  UR3                  U[        RD                  5      (       a  Ub
  [G        5       eURI                  U5      u  nnUR3                  U5      (       a  SSK)J*n  U" U5      RW                  5       nURX                  (       dm  URZ                  (       a  UR\                  (       dK  X R_                  XUS9:X  a8  U" UU" U5      -  5      R7                  XX4S9nUU" UU" U5      -  5      :X  a  U $ U$ URa                  XS9n[c        U5      U-
  RW                  5       nUU-  nURZ                  (       d
  [K        5       eUUU-  -
  m2T2R3                  [d        5      (       a  U	" U5      m2T2Rf                  (       a  U" UUU-  -  U5      $ URX                  (       a  UU-  nUU :w  a  UU" X-  U5      -  nU$ S n U24S jn! URI                  XS9u  nn"URh                  (       a:  U"[        Rj                  :X  a&  UR?                  S S 5      nURI                  XS9u  nn"U"Rl                  (       d  URo                  5       nURX                  (       a  UU-  $ URI                  XS9u  nn"U"Rl                  (       dC  UU-
  U-  Rq                  5       nURI                  XS9u  nn"U"Rl                  (       d
  [K        5       eSSK9J:n#  UR7                  UU#" T25      X4S9R                  5       n$0 n%[v        Rx                  " U$5       H4  nU " X5      u  n&n'U%R{                  U'[        Rj                  5      U&-   U%U''   M6     [        R|                  n([        Rj                  [        R|                  0n)U%n*SSK?J@n+JAn,  U(U"-  T2-
  Rf                  (       a|  U," UU(5      U+" U(5      -  n-U* H/  nU)R{                  U[        Rj                  5      U-U*U   -  -   U)U'   M1     U!" U*U%5      n*U([        R|                  -  n(U(U"-  T2-
  Rf                  (       a  M|  SSKBJCn.  UR                  (       d  URX                  (       a  URf                  (       a  UU-
  R                  X5      n/U." U/5      Rf                  (       a  U " UU-  SS U-  -  -  U5      u  n0n1O`U." U/5      RX                  (       a*  U " U" UU" U5      -  5      Ra                  XUS9U5      u  n0n1OU " UU-  U5      u  n0n1OU " UU-  U5      u  n0n1[        Rj                  nU) H  n'U'U1-   nUU)U'   U0-  UU-  -  -  nM     UR                  (       a7  URl                  (       a&  UU"-  U-
  R                  (       a  U[c        U 5      :X  d   UU" X-  U5      -  nU$ U$ ! [F        [J        [4        4 a~    UR7                  U[M        SU5      X4S9R                  5       nUR3                  [        RN                  [        RP                  5      (       a
  [K        5       eURI                  U5      u  nn GNf = f! [F        [J        4 a2    U" UUT2-  -  US5      S:X  a  UU-  UUU-  -  U-  -   s $ [K        5       ef = f! [J         a"    U" UU" U5      -  5      R7                  XX4S9s $ f = f)!Nr   r   )limit)Ordersympify)r   logxr   )powsimpTr4   )r  combine)	powdenest)_illegal)rQ  )r   r  cdir)Wildzc, ex)rs   exclude)	polygammar   )
logcombiner  r  r  c                V   [         R                  [         R                  p2[        R                  " U 5       HJ  nUR                  U5      (       a-  UR                  5       u  pSXQ:w  a   U R                  U5      s  $ MF  X$-  nML     X#4$ ! [         a    U [         R                  4s s  $ f = fr%   )	r
   rS   rU   r   r  r  r   leadtermr  )r  rT  r   r4   factorr/   s         r)   	coeff_exp$Pow._eval_nseries.<locals>.coeff_exp  s    3---::a== & 2 2 4IDy0#'==#33 ! OE . :	  * 0#'</0s   'BB('B(c                   > 0 n[        X5       H=  u  p4X4-   nUT:  d  M  UR                  U[        R                  5      X   X   -  -   X%'   M?     U$ r%   )r   r]  r
   rU   )d1d2rese1e2rx   maxpows         r)   mulPow._eval_nseries.<locals>.mul"  sP    C!"/W;!ggb!&&1BF26MACG * Jr,   c                    U R                   $ r%   )is_FloatrS  s    r)   rU  #Pow._eval_nseries.<locals>.<lambda>6  s    AJJr,   c                    [        U 5      $ r%   )r   rS  s    r)   rU  r  6  s    (1+r,   )ceiling)	factorialffrI   r?   )Grg   r4   rF   sympy.series.limitsr  sympy.series.orderr  sympy.core.sympifyr  r/   r
   rX   nseriesr  removeOr   rR   rangesympy.simplify.powsimpr  r  numbersr  trigsimpr   r  r   _eval_nseriessymbolr  r  replace'sympy.functions.special.gamma_functionsr  
EulerGammar  r  NotImplementedErrorr[   rQ   rP   sympy.simplify.simplifyr  cancelr   r_   r   _eval_as_leading_termas_leading_termr   r0  r   r  rU   r   simplifyr  r   r  r3  r  r]  rS   (sympy.functions.combinatorial.factorialsr  r  rm   rI   r]   dirr  )3r(   rT  r   r  r  r4   rF   r  r  r  e_seriese0r  
exp_seriesr  r   r  r  r  rt   ru   r  rw   rx   r  _r   r  r
  r   r  r  r  r  r   r  gpolygtermsco1r  r  r  tkr  r  r   rI   ndirincoinexr  s3                                                     @r)   r"  Pow._eval_nseries  sl    	D-,.99xx''T':H  8|#x'')1a0BQ'''QT1~%QZZA #B'J1a[!||A|6"
 ! %a.(J6:D%@@4%T*335!155(+5588qQx=..qD.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11!T1JJ!CF(m11!t1O#aAh-'K
a+a[1_$$&aC{{%''QqS::fQZFQqS1%%991ADyU14^#H			,::a:+DAq ::!qvv+ 		.0EFA::a:+DAq}}

Ayy!t::a:+DAq==!eQY&&(zz!z/1}}-//?WV_4KSSUMM%(D(GCB/#5F2J ) EEJsV|((q!HYq\)E!IIb!&&1E"R&L@b	 RBJA sV|((( 	<||		ammE;;q'D$x##&q!tR2a4L'8!<
dD!!&s1SV8}'D'DQX\'D']_`a
d&q!tQ/
d"1a4+JD$ffBdB59T>!b'))C  AaC!G3K3Kx~%QuQT1~% 
s
 /; 	!SAYTEMMOAuuQUUA--..)++::a=DAq		!v /0 	,Qq&y[!Q'1,!ta1fQh&)++	,D ' Q1SV8}2212PPQs8   ?A]/ ` a
 /B``5a<a
)a65a6c                   SSK JnJn  U R                  nU R                  nU R                  [        R
                  L av  UR                  XS9nUR                  US5      n	U	[        R                  L a  UR                  US5      n	U	R                  SL a  [        R
                  U	-  $ [        SU -  5      eUR                  U5      (       a   U" Xe" U5      -  5      n
U
R                  XUS9$ SSKJn   UR                  XUS9nUR                  (       d  UR                   (       a  UR                  U5      (       d  X|-
  R#                  X5      nU" U5      R                   (       a  U R%                  X5      SS	U-  -  -  $ U" U5      R&                  (       a/  U" U5      R)                  XUS9nUR                  SL a
  U" Xn-  5      $ U R%                  X5      $ ! [         a    U s $ f = f)
Nr   r   r  FzCannot expand %s around 0r   r  r?   r  )rg   r4   rF   r/   r
   rX   r+  r+  rQ   r  rf   r   r  rm   rI   r]   r   r.  r   r   r*  )r(   rT  r  r  r4   rF   ru   rt   rv   arg0ltrI   r   r7  log_leadterms                  r)   r*  Pow._eval_as_leading_termr  s   CHHII99##A#1C88Aq>Dquu}yyA5(vvt|#74@AAUU1XXQQZB%%a%>>?%%a%> <<AMM!%%(({{1+d8''  99Q?bBqD\99X%%#&q6#?#?SW#?#XL#//58"1>2299Q?"  s   1G G#"G#c                X    SSK Jn  U" U R                  U5      U R                  X!5      -  $ )Nr   )binomial)r-  rA  r4   r   )r(   r   rT  previous_termsrA  s        r)   _taylor_termPow._taylor_term  s#    E!$tyy66r,   c                &  > U R                   [        R                  La  [        TU ]  " X/UQ76 $ US:  a  [        R
                  $ US:X  a  [        R                  $ SSKJn  U" U5      nU(       a  US   nUb  XR-  U-  $ SSKJ	n  X!-  U" U5      -  $ )Nr   r   r  r?   )r  )
r/   r
   rX   supertaylor_termrU   rS   r  r-  r  )r(   r   rT  rB  r  r   r  rW   s          r)   rG  Pow.taylor_term  s    99AFF"7&q=n==q566M655L$AJr"A}uqy FtIaL  r,   c                "   U R                   [        R                  L ar  SSKJn  U" [        R
                  U R                  -  [        R                  S-  -   5      [        R
                  U" [        R
                  U R                  -  5      -  -
  $ g )Nr   )r  r   )r/   r
   rX   r  r  rn   r4   ro   )r(   r/   r4   r`  r  s        r)   _eval_rewrite_as_sinPow._eval_rewrite_as_sin  se    99Dqtxx/!$$q&89AOOCPQP_P_`d`h`hPhLi<iii r,   c                "   U R                   [        R                  L ar  SSKJn  U" [        R
                  U R                  -  5      [        R
                  U" [        R
                  U R                  -  [        R                  S-  -   5      -  -   $ g )Nr   )r  r   )r/   r
   rX   r  r  rn   r4   ro   )r(   r/   r4   r`  r  s        r)   _eval_rewrite_as_cosPow._eval_rewrite_as_cos  sg    99Dqtxx/01??3qW[W_W_G_bcbfbfghbhGhCi3iii r,   c                    U R                   [        R                  L a7  SSKJn  SU" U R
                  S-  5      -   SU" U R
                  S-  5      -
  -  $ g )Nr   )tanhr   r   )r/   r
   rX   %sympy.functions.elementary.hyperbolicrP  r4   )r(   r/   r4   r`  rP  s        r)   _eval_rewrite_as_tanhPow._eval_rewrite_as_tanh  sI    99BTXXaZ((1tDHHQJ/?+?@@ r,   c                   SSK JnJn  U[        R                  La  g UR
                  (       a  UR                  [        R                  [        R                  -  5      nU(       a{  UR                  (       ai  U" [        R                  U-  5      U" [        R                  U-  5      p[        Xu5      (       d'  [        X5      (       d  U[        R                  U-  -   $ g g g g g )Nr   )r  r  )r  r  r  r
   rX   r`   r   ro   rn   r_   rL   )	r(   r/   r4   r  r  r  r   cosinesines	            r)   _eval_rewrite_as_sqrtPow._eval_rewrite_as_sqrt  s    Eqvv::IIaddQ__45E"144:ADDJ!&..z47M7M!AOOD$888 8N. )u r,   c           
        U R                  5       u  p4[        UR                  XS96 nUR                  XS9u  pVUR                  (       a  UR	                  5       u  pxUR                  (       a  U[
        R                  :w  a  XW-  n	U R                  X95      n
[
        R                  nU
R                  (       d3  [        U	R                  U	R                  5      u  pU R                  X<5      n
XR                  U[        XXX-  U	R                  -  -   5      5      4$ [        XV5      nUR                  (       a  UR                  (       ax  UR                  XS9u  pxU R                  Xt5      R                  5       u  pUR                  5       u  pU[
        R                  L d  X:X  a  XR                  [        X5      U5      4$ [
        R                  U R                  X45      4$ )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
   rU   r   r  r   r   r`   rk   rS   )r(   r  rZ  rt   ru   cepehr  cehrw   r  icehr   mes                  r)   r\  Pow.as_content_primitive  sl   V !///MN'''E== ??$DA}}affdIIa%FF}}$SUUCEE2GD		!*A))A{214:~'FGGG==QXX))')GDA99Q?//1DAMMOEAAEEzRW ))K$5q999uudiio%%r,   c                   U nUR                  SS5      (       a  UR                  5       nUR                  5       u  pEUR                  S5      nU(       a  XE-  nXs:w  a  UR	                  5       $ UR                  " U6 nUR                  " U6 n	U	(       a   U(       a  gUR                  S5      nUSL a  gOU	c  g UR                  S5      $ )Nr,  Tr   F)r]  r,  r   equalsis_constant)
r(   wrtflagsr  rt   ru   bzr5  econbcons
             r)   rf  Pow.is_constant  s    99Z&&==?D!XXa[$C{((}}c"}}c"!BU{ \xx{r,   c                    U R                   u  p4UR                  U5      (       a8  UR                  U5      (       d!  UR                  XU-   5      nX5U-
  -  S-
  U -  $ g g r3   )r*   r  r+  )r(   r   steprt   ru   new_es         r)   _eval_difference_deltaPow._eval_difference_delta+  sU    yy5588AEE!HHFF1$h'E	NQ&$.. %8r,   r&   )returnztuple[Expr, Expr])rr  r   r%   )rt   Expr | complexru   rs  rr  r   )r   )Trh  )r   )FT)DrO   
__module____qualname____firstlineno____doc__r4  	__slots__r   propertyr*   r/   r4   r7   r	   rq   r   classmethodr   r   rp   r   r   r   r   r   r   r   r   r   r  r  r   r  r  r  r=  r   rD  rH  rL  rb  rf  r  r  r  r  r  r  r  r  r  r  r  r   r  r"  r*  rC  rG  rJ  rM  rR  rW  r\  rf  rp  __static_attributes____classcell__)rW   s   @r)   r    r       s   Wp F#I		 
	     ! ! ` `D " "#R$h6Bp%3:20*D$L/b "B8
)+(yvxtQ*fK$6%,N#-JJ(!4F Dzx #D 7 7! j
j
A
	9O&b./ /r,   r    power)r3  )r   r   )r   r[  )r0  r  r  N);
__future__r   typingr   r   	itertoolsr   r  r   cacher	   	singletonr
   r  r   r   r   r[  r   r   r   r   r   logicr   r   r   r   
parametersr   rK   r   r   r7   r   r   sympy.utilities.iterablesr   sympy.utilities.exceptionsr   sympy.utilities.miscr   sympy.multipledispatchr   r    r}  addobjectr3  r   r   r   r  r   r[  r#  r0  r  r  r&   r,   r)   <module>r     s    " *      %% % = = ) $ + * @ ' -Y/$ Y/v8 	7 		66
C    & ! * *r,   