
    Qi                      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-.                    e/e/fe,           ddl.m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z: dS )    )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dEd            ZedFd            Z	edFd	            Z
ed
             ZedGdHd            ZdId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)dJd,Z*d- Z+d. Z,d/ Z-d0 Z.d1 Z/d2 Z0d3 Z1d4 Z2d5 Z3d6 Z4dKd8Z5dLd:Z6d; Z7ed<             Z8 fd=Z9d> Z:d? Z;d@ Z<dA Z=dMdBZ>dC Z?dD Z@ xZAS )N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_commutativereturntuple[Expr, Expr]c                    d S N selfs    h/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/sympy/core/power.pyargszPow.argsu   s    C    r   c                    | j         d         S )Nr   r+   r(   s    r*   basezPow.basey       y|r,   c                    | j         d         S Nr   r.   r(   s    r*   expzPow.exp}   r0   r,   c                N    | j         j        t          u r| j        j        S t          S r&   )r3   kindr   r/   r   r(   s    r*   r5   zPow.kind   s!    8=J&&9>!  r,   NbExpr | complexec                   |t           j        }t          |          }t          |          }ddlm} t          ||          st          ||          rt          d          ||fD ]@}t          |t                    s)t          dt          |          j
        dddd	           A|rO|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    rI|t          j        k    r8ddlm}  |t3          ||j                  t3          ||j                            S nb|j        r|j        s|j        rM|j        r|j         s|j!        r8|"                                r$|j#        r| }n|j$        rt3          | |           S t          j        ||fv rt          j        S |t          j        u r,tK          |          j&        rt          j        S t          j        S ddl'm(}	 |j)        s	|t          j        urt          ||	          sddl*m+}
 ddl'm,} ddl-m.}  |
|d
          /                                \  }} ||          \  }}t          ||          r#|j0        d         |k    rt          j        ||z  z  S |j1        roddl2m3}m4}  | ||                    }|j!        rL|rJ| | |
