
    oVh                      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% d dl&m'Z' d dl(m)Z) d dl*m+Z+  G d de      Z, e+d      Z-e-j]                  e/e/fe,       ddl.m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z: y)    )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                      e Zd ZdZdZdZer	ed;d       Zed<d       Z	ed<d       Z
ed        Zed=d>d       Zd?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* Z0d+ Z1d, Z2d- Z3d. Z4dAd/Z5dBd0Z6d1 Z7ed2        Z8 fd3Z9d4 Z:d5 Z;d6 Z<d7 Z=dCd8Z>d9 Z?d: Z@ xZAS )D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_commutativec                     y N selfs    @/home/dcms/DCMS/lib/python3.12/site-packages/sympy/core/power.pyargszPow.argsu   s        c                     | j                   d   S )Nr   r)   r&   s    r(   basezPow.basey       yy|r*   c                     | j                   d   S Nr   r,   r&   s    r(   expzPow.exp}   r.   r*   c                r    | j                   j                  t        u r| j                  j                  S t        S r$   )r1   kindr   r-   r   r&   s    r(   r3   zPow.kind   s&    88==J&99>>!  r*   c                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
stacklevelFAccumulationBoundsr   AccumBounds)	exp_polar)factor_termslog)fraction)sign)rC   im);r   evaluater   
relationalr5   
isinstance	TypeErrorr   r   type__name__r
   ComplexInfinityNaNInfinityr   OneNegativeOner   Zero	is_finite	__class__Exp1!sympy.calculus.accumulationboundsr=   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.exponentialr>   is_Atom	exprtoolsr?   rA   sympy.simplify.radsimprB   as_coeff_Mulr)   is_Add$sympy.functions.elementary.complexesrC   rD   ImaginaryUnitPi_eval_power__new__ _exec_constructor_postprocessorsr"   )clsberE   r-   r1   r5   argr=   r>   r?   rA   rB   cexnumdenrC   rD   sobjs                        r(   rl   zPow.__new__   s   (11H{qk 	+dJ':c:+F>?? #; 	Cc4()s),,/ 0 .3/I 
	 a'''uuajj quu%::%q}}-%aee2D66Mq}}-~~ 000~~. uuaff}uu4(((''+??166>M&s4'93tSWW;MNN --CNNcnn>>dkkT^^779;; 5DZZsO++uus#uus8''55Luu M{{t166'9*TS\B]7J?(59FFHEAr'|HC!#s+t0C vv#.Q DN;;1 #\$U%C$C DqGXYZY]Y]G] ]2^#$66AcE?2&&s+?Jll3c*2237#s#J"11Hc6H6H
r*   c                N    | j                   t        j                  k(  rddlm} |S y Nr   r@   )r-   r
   rS   rb   rA   )r'   argindexrA   s      r(   inversezPow.inverse   s    99BJr*   c                     dd| j                   fS )N      )rJ   rn   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integerr]   evenr    odd)r'   assumptionsr   r   ro   rp   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   )rq   rD   rerC   r1   rA   )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_denomrX   )rp   nds      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)evalfr\   r   )rp   rvs     r(   _n2zPow._eval_power.<locals>._n2  s<    40B||!	 $) s    $ 	00r:   TFr~   )r   r
   rL   rX   is_polaris_extended_realrh   rq   rD   r   rC   rb   r1   rA   #sympy.functions.elementary.integersr   is_negativerO   r    r^   r`   is_imaginaryri   is_extended_nonnegativerj   Halfr   )r'   exptro   rp   rv   rq   rD   r   rC   r1   rA   r   r   r   s                 r(   rk   zPow._eval_power   s   !1:qD4<??AZZA+NNGA  !! 7T{==D0#$==$#6sA2qv#FF]]e3#&q4%=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AdF^##  * 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   r6   r   )ModFrE   N)r-   r1   rX   is_positiver
   rP   %sympy.functions.combinatorial.numbersr   rY   int
bit_lengthIntegerpowmodr   rG   r    rZ   )r'   r   r-   r1   r   ro   rp   mmbphir   r   s               r(   	_eval_ModzPow._eval_ModR  s   0 IItxxc>>coo||qAvvE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$   )r1   rX   r   r-   r^   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)r    _eval_is_extended_negativerQ   )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 )NTFr6   r   r@   )r-   r1   r   r   is_realis_extended_negativer^   r_   is_zeror   is_extended_nonpositiver   rX   rb   rA   )r'   r   rA   s      r(   _eval_is_extended_positivez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                   | 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)r1   r
   r   r-   
is_complexr   r   r_   rQ   r^   is_extended_positiver   r   r   r&   s    r(   r   z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                   | 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   r1   r   r   r
   rS   NegativeInfinityrQ   r   ra   is_nonnegativer   r`   r   r&   s    r(   _eval_is_zeroz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                   | 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   )r)   is_rationalrX   r   r
   rO   r   r   rQ   r   r   r\   funcrY   )r'   ro   rp   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                
   | 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 r|rt=        | j                  t>              r| j                  j@                  dk(  ryddl!m"}
  |
| j                         | j                  z  t        j                  z  }|jF                  r|j                  S y y y )	NTr~   r   )rA   r1   Fr   r   rq   )$r-   r
   rS   r1   r   r   ri   rj   r^   rb   rA   r   r    r   r   rX   is_extended_nonzeror   r   is_Rationalr   r_   rg   as_coeff_AddrY   MulrO   coeffr   
is_nonzerorG   Rationalprh   rq   r   )r'   rA   r1   real_breal_eim_bim_err   aokrq   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$((H-$((**/@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>B  s     /q||/   T)
r-   r
   rS   r   r1   r   r   allr)   _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-   r"   r   r1   rX   r_   r
   rS   rj   ri   r^   rb   rA   r   r   r   r   rh   rq   )
r'   r   frA   imlograthalfrq   r   isodds
             r(   _eval_is_imaginaryz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                   | 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   )r1   rX   r   r-   r_   r   r
   rO   r&   s    r(   _eval_is_oddzPow._eval_is_oddv  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   )	r1   r   r-   r   ra   r   rQ   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-   rX   r1   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-   rX   r1   r   r   r^   r&   s    r(   _eval_is_compositezPow._eval_is_composite  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   r<   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$   )rX   )r   terms     r(   r   z1Pow._eval_subs.<locals>._check.<locals>.<genexpr>  s     B4tBr   )FNNr   r   )r"   r   
ValueErrorr   r   r   r   rG   tupler   divmodr   )ct1ct2oldcoeff1terms1coeff2terms2r   combinesro   rp   	remainderremainder_pows                r(   _checkzPow._eval_subs.<locals>._check  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   )rT   r=   rG   r1   r-   subs__rpow__r   rb   rA   r
   rS   is_Functionr   _subsr\   r    rg   as_independentSymbolr   as_coeff_mulr)   appendr"   rX   Addis_Powr   r   )r'   r  newr=   ro   rp   r1   rA   r  lr  r  r   r   r
  resultoargnew_lo_alr   newaexpos                         r(   
_eval_subszPow._eval_subs  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                  r6|j                  dk(  r'|j                  dk7  rt	        |j                        | 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)   r   r   r   r   )r'   ro   rp   s      r(   r   zPow.as_base_exp#  sJ    . yy1==QSSAX!##(133<!##!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)rh   r"  r1   rX   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)rh   r&  r1   rX   r-   r   r   r   )r'   rr   r   r   r#  s        r(   _eval_conjugatezPow._eval_conjugateK  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)rh   r)  r-   r
   rS   r   r1   rX   r   ra   r   )r'   r)  r   r   r#  s        r(   _eval_transposezPow._eval_transposeY  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$   r!   xs    r(   <lambda>z,Pow._eval_expand_power_exp.<locals>.<lambda>u  s    q/?/? r*   Tbinary)r-   r1   r
   rS   sympy.concrete.summationsr,  rG   r"   sympy.concrete.productsr-  r   functionlimitsrg   getr   _all_nonneg_or_nonpposr   r)   r   r  
_from_args)	r'   hintsro   rp   r,  r-  r1  rr   ncs	            r(   _eval_expand_power_expzPow._eval_expand_power_expg  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**nr.  F)split_1_eval_expand_power_baseNr:   r   c                    | j                   du S NF)r   r0  s    r(   r2  z-Pow._eval_expand_power_base.<locals>.<lambda>  s    !2D2D2M r*   Tr3  c                    | t         j                  u rt         j                  S | j                  }|ry|t        | j                        S y r   )r
   ri   r   r   r   )r1  polars     r(   predz)Pow._eval_expand_power_base.<locals>.pred  sB    AOO#&JJE}!!";";<< r*   r6   r   r   r~   c                z    | j                   xr. | j                  j                  xr | j                  j                  S r$   )r  r1   r   r-   rZ   r0  s    r(   r2  z-Pow._eval_expand_power_base.<locals>.<lambda>  s1    AHH 5;EE%%5;*+&&*:*: r*   r%   )r9  r-   r1   r[   args_cnchasattrrA  rY   r   r   r   r   r
   ri   lenr  poprN   rO   rX   r\   extendr   r)   )r'   r<  r.  ro   rp   cargsr=  r   r   other
maybe_realrF  siftednonnegnegimagInonnor   npows                        r(   rA  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_dictr.  )"r)   r   r   rg   rY   r   r   r   r  _eval_expand_multinomialr  	make_argsr  r   r"   is_Orderr   r   rZ   as_real_imagr
   ri   sympy.ntheory.multinomialr[  sympy.polys.polyutilsr\  rJ  r`   r\   r9  r   r:  r   r;  )r'   r<  r-   r1   r  r   radicalexpanded_base_nr   order_termsother_termsro   r   rV  gr   krr   r   rT  r   r[  r\  expansion_dictmultir   tails                              r(   r]  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   )polyrY  za br   r~   r   r6   r}   )atan2cossinr1   )rD   r   Fcomplexignore)!r1   rY   sympy.polys.polytoolsrm  r-   r`  r
   rP   symbolsDummyr\   r   ri   termsr  r  (sympy.functions.elementary.trigonometricrn  ro  rp  r   r   r   r   r   r   rS   rb   expandrh   rD   r   r9  )r'   rZ  r<  rm  r1   re_er   r   ro   exprmagr   raabbccre_partim_part1im_part3rn  ro  rp  trptprr   rv   rD   r   r#  s                                 r(   r`  zPow.as_real_imagp  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 ry   )rb   rA   r-   diffr1   )r'   rv   rA   dbasedexps        r(   _eval_derivativezPow._eval_derivative  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   rq  Fr   )r   r
   rS   rb   r1   _eval_evalf_evalfrY   r   rZ   r   r&  r   ry  )r'   precr-   r1   exp_functions        r(   r  zPow._eval_evalf  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)r1   hasr-   bool_eval_is_polynomialrY   r'   symss     r(   r  zPow._eval_is_polynomial  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)r1   rX   r-   r   r   r   r   r   r   r   r  r   r   is_irrationalr
   rS   r   )r'   r   ro   rp   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
   rS   r   r)   r1   r   is_algebraicrj   r   ri   r   r   rX   r  )r'   r  rv   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   )r1   r  r-   _eval_is_rational_functionrY   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 rC  )	r-   _eval_is_meromorphicr1   rY   r  r   r   rQ   r   )	r'   r1  r   
base_meromexp_integer	exp_meromro   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   )r1   r  r-   _eval_is_algebraic_exprr   r  s     r(   r  zPow._eval_is_algebraic_exprS  sW    488<<499==$9944T: %$$% r*   c                   ddl m}m} |j                  s"|j	                  |      s|j	                  |      r||z  S |j	                  t
              }|j	                  t
              rHt        j                  r%t        t        j                   ||      |z  |      S  | ||      |z  |      S ddlm}m}  | | ||            t        j                   ||      z  z   |z        S )Nr   r   r   )rq   Abs)rb   r1   rA   r   r  r  r   
exp_is_powr    r
   rS   rh   rq   r  ri   )	r'   r-   r  kwargsr1   rA   rE   rq   r  s	            r(   _eval_rewrite_as_expzPow._eval_rewrite_as_exp]  s    C<<488C=DHHSM:88F#88F !++1663t9T>HEE3t9T>H== 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$   )r"   r
   rN   r   r   r   r[   r   r]   rX   r   is_nonpositivera   r   )r'   r-   r1   r   r   neg_expint_expdnonposs           r(   r   zPow.as_numer_denomq  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 r0   )r   r
   rN   r1   matchesrP   rG   r   r   rW   rY   r   copyr-   xreplace)	r'   r{  	repl_dictr  r   ro   rp   sbses	            r(   r  zPow.matches  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                >  2 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                  ||      }tc        |      |z
  jW                         }||z  }|jZ                  s
tK               |||z  z
  22j3                  td              r |	|      22jf                  r ||||z  z  |      S |jX                  r||z  }|| k7  r| |||z  |      z  }|S d } 2fd}!	 |jI                  ||      \  }}"|jh                  r=|"t        jj                  k(  r*|j?                  d d       }|jI                  ||      \  }}"|"jl                  s|jo                         }|jX                  r||z  S |jI                  ||      \  }}"|"jl                  sB||z
  |z  jq                         }|jI                  ||      \  }}"|"jl                  s
tK               ddl9m:}# |j7                  | |#2      ||      j                         }$i }%tw        jx                  |$      D ]4  } | ||      \  }&}'|%j{                  |'t        jj                        |&z   |%|'<   6 t        j|                  }(t        jj                  t        j|                  i})|%}*ddl?m@}+mA}, |(|"z  2z
  jf                  rt |,||(       |+|(      z  }-|*D ].  }|)j{                  |t        jj                        |-|*|   z  z   |)|<   0  |!|*|%      }*|(t        j|                  z  }(|(|"z  2z
  jf                  rtddlBmC}. |j                  s|jX                  r|jf                  r||z
  j                  ||      }/ |.|/      jf                  r | ||z  dd |z  z  z  |      \  }0}1n_ |.|/      jX                  r. |  || ||      z        ja                  |||      |      \  }0}1n | ||z  |      \  }0}1n | ||z  |      \  }0}1t        jj                  }|)D ]  }'|'|1z   }||)|'   |0z  ||z  z  z  } |j                  r,|jl                  r ||"z  |z
  j                  r|tc        |       k(  s	 | |||z  |      z  }|S |S # tF        tJ        t4        f$ r} |j7                  |tM        d|      ||      j                         }|j3                  t        jN                  t        jP                        r
tK               |jI                  |      \  }}Y ]w xY w# tF        tJ        f$ r1  |||2z  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   )powsimpTr1   )rZ  combine)	powdenest)_illegal)r.  )r   r  cdir)Wildzc, ex)rn   exclude)	polygammar~   )
logcombiner  r  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
   rN   rP   r   r^  r  r   leadtermr   )r   r1  r   r1   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   r9  r
   rP   )d1d2rese1e2rs   maxpows         r(   mulzPow._eval_nseries.<locals>.mul"  sc    C!"b/ BB"W;!ggb!&&1BrF2b6MACGB Jr*   c                    | j                   S r$   )is_Floatr0  s    r(   r2  z#Pow._eval_nseries.<locals>.<lambda>6  s
    AJJ r*   c                    t        |       S r$   )r   r0  s    r(   r2  z#Pow._eval_nseries.<locals>.<lambda>6  s
    (1+ r*   )ceiling)	factorialffrD   r:   )Grb   r1   rA   sympy.series.limitsr  sympy.series.orderr  sympy.core.sympifyr  r-   r
   rS   nseriesr_  removeOr   rM   rangesympy.simplify.powsimpr  r  numbersr  trigsimpr   r  r   _eval_nseriessymbolr  ru  replace'sympy.functions.special.gamma_functionsr  
EulerGammar   r  NotImplementedErrorrV   rL   rK   sympy.simplify.simplifyr  cancelr   rZ   r   _eval_as_leading_termas_leading_termr   r  r   r  rP   r   simplifyry  r   r  r  r^  r9  rN   (sympy.functions.combinatorial.factorialsr  r  rh   rD   rX   dirr  )3r'   r1  r   r  r  r1   rA   r  r  r  e_seriese0r  
exp_seriesr   r   r  r  r  ro   rp   r  rr   rs   r  _r   r  r  r   rg  r}  r  r  r   r  gpolygtermsco1r  rh  rw  tkr  r  r   rD   ndirincoinexr  s3                                                     @r(   r  zPow._eval_nseries  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+a[1_$$&aC{{%''QqS::fQZFQqS1%%991ADyU1a4^#H			,::ad:+DAq ::!qvv+ 		.0EFA::ad:+DAq}}

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		!v /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  r:   r  )rb   r1   rA   r-   r
   rS   r  r  rL   r  ra   r   r  rh   rD   rX   r   r  r   r   r  )r'   r1  r  r  r1   rA   rp   ro   rq   arg0ltrD   r   r  log_leadterms                  r(   r  zPow._eval_as_leading_termr  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  r1   r   )r'   r   r1  previous_termsr  s        r(   _taylor_termzPow._taylor_term  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  r:   )r  )
r-   r
   rS   supertaylor_termrP   rN   r  r  r  )r'   r   r1  r  r  r   r  rR   s          r(   r  zPow.taylor_term  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   )rp  r~   )r-   r
   rS   rx  rp  ri   r1   rj   )r'   r-   r1   r<  rp  s        r(   _eval_rewrite_as_sinzPow._eval_rewrite_as_sin  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   )ro  r~   )r-   r
   rS   rx  ro  ri   r1   rj   )r'   r-   r1   r<  ro  s        r(   _eval_rewrite_as_coszPow._eval_rewrite_as_cos  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
   rS   %sympy.functions.elementary.hyperbolicr  r1   )r'   r-   r1   r<  r  s        r(   _eval_rewrite_as_tanhzPow._eval_rewrite_as_tanh  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   )rp  ro  )rx  rp  ro  r
   rS   r[   r   rj   ri   rZ   rG   )	r'   r-   r1   r  rp  ro  r   cosinesines	            r(   _eval_rewrite_as_sqrtzPow._eval_rewrite_as_sqrt  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.
        )rc  clear)r   _keep_coeffas_content_primitiver   r   r
   rP   r   r   r   r   r[   rf   rN   )r'   rc  r  ro   rp   cepehr  cehrr   r}  icehr   mes                  r(   r  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)r9  r  r   equalsis_constant)
r'   wrtflagsr{  ro   rp   bzr  econbcons
             r(   r$  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 r0   )r)   r  r  )r'   r   stepro   rp   new_es         r(   _eval_difference_deltazPow._eval_difference_delta+  sW    yy1558AEE!HFF1a$h'E	NQ&$.. %8r*   )returnztuple[Expr, Expr])r.  r   r$   )ro   Expr | complexrp   r/  r.  r   )r   )TrC  )r   )FT)BrJ   
__module____qualname____doc__r  	__slots__r   propertyr)   r-   r1   r3   r	   rl   r{   classmethodr   r   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r$  r'  r*  r>  rA  r]  r`  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r$  r-  __classcell__)rR   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)r  )r   r   )r   r  )r  rv  ru  N);
__future__r   typingr   r   	itertoolsr   r  r   cacher	   	singletonr
   r{  r   r   r   r7  r   r   r   r   r   logicr   r   r   r   
parametersr   rF   r   r   r3   r   r   sympy.utilities.iterablesr   sympy.utilities.exceptionsr   sympy.utilities.miscr   sympy.multipledispatchr   r    r7  addobjectr  r  r   r   r  r   r  r  r  rv  ru  r%   r*   r(   <module>rE     s    " *      %% % = = ) $ + * @ ' -Y/$ Y/v8 	7 		66
C    & ! * *r*   