|d
                     |t          j5        z  t          j6        z  z   k    rt          j        ||z  z  S |7                    |          }||S t          j8        | ||          }| 9                    |          }t          |t2                    s|S |j:        o|j:        |_:        |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)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"   )clsr6   r8   rJ   r/   r3   r:   argrB   rC   rD   rF   rG   cexnumdenrH   rI   sobjs                        r*   rq   zPow.__new__   s   (1H{{qkk 	+*****dJ'' 	@:c:+F+F 	@>??? #; 	 	Cc4(( )s)),   .3/I 
 
 
 
  >	a'''uaj  qu%% &:%q}-- "%ae2D2D "6Mq}-- %~ 1 00~.. uaf}}u4(('+???16>>MMMMMM&;s4'9'93tSW;M;MNNN " - ,CN ,cn ,>,.2k,=A^,7799, ; , 5DDZ ,sOO++us##us88' !5Lu MLLLLL{ 3t16'9'9*TS\B]B]'9777777JJJJJJ??????(L5999FFHHEAr'x||HC!#s++ 3t0C0C v#. 3QQQQQQQQ DDNN; 31 3 #\\$U%C%C%C$C D DqGXYZY]G] ]2^ 2^#$6AcE?2&&s++?Jl3c**22377#s## 	J"1Hc6H
r,   r   c                @    | j         t          j        k    rddlm} |S d S Nr   rE   )r/   r
   rX   rg   rF   )r)   argindexrF   s      r*   inversezPow.inverse   s-    9BBBBBBJtr,   c                    dd| j         fS )N      )rO   rs   s    r*   	class_keyzPow.class_key   s    !S\!!r,   c                t   ddl m}m} |                                 \  }} ||                    |          |          ru|                                rc ||                    |          |          rt          | |          S  ||                    |          |          rt          | |           S d S d S d S )Nr   )askQ)	sympy.assumptions.askr   r   as_base_expintegerrb   evenr    odd)r)   assumptionsr   r   r6   r8   s         r*   _eval_refinezPow._eval_refine   s    00000000!!13qyy||[)) 	#a.H.H.J.J 	#s166!99k** #A2qzz!QUU1XX{++ #QB

{"		# 	# 	# 	## #r,   c                   |                                  \  }}|t          j        u r||z  |z  S d }|j        rd}nw|j        rd}nl|j        dddlm}m}m	}m
} ddlm}	m}
 ddlm} d }d }|j        r|dk    rS ||          rG|j        d	u r$t          j        |z  t%          | ||z            z  S |j        d
u rt%          ||           S nI|j        rB|j        rt)          |          }|j        r%t)           ||                    t          j        z  }t)          |          dk     d	k    s|dk    rd}ny|j        rd}nn ||          j        rt)          |          dk     d	k    rd}nC ||          r |	dt          j        z  t          j        z  |z   |t          j        | ||          z  dt          j        z  z  z
            z            }|j        r' | ||          |z
            dk    r ||          }nd }n	  |	dt          j        z  t          j        z  |z   |t          j         || |
|          z            dz  t          j        z  z
            z            }|j        r' | ||          |z
            dk    r ||          }nd }n# t4          $ r d }Y nw xY w||t%          |||z            z  S d S )Nr   r   )rt   rI   rerH   r3   rF   )floorc                    t          | dd          dk    rdS |                                 \  }}|j        r|dk    rdS dS dS )zZReturn True if the exponent has a literal 2 as the
                denominator, else None.qNr   T)getattras_numer_denomr]   )r8   nds      r*   _halfzPow._eval_power.<locals>._half  sZ     1c4((A--4''))1<  AFF4   FFr,   c                j    	 |                      dd          }|j        r|S dS # t          $ r Y dS w xY w)zXReturn ``e`` evaluated to a Number with 2 significant
                digits, else None.r   TstrictN)evalfra   r   )r8   rvs     r*   _n2zPow._eval_power.<locals>._n2  sW    400B| "!	" ")   DDs   $ 
22r?   TFr   )r   r
   rQ   r]   is_polaris_extended_realrm   rt   rI   r   rH   rg   r3   rF   #sympy.functions.elementary.integersr   is_negativerT   r    rc   re   is_imaginaryrn   is_extended_nonnegativero   Halfr   )r)   exptr6   r8   ry   rt   rI   r   rH   r3   rF   r   r   r   s                 r*   rp   zPow._eval_power   s   !!1::qD4<? I	AAZ G	AA+NNNNNNNNNNNNGGGGGGGGAAAAAA        ! . 77uT{{ 1=D00#$=$#6sA2qv#FF]e33#&q4%==0Y 7) #FF~ 71JJq6FFQJ4''166AA. 
!AARUU2 !A
t7K7KAAU4[[ !AadF1?24733q661QT6!2294 94 4 5 5A) !cc$$q''A+.>.>!.C.C DGG 

Aao-ad247afrr!CCFF(||A~ad'::;;< = =A ) !cc$$q''A+.>.>!.C.C DGG )   AAA =SAdF^^## =s   	BJ   J/.J/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          |          }}}|
                                }|dk    r]||k    rW|
                                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                     ro|j        rj|j        ret          |          
                                }|dk    r@ ||          }	|	 |
||	          z   } |
t!          ||d          |          S d	S d	S d	S d	S d	S d	S )
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   r;   r   )ModFrJ   N)r/   r3   r]   is_positiver
   rU   %sympy.functions.combinatorial.numbersr   r^   int
bit_lengthIntegerpowmodr   rL   r    r_   )r)   r   r/   r3   r   r6   r8   mmbphir   r   s               r*   	_eval_ModzPow._eval_ModR  sI   0 Itxc> 	Bco 	B| qAvEEEEEE -3> -al -d))SXXs1vva1\\^^88RALLNNA,=,B,Bggajj//C"3q##+q#9#9:::s1a||,,,      $$$ > >T^ >s4||s3tS59991===#s## B B3= B VV..00
 ##!'!**CC-C3s4u===qAAA9	B 	B 	B 	B(B B B B B B
 $#r,   c                R    | j         j        r| j         j        r| j        j        S d S d S r&   )r3   r]   r   r/   rc   r(   s    r*   _eval_is_evenzPow._eval_is_even  s:    8 	%48#7 	%9$$	% 	% 	% 	%r,   c                P    t                               |           }|du r| j        S |S NT)r    _eval_is_extended_negativerV   )r)   ext_negs     r*   _eval_is_negativezPow._eval_is_negative  s+    0066d??>!r,   c                "   | j         | j        k    r| j         j        rdS d S | j         j        r| j        j        rdS d S | j         j        r| j        j        rdS | j        j        rdS d S | j         j        r| j        j	        r| j        j        S d S | j         j
        r| j        j        rdS d S | j         j        rX| j        j        r%| j        dz  }|j        rdS |j        r|j        du rdS | j        j        rddlm}  || j                   j        S d S d S )NTFr;   r   rE   )r/   r3   r   r   is_realis_extended_negativerc   rd   is_zeror   is_extended_nonpositiver   r]   rg   rF   )r)   r   rF   s      r*   _eval_is_extended_positivezPow._eval_is_extended_positive  s|   9  y0 t Y" 	3x t Y+ 	3x tx u Y 	3x( (x''( (Y. 	3x u Y# 		3x" !HqL9  4< !AI$6$6 5x$ 3FFFFFFs49~~22		3 		33 3r,   c                   | j         t          j        u r| j        j        s| j        j        rdS | j        j        r*| j         j        r| j        j        rdS | j         j	        rdS d S | j        j
        r| j         j        rdS d S | j        j        r| j         j        rdS d S | j        j        r| j         j        rdS d S | j        j        r| j         j	        rdS d S | j        j        r| j         j	        rdS d S d S NFT)r3   r
   r   r/   
is_complexr   r   rd   rV   rc   is_extended_positiver   r   r   r(   s    r*   r   zPow._eval_is_extended_negative  sL   8qvy# ty'A u9) 	x 49#6 tx u Y+ 	x( u Y 	x( u Y. 	x/ u Y. 	x u Y' 	x u	 	 r,   c                Z   | j         j        r| j        j        rdS | j        j        rdS d S | j         t
          j        k    r| j        t
          j        u S | j         j        du r| j         j        r| j        j        rdS | j        j	        r| j         j
        S | j        j        rdS | j        j
        r\| j        j        rRdt          | j                   z
  j        r| j        j        S dt          | j                   z
  j        r| j        j        S d S d S d S | j         j        r| j        j	        rdS d S d S )NTFr   )r/   r   r3   r   r   r
   rX   NegativeInfinityrV   r   rf   is_nonnegativer   re   r   r(   s    r*   _eval_is_zerozPow._eval_is_zero  sc   9 	x, t1 u Y!&  8q111Y%''y" 
9tx'9 
9u% 9y,,( 9u% 9$(*C 9DI&< 9888#di..(> 9888	9 9 9 99 9Y  	TX%9 	5	 	 	 	r,   c                   | j         \  }}|j        r|j        du r	|j        rdS |j        r'|j        r |t          j        u rdS |j        s|j        rdS |j        rE|j        r>|j        s|j        r0t          |dz
  j
                  rt          |dz   j
                  rdS |j        r|j        r | j        | j          }|j        S |j        r|j        r|dz
  j        rdS |j        r|j        r|dz   j        rdS d S d S d S )NFTr   )r+   is_rationalr]   r   r
   rT   r   r   rV   r   r   ra   funcr^   )r)   r6   r8   checks       r*   _eval_is_integerzPow._eval_is_integer  sY   y1= 	|u$$$u< 	AL 	AM!!t 1= t< 	AM 	q{ 	al 	!a%)) iQ.H.H u; 	$1; 	$DIty)E##= 	Q] 	A/B 	5= 	Q] 	A/B 	5	 	 	 	 	 	r,   c                H   | j         t          j        u rC| j        j        rdS | j        j        r)dt          j        z  | j        z  t          j        z  j        S ddl	m
}m} | j         j        }|y| j         j        |k    r| j         j        j        r| j        j        S | j         j        t          k    r5| j         j         t          j        u r| j         j        j        r| j        j        S d S | j        j        }|d S |rx|rv| j         j        rdS | j         j        r| j        j        rdS | j        j        r| j         j        rdS | j        j        r| j        j        rdS | j         j        r| j        j        rdS |r:| j        j        r.| j         j        du r t          | j         | j                   j        S | j         j        }| j        j        }|r| j        j        r| j        j        rdS | j        j        rdS n|r || j                   j        rdS | j        j        rM| j                                        \  }}|r.|j        r't3          | j         |z  | j         |z  d          j        S n3| j         t          j         t          j        fv r| j        dz  j        du rdS |r|r| j         t          j        u rdS | j                            t          j                  }|r`| j         j        r+|j        r$| j         j        r| j         dz
  j        r	|j        rdS | || j                   z  t          j        z  j        }	|	|	S |du rg|rgt=          | j        t>                    r| j        j         dk    rdS ddl!m"}
  |
| j                   | j        z  t          j        z  }|j#        r|j        S d S d S d S )	NTr   r   )rF   r3   Fr   r   rt   )$r/   r
   rX   r3   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   rt   r   )r)   rF   r3   real_breal_eim_bim_eru   aokrt   is               r*   _eval_is_extended_realzPow._eval_is_extended_real  s   9x( At& A!/)$(2147@@CCCCCCCC+>y~$$)C$x,,y~$$16)A)AdimF`)Ax,,F*>F 	!f 	!y- 
!t2 !tx7W !t$ !)F !t$ !)@ !t/ !8' ! 5 	>dh3 	>	8IU8R8Rty48),,==y%x$ 	!x" !8# !4X_ ! 5! 	!##di..5 	!t !x,,..1 U U	1dilUD D DDTU/AAAHQJ*e33 5 
	d 
	yAM))tq//A 9( %Q] %y+ %Q0J %q| %$uDI&qt+7>IU??v?$(H-- $(*//u@@@@@@DItx',A| $|# ???
$ $r,   c                    | j         t          j        k    r%t          | j        j        | j        j        g          S t          d | j        D                       r| 	                                rdS d S d S )Nc              3  $   K   | ]}|j         V  d S r&   )r   ).0r   s     r*   	<genexpr>z'Pow._eval_is_complex.<locals>.<genexpr>B  s$      //q|//////r,   T)
r/   r
   rX   r   r3   r   r   allr+   _eval_is_finiter(   s    r*   _eval_is_complexzPow._eval_is_complex=  s{    9TX0$(2OPQQQ//TY///// 	D4H4H4J4J 	4	 	 	 	r,   c                   | j         j        du rdS | j         j        r| j        j        r| j        j        }||S d S | j         t          j        k    r8d| j        z  t          j        t          j	        z  z  }|j
        rdS |j        rdS d S | j        j        rddlm}  || j                   j        }|dS | j         j        rW| j        j        rK| j         j        rdS | j        j        }|s|S | j        j        rdS d| j        z  j        }|r| j         j        S |S | j         j        du r9ddlm}  || j                   | j        z  t          j        z  }d|z  j        }	|	|	S d S d S )NFr   Tr   rE   r   )r/   r"   r   r3   r]   rd   r
   rX   ro   rn   rc   rg   rF   r   r   r   r   rm   rt   )
r)   r   frF   imlograthalfrt   r   isodds
             r*   _eval_is_imaginaryzPow._eval_is_imaginaryE  s   9#u,,59! 	x" ho?J9DHQ_ 45Ay ux t48  	BBBBBBC	NN/E u9% 	 $(*C 	 y$  uh* J8&   5dhJ2D 5#y44K9%..@@@@@@DItx',AqSLE  /. ! r,   c                    | j         j        rG| j         j        r| j        j        S | j         j        r| j        j        rdS | j        t          j        u rdS d S d S r   )r3   r]   r   r/   rd   r   r
   rT   r(   s    r*   _eval_is_oddzPow._eval_is_oddv  sk    8 	x# y''( TY-= tam++t	 	
 ,+r,   c                   | j         j        r(| j        j        rdS | j        j        s| j        j        rdS | j        j        }|d S | j         j        }|d S |r)|r)| j         j        st          | j        j                  rdS d S d S d S r   )	r3   r   r/   r   rf   r   rV   r   r   )r)   c1c2s      r*   r   zPow._eval_is_finite  s    8 	y  uy$ 	(< tY :FX:F 	" 	x& )DI4E*F*F t	 	 	 	 r,   c                `    | j         j        r| j        j        r| j        dz
  j        rdS dS dS dS )zM
        An integer raised to the n(>=2)-th power cannot be a prime.
        r   FN)r/   r]   r3   r   r(   s    r*   _eval_is_primezPow._eval_is_prime  sP     9 	DH$7 	TX\<V 	5	 	 	 	 	 	r,   c                    | j         j        rS| j        j        rI| j         dz
  j        r| j        dz
  j        s'| j         dz   j        r| j        j        r| j        j        r
dS dS dS dS dS dS )zS
        A power is composite if both base and exponent are greater than 1
        r   TN)r/   r]   r3   r   r   rc   r(   s    r*   _eval_is_compositezPow._eval_is_composite  s     I  	TX%8 	i!m(	.2hl-G	Y]'	,0H,@	EIXEU	 4	 	 	 	 	 	 	 	 	 	r,   c                    | j         j        S r&   )r/   r   r(   s    r*   _eval_is_polarzPow._eval_is_polar  s    y!!r,   c                d   ddl m} t          | j        |          rq| j                            ||          }| j                            ||          }t          ||          r|                    |          S |                     ||          S ddlm}m	} d }|| j        k    s||k    rs| j        t          j        k    r^|j        r9t          |t                    r$ || j                            ||                    S || j                            ||          z  S t          || j                  r=| j        |j        k    r- || j        |j                  }	|	j        rt!          ||	          S t          || j                  r| j        |j        k    r| j        j        du r| j                            t&          d          }
|j                            t&          d          } ||
||          \  }}}|r=|                     ||          }|#t)          |t!          |j        |                    }|S n|j        }g }g }|                                }| j        j        D ]}|                    ||          }|                                }
 ||
||          \  }}}|r0|                    ||z             ||                    |           o|j        s
|j        s d S |                    |           |rIt5          | }|                    |dk    rt!          | j        |d          n| j                   t)          | S t          ||          s|j        r|j        t          j        u r| j        j        r| j        j        r|j                            t&          d          }
| j         || j                  z                      t&          d          } ||
||          \  }}}|rE|                     ||          }|#t)          |t!          |j        |                    }|S d S d S d S d S d S )	Nr   rA   r   c                X   | \  }}|\  }}||k    r|j         rb||z  }	 t          |d           d}nC# t          $ r6 |                                \  }	}
|	j        r|
j        p|	j        o|
j        }Y nw xY w||dfS t          |t                    s|f}t          d |D                       sdS 	 t          t          |          t          |                    \  }}|dk     r|dk    r|dz  }|t          |          z  }|dk    rd}nt          |g|R  }d||fS # t          $ r Y nw xY wdS )	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  $   K   | ]}|j         V  d S r&   )r]   )r   terms     r*   r   z1Pow._eval_subs.<locals>._check.<locals>.<genexpr>  s$      BB4tBBBBBBr,   )FNNr   r   )r"   r   
ValueErrorr   r   r   r   rL   tupler   divmodr   )ct1ct2oldcoeff1terms1coeff2terms2r   combinesr6   r8   	remainderremainder_pows                r*   _checkzPow._eval_subs.<locals>._check  s   " !NFF NFF% " -Chs51111#'% h h h"001#$=#>QY#g!BRBgWXWgh
 $S$.. &fe44 +"(BB6BBBBB 100)/vv)O)OY77yA~~1HC%7I$>>,0MM,/	,CF,C,C,CM#S-77%    %$s"   3 =A32A3/A*D 
D'&D'F)as_Addr   r   )rY   rB   rL   r3   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   r6   r8   r3   rF   r  lr  r  r   r   r  resultoargnew_lo_alr   newaexpos                         r*   
_eval_subszPow._eval_subs  s   AAAAAAdh,, 	#	sC((Ac3''A![)) %zz!}}$99Q??"CCCCCCCC8	% 8	% 8	%t $)s

tyAF/B/B 5:c8#<#< 5s48>>#s33444DHNN34444 c49%% 	#$(cg*=*=DIsx((A{ #3{{"c49%% "	'$)sx*?*?x%''h--fU-CCg,,VE,BB)/S#)>)>&C "!YYsC00F$0!$VS=-I-I!J!J!M" w'')) & &A773,,D++--C-3VCc-B-B*B] S#X...(4 KK666  /   KK%%%% ':DLLQRTYu!E!E!E!EX\Xabbb;&sC   		SZ 		CH4F4FTXMf4Fkokt  lA4F'(((>>C8CC	NN*::u ; & &C%+VCc%:%:"B] 3,, , SX})E)EFFF 5G4F 		 		4F4F4F4F
 r,   c                    | j         \  }}|j        r-|j        dk    r"|j        dk    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)   r6   r8   s      r*   r   zPow.as_base_exp#  sK    . y1= 	$QSAXX!#((13<<!##!tr,   c                   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          |           }|| k    r ||          S d S d S d S )Nr   )adjointF)rm   r$  r3   r]   r/   r   r   )r)   r$  r   r   expandeds        r*   _eval_adjointzPow._eval_adjoint?  s    @@@@@@x"DI$91 	0749%%tx// 	09ggdh////::!u**%d++H4wx((( :**r,   c                   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          |           }|| k    r ||          S | j        r| S d S )Nr   )	conjugateF)rm   r(  r3   r]   r/   r   r   r   )r)   ru   r   r   r%  s        r*   _eval_conjugatezPow._eval_conjugateK  s    GGGGGGx"DI$91 	*1TY<<)) 	*9aakk))::!u**%d++H4q{{"  	K	 	r,   c                   ddl m} | j        t          j        k    r7|                     t          j        | j                                                  S | j        j        | j        j        p| j        j	        }}|r| j        | j        z  S |r || j                  | j        z  S |du r$|du r"t          |           }|| k    r ||          S d S d S d S )Nr   )	transposeF)rm   r+  r/   r
   rX   r   r3   r]   r   rf   r   )r)   r+  r   r   r%  s        r*   _eval_transposezPow._eval_transposeY  s    BBBBBB999QVTX%7%7%9%9:::x"TY%9%RTY=R1 	'9dh&& 	29TY''11::!u**%d++H4 y*** :**r,   c                6     j          j        }t          j        k    rJddlm} t          ||          r4|j        r-ddlm	}  | 
                    |j                  g|j        R  S |j        r|                    dd          sj        du s|                                rt|j        rt#           fd|j        D              S j        rKt'          |j        d d	          \  }}|r.t#           fd
|D              t)          j        |          z  z  S  S )za**(n + m) -> a**n*a**mr   )Sum)ProductforceFc                <    g | ]}                     |          S r'   r   r   xr6   r)   s     r*   
<listcomp>z.Pow._eval_expand_power_exp.<locals>.<listcomp>s  s%    ===TYYq!__===r,   c                    | j         S r&   r!   r4  s    r*   <lambda>z,Pow._eval_expand_power_exp.<locals>.<lambda>u  s	    q/? r,   Tbinaryc                <    g | ]}                     |          S r'   r2  r3  s     r*   r5  z.Pow._eval_expand_power_exp.<locals>.<listcomp>w  s%     < < <Q1a < < <r,   )r/   r3   r
   rX   sympy.concrete.summationsr.  rL   r"   sympy.concrete.productsr/  r   functionlimitsrl   getr   _all_nonneg_or_nonpposr   r+   r   r  
_from_args)r)   hintsr8   r.  r/  ru   ncr6   s   `      @r*   _eval_expand_power_expzPow._eval_expand_power_expg  sj   IH;;555555!S!! Da&6 D;;;;;;wtyyAJ77C!(CCCC8 	07E22 	0	U""a&>&>&@&@" ?=====af===>> 0QV%?%?MMM2 0 < < < < <! < < < S^B///0 0r,   c                                         dd          } j        } j        |j        s S |                    d          \  }}|rfd|D             }j        rGj        rt          |z   }n t          d |ddd         D              z   }|r|t          | z  z  }|S |s                     t          | d          S t          | g}t          |d	 d
          \  }}d }	t          ||	          }
|
d
         }||
d         z  }|
d         }|
t          j                 }|rt          j        }t          |          dz  }|dk    rn|dk    r|                    |           n|dk    r[|r9|                                 }|t          j        ur|                    |           n|                    t          j                   no|r9|                                 }|t          j        ur|                    |           n|                    t          j                   |                    |           ~|sj        r||z   |z   }|}n7j        rJ t          |          dk    rt          j        }|s%|d         j        r||                    d          z  }t          |          dz  r| }|D ]}|                    |            |t          j        ur|                    |           n|ru|rs|d         j        rP|d         t          j        ur<|                    t          j                   |                    |d                     n+|                    |           n|                    |           ~|}||z  }t          j        }|rLj        r,t          |d d
          \  }}t           fd|D              }|t           fd|D              z  }|r"|                     t          | d          z  }|S )z(a*b)**n -> a**n * b**nr0  F)split_1c                N    g | ]!}t          |d           r |j        di n|"S )_eval_expand_power_baser'   )hasattrrI  )r   r   rC  s     r*   r5  z/Pow._eval_expand_power_base.<locals>.<listcomp>  sV        1788@+!+44e444>?  r,   c                    g | ]}|d z  S )r?   r'   r   r   s     r*   r5  z/Pow._eval_expand_power_base.<locals>.<listcomp>  s    777q"u777r,   Nr?   r   c                    | j         du S NF)r   r7  s    r*   r8  z-Pow._eval_expand_power_base.<locals>.<lambda>  s    !2D2M r,   Tr9  c                |    | t           j        u rt           j        S | j        }|rdS |t          | j                  S d S r   )r
   rn   r   r   r   )r4  polars     r*   predz)Pow._eval_expand_power_base.<locals>.pred  sH    AO##&JE t}!!";<<< }r,   r;   r   r   r   c                @    | j         o| j        j        o| j        j        S r&   )r  r3   r   r/   r_   r7  s    r*   r8  z-Pow._eval_expand_power_base.<locals>.<lambda>  s%    AH 5;E%5;*+&*: r,   c                V    g | ]%}                      |j         |j                   &S r'   )r   r+   r   r6   r8   r)   s     r*   r5  z/Pow._eval_expand_power_base.<locals>.<listcomp>  s1    GGGQ499VQVQV_a88GGGr,   c                @    g | ]}                     |d           S )Fr   r2  rT  s     r*   r5  z/Pow._eval_expand_power_base.<locals>.<listcomp>  s+    GGGA		!Q	77GGGr,   )r@  r/   r3   r`   args_cncr^   r   r   r   r   r
   rn   lenr  poprS   rT   r]   ra   extendr   )r)   rC  r0  r6   cargsrD  r   other
maybe_realrQ  siftednonnegnegimagIr   nonnor   npowr8   s   ``                  @r*   rI  zPow._eval_expand_power_base{  s   		'5))IHx 	KJJuJ--	r
  	     B | = <bdBB77b2h777:;B )#u+q.(B	 >yyb1uy===r(B !(M(M  z	= 	= 	= j$''Umao& 	AD		AAAvvaQa .GGII:D15((d+++JJq}---- .GGII:D15((d+++JJq}---Q  "	AL "	SL5(EEE |### 3xx!||E $Q!1 $OAs88a< A & &AMM1"%%%%AE>>LLOOO " "q6# &Aam(C(CLL///MM3q6'****LL%%%%S!!!ERKEU 	I} I"5 +; +;! ! !e GGGGG$GGGH#GGGGGGGGHHB 	<$))CKU);;;B	r,   c           	     	   | j         \  }| }|j        r|j        dk    rj        r|j        st          |j        |j        z            }|s|S |                     ||z
            g }}|                     |          }|j        r|	                                }t          j        |          D ]}|                    ||z             t          | S t          |          }j        rSg g }	}j         D ]4}
|
j        r|                    |
           |	                    |
           5|rit          |	 }t          | }|dk    rt!          ||z  d          ||z  |z  z   S t!          ||dz
  z  d          }t#          ||z  d          ||z  |z  z   S j        rp                                \  }}
|j        rQ|
j        rI|j        sv|
j        sB|                     |j        |
j        z  |          }|j        |
j        z  |j        |
j        z  }
}nc|                     |j        |          }|j        |j        |
z  }
}n6|
j        s-|                     |
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  }|:t(          j        }|dk    r|||z  z   S t          |          |z  ||z  |z  z   S |	}ddlm} ddlm}  |t5          |          |          } ||g|R  S |dk    rt          fdj         D              S |dz
  z  	                                j        rt          fd	j         D              S t          fd
j         D              S |j        r[|j        dk     rPj        rIt7          |j                  |j        k    r,d|                     |           	                                z  S |j        rj        r|                    dd          sj        du s|                                rg g }}|j         D ]H}|j        r*|                    |                     |                     3|                    |           ItA          ||                     t          j!        |                    gz    S |S )zA(a + b + ..)**n -> a**n + n*a**(n-1)*b + .., n is nonzero integerr   r   Fdeepr   )multinomial_coefficients)basic_from_dictc                .    g | ]}j         D ]}||z  S r'   r.   )r   r   gr/   s      r*   r5  z0Pow._eval_expand_multinomial.<locals>.<listcomp>U  s,     K K K K KA1 K K K Kr,   c                .    g | ]}j         D ]}||z  S r'   r.   )r   r   rk  multis      r*   r5  z0Pow._eval_expand_multinomial.<locals>.<listcomp>Y  sC     %1 %1 %1Q%*Z%1 %1 ! &'qS %1 %1 %1 %1r,   c                    g | ]}|z  S r'   r'   )r   r   rm  s     r*   r5  z0Pow._eval_expand_multinomial.<locals>.<listcomp>]  s    $@$@$@QuW$@$@$@r,   r0  )"r+   r   r   rl   r^   r   r   r   r  _eval_expand_multinomialr  	make_argsr  r   r"   is_Orderr   r   r_   as_real_imagr
   rn   sympy.ntheory.multinomialrh  sympy.polys.polyutilsri  rW  re   ra   r@  r   rA  r   rB  )r)   rC  r3   r  r   radicalexpanded_base_nr   order_termsother_termsr6   r   rc  rk  r   kru   r   ra  r   rh  ri  expansion_dictr   tailr/   rm  s                            @@r*   ro  zPow._eval_expand_multinomial  s    I	c? r	suqyyT[y> (CESUN++ (!M&*iicAg&>&>VG&*iia&8&8O&- G+DDFF ( #o > > 4 4d7l3333<'CA" MB+-r[ . .Az .#**1----#**1---- 	C[)A[)AAvv1!Q$UCCCac!eKK.q1q5zFFF)!A#E:::QqSUBB> !8  ,,..DAq} 8 8 | "#$< 2$(IIacACi$;$;'(s13wAC1$(IIac1$5$5'(sACE1!" " $		!#q 1 1A#$QS5!#qAA !A%(VVSVVQ%9
1a $ 1u ''(sQqSy!A#!)1 !Q#$Q319ac!eqA!GA   $ O66#$qs7N#*1::a<!A#a%#77 ONNNNNAAAAAA!9!9#a&&!!D!D '~:::::66 K K K Kdi K K KLL!AE]DDFFE| B" %1 %1 %1 %1$) %1 %1 %1  2 2  #$@$@$@$@di$@$@$@AAo 	#%!)))CE

SU""tyyt,,EEGGGGZ 	DN 			'50I0I 	%%)C)C)E)E% b4E & &> &LL4!6!67777KK%%%%$))D#.2F2F"G"G!HHJJMr,   c                X   | j         j        rddlm} | j         }| j                            |          \  }}|s| t          j        fS t          dt                    \  |dk    rQ|j
        r8|j
        r1t          | j        |z            }|| k    r|                                S  |z   |z            }ns|dz  |dz  z   }||z  | |z  }}|j
        rD|j
        r=t          ||t          j        z  z   | z            }|| k    r|                                S  |z   | z            }d |                                D             }	t          fd|	D              }
d	 |                                D             }	t          fd
|	D              }d |                                D             }	t          fd|	D              }|
                    |t          j        |z  i          |                    ||i          |                    || i          z   fS ddlm}m}m} | j         j        r| j                            |          \  }}|j        rK| j         t          j        u r8|j        r| t          j        fS |j        rt          j        | j         | j         z  fS |                     |                     |d          |                     |d          z   t          j                  }	 |||          }|                     |	| j                   || j         z  }}| ||          z  | ||          z  fS | j        t          j        u rrddlm } | j                                         \  }}|r |j        |fi |} |j        |fi |} ||           ||          }} ||          |z   ||          |z  fS ddlm}m} |rDd|d<    | j        |fi |}|                     d          |k    rd S  ||           ||          fS  ||            ||           fS )Nr   )polyrf  za br   r   c                4    g | ]}|d          d         dz  |S )r   r   r   r'   rL  s     r*   r5  z$Pow.as_real_imag.<locals>.<listcomp>  s)    <<<q!Q!<<<<r,   c                8    g | ]\  \  }}}||z  z  |z  z  S r'   r'   r   aabbccr   r6   s       r*   r5  z$Pow.as_real_imag.<locals>.<listcomp>  s1    AAA|xBBq"uHQUNAAAr,   c                <    g | ]}|d          d         dz  dk    |S )r   r   r;   r'   rL  s     r*   r5  z$Pow.as_real_imag.<locals>.<listcomp>  .    ===qAaDGaK1,<,<,<,<,<r,   c                8    g | ]\  \  }}}||z  z  |z  z  S r'   r'   r  s       r*   r5  z$Pow.as_real_imag.<locals>.<listcomp>  1    BBBR"R2Xae^BBBr,   c                <    g | ]}|d          d         dz  dk    |S )r   r   r;   r   r'   rL  s     r*   r5  z$Pow.as_real_imag.<locals>.<listcomp>  r  r,   c                8    g | ]\  \  }}}||z  z  |z  z  S r'   r'   r  s       r*   r5  z$Pow.as_real_imag.<locals>.<listcomp>  r  r,   )atan2cossinr3   )rI   r   Fcomplexignore)!r3   r^   sympy.polys.polytoolsr}  r/   rr  r
   rU   symbolsDummyra   r   rn   termsr  r  (sympy.functions.elementary.trigonometricr  r  r  r   r   r   r   r   r   rX   rg   expandrm   rI   r   r@  )r)   rg  rC  r}  r3   re_er   exprmagrre_partim_part1im_part3r  r  r  trptpru   ry   rI   r   r%  r   r6   s                           @@r*   rr  zPow.as_real_imagp  s   8 &	T222222(C//T/::JD$ $QV|#5e,,,DAqaxx> 3dn 3-din==Dt||#00222tUSL" " Aga'!#XuSyd> 3dn 3-td1?6J/JcT.QRRDt||#00222tQUcTM** =<DJJLL<<<AAAAAAqAAABG==DJJLL===ABBBBBBBBCH==DJJLL===ABBBBBBBBCHLL!T1aod.B!CDDMM1dAt,--q$D5>Q0R0RRT T 	MLLLLLLLLL8 &	*//T/::JD$| :AF 2 2/ (<'/ :6TYJ#999
 		$))D!,,tyyq/A/AA16JJAdD!!AYYq$(++QtxZBcc"gg:r##b''z))Y!&  BBBBBB..00JD$ 2"t{411511"t{4115113t99cc$iiqA3t99Q;D		!++CCCCCCCC 	*#(i &4;t55u5599X&&(224BxLL""X,,77r$xxD))r,   c                    ddl m} | j                            |          }| j                            |          }| | || j                  z  || j        z  | j        z  z   z  S r|   )rg   rF   r/   diffr3   )r)   ry   rF   dbasedexps        r*   _eval_derivativezPow._eval_derivative  sg    >>>>>>	q!!x}}Qtcc$)nn,utx/?	/IIJJr,   c                6   |                                  \  }}|t          j        k    r+ddlm}  || j        d                              |          S |                    |          }|j        s|                    |          }|j        rz|j	        rs|j
        du rj|                                ||                                z                      |          z  }| }|                     ||                                          S |                     ||          S )Nr   r  Fr   )r   r
   rX   rg   r3   _eval_evalf_evalfr^   r   r_   r   r(  r   r  )r)   precr/   r3   exp_functions        r*   r  zPow._eval_evalf  s   $$&&	c16>>RRRRRR<5999EEdKKK{{4  ~ 	#**T""C? 	1t~ 	1$2G52P2P>>##tdnn.>.>'>&F&Ft&L&LLD$C99T3''..000yys###r,   c                     | j         j        | rdS  | j        j        | r>t          | j                            |          o| j         j        o
| j         dk              S dS )NFr   T)r3   hasr/   bool_eval_is_polynomialr^   r)   symss     r*   r  zPow._eval_is_polynomial  ss    48< 	549=$ 		55d;; 8#8)-Q9 9 9 4r,   c                   | j         j        r@| j        j        r4t	          t          | j         j        | j        j        g                    rdS  | j        | 	                                 }|j
        s|j        S |	                                \  }}|j        r	|j        rdS |j        r;|j        r&t	          |j                  s|j        rdS ||k    rdS n|j        r|j        S |t          j        u r|j        r|j        rdS d S d S d S )NTF)r3   r]   r/   r   r   r   r   r   r   r   r  r   r   is_irrationalr
   rX   r   )r)   r   r6   r8   s       r*   _eval_is_rationalzPow._eval_is_rational  s8    H 	DI$9 	i)=ty?P(QRRSS	4DIt''))*x 	!= }}1= 	Q] 	 5< 	!} !QY''  1+;  4664  !y ;;}  u ;   r,   c                T   d }| j         j        s || j                   rdS | j         t          j        u r | j        | j         }|j        | j        k    ra| j        j        rQ| j        j        rdS | j        t          j	        z  j
        rdS | j        t          j        t          j	        z  z  j
        rdS d S d S |j        S | j        j
        rh| j         j        du r| j        j        S | j         j        du r&| j        j        r| j         j        S | j         j        rdS | j        j        r| j         j        S d S | j         j        rh| j        j        r^t          | j         j                  rt           || j                             s| j         j        du s| j         j        r| j        j
        S d S d S d S )Nc                :    	 | dz
  j         S # t          $ r Y dS w xY w)Nr   F)r   r   )r  s    r*   _is_onez'Pow._eval_is_algebraic.<locals>._is_one  s6    q))   uus   	 
TF)r/   r   r
   rX   r   r+   r3   r   is_algebraicro   r   rn   r   r   r]   r  )r)   r  ry   s      r*   _eval_is_algebraiczPow._eval_is_algebraic  s   	 	 	 9 	,	 2 2 	,4Y!&  	49%Av""8& $x, $$u(14-4 $$u(AOAD$89F $#t$ $
$ $ ~%X! 	,y%..x''y E))8&  911Y+  4x# .y--. .Y# 	,(= 	,49,-- ,ggdi0011,9'5009* 1x++	, 	, 	, 	, 10r,   c                     | j         j        | rdS  | j        j        | r&| j                            |          o| j         j        S dS r   )r3   r  r/   _eval_is_rational_functionr^   r  s     r*   r  zPow._eval_is_rational_function$  sY    48< 	549=$ 	977== $#$ 4r,   c                   | j                             ||          }| j        j        }|r|S | j                            ||          }|du r|rdnd S |d S | j                             ||          }|j        }|rd}n#t          |j        t          |          f          }|du r|S |d S |s|S | j                            ||          j        S rN  )	r/   _eval_is_meromorphicr3   r^   r  r   r   rV   r   )	r)   r4  r   
base_meromexp_integer	exp_meromr6   b_zerolog_defineds	            r*   r  zPow._eval_is_meromorphic.  s     Y33Aq99
h) 	H11!Q77	 &/554/4INN1a    	FKK#Q[)F2C2C$DEEK% 4 	x}}Q"",,r,   c                     | j         j        | rdS  | j        j        | r&| j                            |          o| j         j        S dS r   )r3   r  r/   _eval_is_algebraic_exprr   r  s     r*   r  zPow._eval_is_algebraic_exprS  sY    48< 	549=$ 	944T:: %$% 4r,   c                   ddl m}m} |j        s*|                    |          s|                    |          r||z  S |                    t
                    }|                    t
                    rMt          j        r(t          t          j
         ||          |z  |          S  | ||          |z  |          S ddlm}m}  | | ||                    t          j         ||          z  z   |z            S )Nr   r   r   )rt   Abs)rg   r3   rF   r   r  r  r   
exp_is_powr    r
   rX   rm   rt   r  rn   )	r)   r/   r   kwargsr3   rF   rJ   rt   r  s	            r*   _eval_rewrite_as_expzPow._eval_rewrite_as_exp]  s   CCCCCCCC< 	488C== 	DHHSMM 	:88F##88F 
	J !+ >1633t99T>HEEEEs33t99T>H==== FEEEEEEE3CCIIT)BBDHIIIr,   c                   | j         s| t          j        fS |                                 \  }}|                                \  }}|j        }|j        r|s|j        s|                                }|j	        }|j
        s|s|}t          j        }|j        }|r| | }}n||s|}t          j        }|r||}}| }|j        rh|t          j        u r&|t          j        ur||                     ||          fS |t          j        ur&|t          j        u r|                     ||          |fS |                     ||          |                     ||          fS r&   )r"   r
   rS   r   r   r   r`   r   rb   r]   r   is_nonpositiverf   r   )r)   r/   r3   r   r   neg_expint_expdnonposs           r*   r   zPow.as_numer_denomq  sw   " 	;$$&&	c""$$1 /: 	5g 	5co 	52244G. " 	g 	AA" 	2rqAA_W_AA 	aqA$C? 	,AEzzaqunn$))As++++~~!qu**yyC((!++yyC  $))As"3"333r,   Fc                   t          |          }|i }|t          j        u r)| j                            t          j        |          }||S t          |t                    sd S |                                \  }}|                                 \  }}|j	        rH|j
        rA|r?|j        r|                    |||z  z  |          S |                    |d|z  z  |          S |                                }| j                            ||          }|d S | j                            |                              ||          }|t          j        | ||          S |S r2   )r   r
   rS   r3   matchesrU   rL   r   r   r\   r^   r   copyr/   xreplace)	r)   r  	repl_dictr  r   r6   r8   sbses	            r*   r  zPow.matches  s\   ~~I 15==  33A} $%% 	4!!1 !!##B< 	7BM 	7d 	7} 8zz!ad)Y777::dQrTlI666NNIa##94Ha  ((A..9<dI666r,   r   c                8  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        rd|
z   S  ||
                                |d          }|t          j        u r |||z  |          S |t          j        u r| S |
|z
  } ||          x}}t#          d|          D ]'}|||z  z  }|                    |||          }||z  }(| |||z  |          z  }ddlm}  ||d	d
          S ddlm} ddlm}  || d	                                          } |                                 \  }} |j        | rt5                      |                    |          r. || ||          z                                ||||          S |j|                    |          rUddlm} t=          d||g          \  }}|                     ||||z  z             ||          ||z  z             }||z  } |                                }	 ddl m!} |                    |t          j"                  r|tG                      |$                    |          \  }}n# tF          tJ          t4          f$ r |                    |tM          d|          ||                                          }|                    t          j'        t          j(                  rtK                      |$                    |          \  }}Y nw xY w|                    |          r#ddl)m*}  ||          +                                }|j,        sw|j-        r|j.        si| | /                    |||          k    rM || ||          z                                ||||          }| || ||          z            k    r| S |S |0                    ||          }tc          |          |z
  +                                }||z  }|j-        stK                      |||z  z
  22                    td                    r |	|          22j3        r ||||z  z  |          S |j,        r||z  }|| k    r| |||z  |          z  }|S d } 2fd}!	 |$                    ||          \  }}"nM# tF          tJ          f$ r9  |||2z  z  |d          dk    r||z  |||z  z  |z  z   cY S tK                      w xY w|j4        rB|"t          j5        k    r2|                    d d           }|$                    ||          \  }}"|"j6        s|7                                }|j,        r||z  S |$                    ||          \  }}"|"j6        sI||z
  |z  8                                }|$                    ||          \  }}"|"j6        stK                      ddl9m:}# |                    | |#2          ||                                          }$i }%tw          j<        |$          D ]7} | ||          \  }&}'|%=                    |'t          j5                  |&z   |%|'<   8t          j>        }(t          j5        t          j>        i})|%}*ddl?m@}+mA}, |(|"z  2z
  j3        rt |,||(           |+|(          z  }-|*D ]1}|)=                    |t          j5                  |-|*|         z  z   |)|<   2 |!|*|%          }*|(t          j>        z  }(|(|"z  2z
  j3        tddlBmC}. |jD        s|j,        r|j3        r||z
  E                    ||          }/ |.|/          j3        r | ||z  dd |z  z  z  |          \  }0}1np |.|/          j,        r; |  || ||          z            0                    |||          |          \  }0}1n% | ||z  |          \  }0}1n | ||z  |          \  }0}1t          j5        }|)D ]}'|'|1z   }||)|'         |0z  ||z  z  z  }|jD        r'|j6        r ||"z  |z
  jF        r|tc          |           k    sR	 | |||z  |          z  }n># tJ          $ r1  || ||          z                                ||||          cY S w xY w|S )!Nr   r   )limit)Ordersympify)r   logxr   )powsimpTr3   )rg  combine)	powdenest)_illegal)r0  )r   r  cdir)Wildzc, ex)rs   exclude)	polygammar   )
logcombiner  r  r  c                H   t           j        t           j        }}t          j        |           D ]r}|                    |          rV|                                \  }}||k    r8	 |                     |          c S # t          $ r | t           j        fcY c S w xY wm||z  }s||fS r&   )	r
   rS   rU   r   rp  r  r   leadtermr   )r   r4  r   r3   factorr/   s         r*   	coeff_expz$Pow._eval_nseries.<locals>.coeff_exp  s    3E--- 	$ 	$::a== $ & 2 2 4 4ID#qyy0#'==#3#3333) 0 0 0#'</////0 ! VOEE#:s   "A99BBc                    i }t          | |          D ]E\  }}||z   }|k     r5|                    |t          j                  | |         ||         z  z   ||<   F|S r&   )r   r@  r
   rU   )d1d2rese1e2rv   maxpows         r*   mulzPow._eval_nseries.<locals>.mul"  sg    C!"b// B BB"W;;!ggb!&11BrF2b6MACGJr,   c                    | j         S r&   )is_Floatr7  s    r*   r8  z#Pow._eval_nseries.<locals>.<lambda>6  s    AJ r,   c                     t          |           S r&   )r   r7  s    r*   r8  z#Pow._eval_nseries.<locals>.<lambda>6  s    (1++ r,   )ceiling)	factorialffrI   r?   )Grg   r3   rF   sympy.series.limitsr  sympy.series.orderr  sympy.core.sympifyr  r/   r
   rX   nseriesrq  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   r  r   r  rU   r   simplifyr  r   r  r  rp  r@  rS   (sympy.functions.combinatorial.factorialsr  r  rm   rI   r]   dirr  )3r)   r4  r   r  r  r3   rF   r  r  r  e_seriese0r  
exp_seriesr   r   r  r  r  r6   r8   r  ru   rv   r  _r   r  r  r   rk  r  r  r  r   r  gpolygtermsco1r  ry  r  tkr  r  r   rI   ndirincoinexr  s3                                                     @r*   r  zPow._eval_nseries  sL
    	DCCCCCCC------,,,,,,......9x''QT'::H  $8|#x''))1a00BQ'''uQT1~~%QZ2A #B'J1a[[ # #!||A|66d"

%%1a..(J6666667:D%@@@@444444%%%%%%yT***3355!!115( 	++5588 	M3qQx==..qADt.LLLc

$$$$$$Gs;;;EAr		##a2g,,AD(899Aa4DIIKK		!IIIIIIuuY-- #$2B ll"::a==DAqq/; 	! 	! 	!SAYYTEEMMOOAuuQUA-.. ,)+++::a==DAqqq		! 55:: 	'::::::
1$$&&A	 	Q[ 	QY 	t11!$T1JJJJc!CCFF(mm11!qt$1OO##aAh--''K
ad++a[[1_$$&&aC{ 	(%'''QqS::f 	 WQZZF 	&5QqS1%%%9 	1ADyyUU1a4^^#H	 	 		 	 	 	 		,::ad:++DAqq/0 	, 	, 	,uQq&y[!Q''1,,!ta1fQh&&&)+++	, : 	,!qv++ 		..0E0EFFA::ad:++DAq} 		0

Ay !t::ad:++DAq= 0!eQY&&((zz!$z//1} 0-///??????WWV__4dKKSSUUM%(( 	6 	6Dia((GCB//#5F2JJEJJJJJJJJsV|( 	Bq!HHYYq\\)E A A!IIb!&11E"R&L@b		RBJA sV|( 	 	<;;;;;| 		,	 		,am 		,E;;q$''Dr$xx# 0&Yq!tR2a4L'8!<<
ddD! 0&Yss1SSVV8}}'D'DQTX\'D']']_`aa
dd&Yq!tQ//
dd"1a4++JD$f 	* 	*BdB59T>!b'))CC 	Q 	QAaC!G3K 	Qx~~%%QuuQT1~~%& Q Q Qs1SSVV8}}22142PPPPPQ
s8   2AJ B L$#L$'S 9T=T	a 8bbc                   ddl m}m} | j        }| j        }| j        t          j        u r{|                    ||          }|                    |d          }	|	t          j        u r|	                    |d          }	|	j
        du rt          j        |	z  S t          d| z            |                    |          r/ || ||          z            }
|
                    |||          S ddlm} 	 |                    |||          }n# t          $ r | cY S w xY w|j        s|j        r|                    |          s||z
                      ||          } ||          j        r|                     ||          dd	|z  z  z  S  ||          j        r8 ||                              |||          }|j
        du r |||z            S |                     ||          S )
Nr   r   r  FzCannot expand %s around 0r  r  r?   r  )rg   r3   rF   r/   r
   rX   r  r  rQ   r  rf   r   r  rm   rI   r]   r   r  r   r   r
  )r)   r4  r  r  r3   rF   r8   r6   rt   arg0ltrI   r   r  log_leadterms                  r*   r
  zPow._eval_as_leading_termr  s    CCCCCCCCHI9##AD#11C88Aq>>Dqu}}yyA5((vt|#74@AAAUU1XX 	#QQZB%%ad%>>>??????%%ad%>>   < 
3AM 
3!%%(( 
3A{{1d++2d88' 3  99Q??bBqD\99RXX% 3#&3q66#?#?SW#?#X#XL#/588"s1\>22299Q??"s   0D	 	DDc                ^    ddl m}  || j        |          |                     ||          z  S )Nr   )binomial)r  r  r3   r   )r)   r   r4  previous_termsr  s        r*   _taylor_termzPow._taylor_term  s9    EEEEEEx!$$tyyA66r,   c                    | j         t          j        ur t                      j        ||g|R  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
   rX   supertaylor_termrU   rS   r  r  r  )r)   r   r4  r   r  r   r  rW   s          r*   r$  zPow.taylor_term  s    9AF""&577&q!=n====q556M665L$$$$$$GAJJ 	!r"A}1uqy FFFFFF!tIIaLL  r,   c                    | j         t          j        u r^ddlm}  |t          j        | j        z  t          j        dz  z             t          j         |t          j        | j        z            z  z
  S d S )Nr   )r  r   )r/   r
   rX   r  r  rn   r3   ro   )r)   r/   r3   rC  r  s        r*   _eval_rewrite_as_sinzPow._eval_rewrite_as_sin  sr    9DDDDDD3qtx/!$q&899AOCCPQP_`d`hPhLiLi<iii r,   c                    | j         t          j        u r^ddlm}  |t          j        | j        z            t          j         |t          j        | j        z  t          j        dz  z             z  z   S d S )Nr   )r  r   )r/   r
   rX   r  r  rn   r3   ro   )r)   r/   r3   rC  r  s        r*   _eval_rewrite_as_coszPow._eval_rewrite_as_cos  st    9DDDDDD3qtx/001?33qW[W_G_bcbfghbhGhCiCi3iii r,   c                    | j         t          j        u r3ddlm} d || j        dz            z   d || j        dz            z
  z  S d S )Nr   )tanhr   r   )r/   r
   rX   %sympy.functions.elementary.hyperbolicr*  r3   )r)   r/   r3   rC  r*  s        r*   _eval_rewrite_as_tanhzPow._eval_rewrite_as_tanh  s`    9BBBBBBTXaZ(((1ttDHQJ/?/?+?@@ r,   c                   ddl m}m} |t          j        urd S |j        r|                    t          j        t          j        z            }|rk|j	        rf |t          j        |z             |t          j        |z            }}t          ||          s(t          ||          s|t          j        |z  z   S d S d S d S d S d S )Nr   )r  r  )r  r  r  r
   rX   r`   r   ro   rn   r_   rL   )	r)   r/   r3   r  r  r  r   cosinesines	            r*   _eval_rewrite_as_sqrtzPow._eval_rewrite_as_sqrt  s    EEEEEEEEqv4: 	9IIadQ_455E 9 9"s14:ADJ!&#.. 9z47M7M 9!AOD$888	9 	99 9 9 99 9 9 9r,   c           
        |                                  \  }}t          |                    ||           }|                    ||          \  }}|j        r|                                \  }}|j        r|t
          j        k    r||z  }	|                     ||	          }
t
          j        }|
j        s3t          |	j	        |	j
                  \  }}|                     ||          }
|
|                     |t          ||||z  |	j
        z  z                       fS t          ||          }|j        r|j        r|                    ||          \  }}|                     ||                                          \  }
}|                                 \  }}|t
          j        u s||k    r&|
|                     t          ||          |          fS t
          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.
        )ru  clear)r   _keep_coeffas_content_primitiver   r   r
   rU   r   r  r   r   r`   rk   rS   )r)   ru  r2  r6   r8   cepehr  cehru   r  icehr   mes                  r*   r4  zPow.as_content_primitive  s   V !!1//u/MMN''u'EEB= 	H ??$$DAq} HafdIIa%%F} +$SUCE22GD!		!T**A$))A{2q1R4:~'F'FGGGGB= 
	:QX 
	:))')GGDAq99Q??//11DAqMMOOEArAEzzR1WW $))K1$5$5q9999udii1oo%%r,   c                   | }|                     dd          r|                                }|                                \  }}|                    d          }|r||z  }||k    r|                                S  |j        | } |j        | }	|	r |rdS |                    d          }|du rdS n|	d S |                    d          S )Nr  Tr   F)r@  r  r   equalsis_constant)
r)   wrtflagsr  r6   r8   bzr  econbcons
             r*   r=  zPow.is_constant  s    99Z&& 	#==??D!!1XXa[[ 	)Q$Cd{{(((q}c"q}c" 	 t!BU{{u \4xx{{r,   c                    | j         \  }}|                    |          r<|                    |          s)|                    |||z             }|||z
  z  dz
  | z  S d S d S r2   )r+   r  r  )r)   r   stepr6   r8   new_es         r*   _eval_difference_deltazPow._eval_difference_delta+  ss    y15588 	/AEE!HH 	/FF1a$h''E	NQ&$..	/ 	/ 	/ 	/r,   )r#   r$   )r#   r   r&   )r6   r7   r8   r7   r#   r   )r   )TrN  )r   )FT)BrO   
__module____qualname____doc__r  	__slots__r   propertyr+   r/   r3   r5   r	   rq   r~   classmethodr   r   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!  r   r&  r)  r,  rE  rI  ro  rr  r  r  r  r  r  r  r  r  r  r   r  r  r
  r!  r$  r&  r(  r,  r0  r4  r=  rF  __classcell__)rW   s   @r*   r    r       sI       W Wp F#I 		 	 	 
	    X    X ! ! X! ` ` ` ` W`D    " " ["# # #R$ R$ R$h6B 6B 6Bp% % %  3 3 3:  2  0  *D$ D$ D$L  / / /b         " " "  B  8
) 
) 
)  + + +  (y y yvx x xtQ* Q* Q* Q*fK K K$ $ $    6%, %, %,N  #- #- #-J  J J J(!4 !4 !4F       Dz z z zx #  #  #D 7 7 W7! ! ! ! ! j j j
j j j
A A A
	9 	9 	9O& O& O& O&b  ./ / / / / / /r,   r    power)r  )r   r   )r   r3  )r  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   r5   r   r   sympy.utilities.iterablesr   sympy.utilities.exceptionsr   sympy.utilities.miscr   sympy.multipledispatchr   r    rN  addobjectr  r   r   r   r  r   r3  r  r  r  r  r'   r,   r*   <module>r\     sR   " " " " " " * * * * * * * *                               % % % % % %% % % % % % % % % % % % % % = = = = = = = = = = = = ) ) ) ) ) ) $ $ $ $ $ $ $ $ + + + + + + + + * * * * * * @ @ @ @ @ @ ' ' ' ' ' ' - - - - - -Y/ Y/ Y/ Y/ Y/$ Y/ Y/ Y/v8 	
7 		66
C             & & & & & & & & ! ! ! ! ! ! ! ! * * * * * * * * * * * *r,   