
    wg                       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 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-m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9 y)    )annotations)Callable)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U dZdZdZded<   ded<   ed=d       Zd>dZ	e
d?d	       Ze
d?d
       Ze
d        Zed        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d@d&Z)d' Z*d( Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3dAd1Z4dBd2Z5dCd3Z6ed4        Z7 fd5Z8d6 Z9d7 Z:d8 Z;d9 Z<dDd:Z=d; Z>d< Z? xZ@S )EPowa%  
    Defines the expression x**y as "x raised to a power y"

    .. deprecated:: 1.7

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

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

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

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

    See Also
    ========

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

    References
    ==========

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

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

    If you really did intend to construct a power with this base, use the **
    operator instead.z1.7znon-expr-args-deprecated   )deprecated_since_versionactive_deprecations_target
stacklevelFAccumulationBoundsr   AccumBounds)	exp_polar)factor_termslog)fraction)sign)r3   im);r   evaluater   
relationalr%   
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/   r1   sympy.simplify.radsimpr2   as_coeff_Mulr"   is_Add$sympy.functions.elementary.complexesr3   r4   ImaginaryUnitPi_eval_power__new__ _exec_constructor_postprocessorsr!   )clsber5   r%   argr-   r.   r/   r1   r2   cexnumdenr3   r4   sobjs                      U/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/sympy/core/power.pyr\   zPow.__new__v   s   (11HQKQK 	+a$
1j(A>?? q6 	Cc4()s),,/ 0 .3/I 
	 A%%%uuAJJAEE?::%AMM*uQ66MAMM*{{ 000{{e+ uuAFF{uuaeeb(((%%)==;M&s1aee}c!QUUmDD ++!,,!,,;;188q{{44699AXXAJ;&uuAuuaeeq6%%55Luu MyyQaff_Z9=U7J?(7DDFEAr'|HC!#s+q0@ vv#.Q AK;;1 #\!%%@$@ AAaooDUVWVZVZDZ Z2[#$66AcE?2mmA&?Jll31%2237#s#J..C13C3C
    c                N    | j                   t        j                  k(  rddlm} |S y Nr   r0   )baser	   rC   rR   r1   )selfargindexr1   s      rh   inversezPow.inverse   s    99BJri   c                     | j                   d   S Nr   r#   rm   s    rh   rl   zPow.base       zz!}ri   c                     | j                   d   S Nr   rr   rs   s    rh   expzPow.exp   rt   ri   c                r    | j                   j                  t        u r| j                  j                  S t        S N)rw   kindr   rl   r   rs   s    rh   rz   zPow.kind   s&    88==J&99>>!  ri   c                     dd| j                   fS )N      )r:   r^   s    rh   	class_keyzPow.class_key   s    !S\\!!ri   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integerrM   evenr   odd)rm   assumptionsr   r   r_   r`   s         rh   _eval_refinezPow._eval_refine   s    0!1qyy|[)a.H.H.J166!9k*A2qz!QUU1X{+QB
{" , /K)ri   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   )ra   r4   rer3   rw   r1   )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_denomrH   )r`   nds      rh   _halfzPow._eval_power.<locals>._half
  sA     1c4(A-'')1<<AF %+<ri   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)evalfrL   r   )r`   rvs     rh   _n2zPow._eval_power.<locals>._n2  s<    40B||!	 $) s    $ 	00r*   TFr}   )r   r	   r<   rH   is_polaris_extended_realrX   ra   r4   r   r3   rR   rw   r1   #sympy.functions.elementary.integersr   is_negativer?   r   rN   rP   is_imaginaryrY   is_extended_nonnegativerZ   Halfr   )rm   otherr_   r`   rf   ra   r4   r   r3   rw   r1   r   r   r   s                 rh   r[   zPow._eval_power   s   !1:qD5= AZZA+NNGA  !! 7U|==D0#$==%#7QB%8H#HH]]e3#&q5&>1YY))F~~1Jq6FQJ4'16A..AU22A
t7KA5\AaddF1??2583q61QTT6!22:4 4 5A))c$q'A+.>!.C G 

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

        Notes
        =====

        Algorithms:

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

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

        3. For any unevaluated power found in `b` or `e`, the step 2
        will be recursed down to the base and the exponent
        such that the $b \bmod q$ becomes the new base and
        $\phi(q) + e \bmod \phi(q)$ becomes the new exponent, and then
        the computation for the reduced expression can be done.
        r   )totientP   r&   r   )ModFr5   N)rl   rw   rH   is_positiver	   r@   %sympy.functions.combinatorial.numbersr   rI   int
bit_lengthIntegerpowmodr   r7   r   rJ   )rm   r   rl   rw   r   r_   r`   mmbphir   r   s               rh   	_eval_ModzPow._eval_ModO  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#) .>ri   c                    | j                   j                  r-| j                   j                  r| j                  j                  S y y ry   )rw   rH   r   rl   rN   rs   s    rh   _eval_is_evenzPow._eval_is_even  s3    88488#7#799$$$ $8ri   c                P    t         j                  |       }|du r| j                  S |S NT)r   _eval_is_extended_negativerA   )rm   ext_negs     rh   _eval_is_negativezPow._eval_is_negative  s(    006d?>>!ri   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 )NTFr&   r   r0   )rl   rw   r   r   is_realis_extended_negativerN   rO   is_zeror   is_extended_nonpositiver   rH   rR   r1   )rm   r   r1   s      rh   _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 % $ri   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)rw   r	   r   rl   
is_complexr   r   rO   rA   rN   is_extended_positiver   r   r   rs   s    rh   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   (ri   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   )rl   r   rw   r   r   r	   rC   NegativeInfinityrA   r   rQ   is_nonnegativer   rP   r   rs   s    rh   _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 &: ri   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_rationalrH   r   r	   r?   r   r   rA   r   r   rL   funcrI   )rm   r_   r`   checks       rh   _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]=ri   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   )r1   rw   Fr   r   ra   )$rl   r	   rC   rw   r   r   rY   rZ   rN   rR   r1   r   r   r   r   rH   is_extended_nonzeror   r   is_Rationalr   rO   rW   as_coeff_AddrI   Mulr?   coeffr   
is_nonzeror7   RationalprX   ra   r   )rm   r1   rw   real_breal_eim_bim_erb   aokra   is               rh   _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||||#   &?ri   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ry   )r   ).0r   s     rh   	<genexpr>z'Pow._eval_is_complex.<locals>.<genexpr>?  s     /q||/   T)
rl   r	   rC   r   rw   r   r   allr"   _eval_is_finiters   s    rh   _eval_is_complexzPow._eval_is_complex:  s_    99TXX00$((2O2OPQQ/TYY//D4H4H4J 5K/ri   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   r0   r   )rl   r!   r   rw   rH   rO   r	   rC   rZ   rY   rN   rR   r1   r   r   r   r   rX   ra   )
rm   r   fr1   imlograthalfra   r   isodds
             rh   _eval_is_imaginaryzPow._eval_is_imaginaryB  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  !	 /ri   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   )rw   rH   r   rl   rO   r   r	   r?   rs   s    rh   _eval_is_oddzPow._eval_is_odds  se    88xx##yy'''((TYY-=-=amm+ , ri   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   )	rw   r   rl   r   rQ   r   rA   r   r   )rm   c1c2s      rh   r   zPow._eval_is_finite|  s    88yy  yy$$		(<(<YY  :XX:"xx&&)DII4E4E*F +G 2ri   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)rl   rH   rw   r   rs   s    rh   _eval_is_primezPow._eval_is_prime  s<     99DHH$7$7TXX\<V<V =W$7ri   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)rl   rH   rw   r   r   rN   rs   s    rh   _eval_is_compositezPow._eval_is_composite  s     II  TXX%8%8ii!m((dhhl-G-GYY]''DHH,@,@TXXEUEU FV,@' &9 ri   c                .    | j                   j                  S ry   )rl   r   rs   s    rh   _eval_is_polarzPow._eval_is_polar  s    yy!!!ri   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ry   )rH   )r   terms     rh   r   z1Pow._eval_subs.<locals>._check.<locals>.<genexpr>  s     B4tBr   )FNNr   r   )r!   r   
ValueErrorr   r   r   r   r7   tupler   divmodr   )ct1ct2oldcoeff1terms1coeff2terms2r   combinesr_   r`   	remainderremainder_pows                rh   _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   )rD   r-   r7   rw   rl   subs__rpow__r   rR   r1   r	   rC   is_Functionr   _subsrL   r   rW   as_independentSymbolr   as_coeff_mulr"   appendr!   rH   Addis_Powr   r   )rm   r  newr-   r_   r`   rw   r1   r
  lr   r  r   r   r	  resultoargnew_lo_alr   newaexpos                         rh   
_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Mf4FZri   c                    | j                   \  }}|j                  r0|j                  |j                  k  r|j                  dkD  rd|z  | fS ||fS )a  Return base and exp of self.

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

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

        Examples
        ========

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

        r   r   )r"   r   r   r   )rm   r_   r`   s      rh   r   zPow.as_base_exp   sH    0 yy1==QSS133Y1337Q37N!tri   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)rX   r!  rw   rH   rl   r   r   )rm   r!  r   r   expandeds        rh   _eval_adjointzPow._eval_adjoint=  s    @xx""DII$9$91499%txx//99gdhh///:!u*%d+H4x((   %:ri   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)rX   r%  rw   rH   rl   r   r   r   )rm   rb   r   r   r"  s        rh   _eval_conjugatezPow._eval_conjugateI  s    Gxx""DII$9$91TYY<))99ak)):!u*%d+H4{"  K !ri   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)rX   r(  rl   r	   rC   r   rw   rH   r   rQ   r   )rm   r(  r   r   r"  s        rh   _eval_transposezPow._eval_transposeW  s    B9999QVVTXX%7%7%9::xx""TYY%9%9%RTYY=R=R199dhh&&TYY'11:!u*%d+H4 **   %:ri   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 ry   r    xs    rh   <lambda>z,Pow._eval_expand_power_exp.<locals>.<lambda>s  s    q/?/? ri   Tbinary)rl   rw   r	   rC   sympy.concrete.summationsr+  r7   r!   sympy.concrete.productsr,  r   functionlimitsrW   getr   _all_nonneg_or_nonpposr   r"   r   r  
_from_args)	rm   hintsr_   r`   r+  r,  r0  rb   ncs	            rh   _eval_expand_power_expzPow._eval_expand_power_expe  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   r/  s    rh   r1  z-Pow._eval_expand_power_base.<locals>.<lambda>  s    !2D2D2M ri   Tr2  c                    | t         j                  u rt         j                  S | j                  }|ry|t        | j                        S y r   )r	   rY   r   r   r   )r0  polars     rh   predz)Pow._eval_expand_power_base.<locals>.pred  sB    AOO#&JJE}!!";";<< ri   r&   r   r   r}   c                z    | j                   xr. | j                  j                  xr | j                  j                  S ry   )r  rw   r   rl   rJ   r/  s    rh   r1  z-Pow._eval_expand_power_base.<locals>.<lambda>  s1    AHH 5;EE%%5;*+&&*:*: ri    )r8  rl   rw   rK   args_cnchasattrr@  rI   r   r   r   r   r	   rY   lenr  popr>   r?   rH   rL   extendr   r"   )rm   r;  r-  r_   r`   cargsr<  r   r   r   
maybe_realrE  siftednonnegnegimagInonnor   npows                        rh   r@  zPow._eval_expand_power_basey  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   rW   rI   r   r   r   r  _eval_expand_multinomialr  	make_argsr  r   r!   is_Orderr   r   rJ   as_real_imagr	   rY   sympy.ntheory.multinomialrZ  sympy.polys.polyutilsr[  rJ  rP   rL   r8  r   r9  r   r:  )rm   r;  rl   rw   r  r   radicalexpanded_base_nr   order_termsother_termsr_   r   rU  gr   krb   r   rS  r   rZ  r[  expansion_dictmultir   tails                              rh   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   )polyrX  za br~   r}   r   r&   r|   )atan2cossinrw   )r4   r   Fcomplexignore)!rw   rI   sympy.polys.polytoolsrl  rl   r_  r	   r@   symbolsDummyrL   r   rY   termsr  r  (sympy.functions.elementary.trigonometricrm  rn  ro  r   r   r   r   r   r   rC   rR   expandrX   r4   r   r8  )rm   rY  r;  rl  rw   re_er   r   r_   exprmagr   raabbccre_partim_part1im_part3rm  rn  ro  trptprb   rf   r4   r   r"  s                                 rh   r_  zPow.as_real_imagn  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 rk   )rR   r1   rl   diffrw   )rm   rf   r1   dbasedexps        rh   _eval_derivativezPow._eval_derivative  sX    >		q!xx}}Qtc$))n,utxx/?		/IIJJri   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   rp  Fr   )r   r	   rC   rR   rw   _eval_evalf_evalfrI   r   rJ   r   r%  r   rx  )rm   precrl   rw   exp_functions        rh   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##ri   c                    | j                   j                  | ry | j                  j                  | rMt        | j                  j	                  |      xr' | j                   j
                  xr | j                   dk\        S y)NFr   T)rw   hasrl   bool_eval_is_polynomialrI   rm   symss     rh   r  zPow._eval_is_polynomial  sn    488<<499==$		55d; 8##8)-Q9 9 ri   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)rw   rH   rl   r   r   r   r   r   r   r   r  r   r   is_irrationalr	   rC   r   )rm   r   r_   r`   s       rh   _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 ;}} ".} ri   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   )rz  s    rh   _is_onez'Pow._eval_is_algebraic.<locals>._is_one  s)    q))) s    	TF)rl   r   r	   rC   r   r"   rw   r   is_algebraicrZ   r   rY   r   r   rH   r  )rm   r  rf   s      rh   _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+++ +	 )>#ri   c                     | j                   j                  | ry | j                  j                  | r3| j                  j                  |      xr | j                   j                  S yr   )rw   r  rl   _eval_is_rational_functionrI   r  s     rh   r  zPow._eval_is_rational_function"  sW    488<<499==$9977= $##$ ri   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 rB  )	rl   _eval_is_meromorphicrw   rI   r  r   r   rA   r   )	rm   r0  r   
base_meromexp_integer	exp_meromr_   b_zerolog_defineds	            rh   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",,,ri   c                     | j                   j                  | ry | j                  j                  | r3| j                  j                  |      xr | j                   j                  S yr   )rw   r  rl   _eval_is_algebraic_exprr   r  s     rh   r  zPow._eval_is_algebraic_exprQ  sW    488<<499==$9944T: %$$% ri   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   )ra   Abs)rR   rw   r1   r   r  r  r   
exp_is_powr   r	   rC   rX   ra   r  rY   )	rm   rl   r  kwargsrw   r1   r5   ra   r  s	            rh   _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Iri   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 ry   )r!   r	   r>   r   r   r   rK   r   rM   rH   r   is_nonpositiverQ   r   )rm   rl   rw   r   r   neg_expint_expdnonposs           rh   r   zPow.as_numer_denomo  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3ri   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 rv   )r   r	   r>   rw   matchesr@   r7   r
   r   rG   rI   r   copyrl   xreplace)	rm   rz  	repl_dictr  r   r_   r`   sbses	            rh   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ri   c                8  3 ddl m}m} ddlm} ddlm} ddlm}	 | j                  t        j                  u r| j                  j                  |||      }
|
j                  rd|
z   S  ||
j                         |d      }|t        j                  u r |||z  |      S |t        j                   u r| S |
|z
  } ||      x}}t#        d|      D ]#  }|||z  z  }|j                  |||      }||z  }% | |||z  |      z  }ddlm}  ||d	d
      S ddlm} ddlm}  || d	      j/                         } | j1                         \  }} |j2                  | r
t5               |j3                  |      r$ || ||      z        j7                  ||||      S |X|j3                  |      rGddlm} t=        d||g      \  }}|j?                   ||||z  z         ||      ||z  z         }||z  } |j                         }	 ddl m!} |j3                  |t        jD                        r|
tG               |jI                  |      \  }}|j3                  |      rddl)m*}  ||      jW                         }|jX                  sk|jZ                  r|j\                  sS| | j_                  |||      k(  r< || ||      z        j7                  ||||      }| || ||      z        k(  r| S |S |ja                  ||      }||z  t        jb                  z
  jW                  d      }|jZ                  s
tK               |||z  z
  33j3                  td              r |	|      33jf                  r ||||z  z  |      S |jX                  r||z  }|| k7  r| |||z  |      z  }|S d } 3fd}!	 |jI                  ||      \  }}"|jh                  r5|"t        jj                  k(  r"ddl)m6}#  |#|      jI                  ||      \  }}"|"jn                  s|jq                         }|jX                  r||z  S |jI                  ||      \  }}"|"jn                  sB||z
  |z  js                         }|jI                  ||      \  }}"|"jn                  s
tK               ddl:m;}$ |j7                  | |$3      ||      j                         }%i }&ty        jz                  |%      D ]4  } | ||      \  }'}(|&j}                  |(t        jj                        |'z   |&|(<   6 t        jb                  })t        jj                  t        jb                  i}*|&}+ddl?m@},mA}- |)|"z  3z
  jf                  rt |-||)       |,|)      z  }.|+D ].  }|*j}                  |t        jj                        |.|+|   z  z   |*|<   0  |!|+|&      }+|)t        jb                  z  })|)|"z  3z
  jf                  rtddlBmC}/ |j                  s|jX                  r|jf                  r||z
  j                  ||      }0 |/|0      jf                  r | ||z  d d!|z  z  z  |      \  }1}2n_ |/|0      jX                  r. |  || ||      z        ja                  |||      |      \  }1}2n | ||z  |      \  }1}2n | ||z  |      \  }1}2t        jj                  }|*D ]  }(|(|2z   }||*|(   |1z  ||z  z  z  } |j                  r,|jn                  r ||"z  |z
  j                  r|t        |       k(  s	 | |||z  |      z  }|S |S # tF        tJ        t4        f$ r} |j7                  |tM        d|      ||      j                         }|j3                  t        jN                  t        jP                        r
tK               |jI                  |      \  }}Y Zw xY w# tF        tJ        f$ r1  |||3z  z  |d      dk(  r||z  |||z  z  |z  z   cY S tK               w xY w# tJ        $ r'  || ||      z        j7                  ||||      cY S w xY w)"Nr   r   )limit)Ordersympify)r   logxr   )powsimpTrw   )rY  combine)	powdenest)_illegal)r-  )r   r  cdir)Wildzc, ex)r^   exclude)	polygammar}   )
logcombiner  r  r  F)rx  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ry   )	r	   r>   r@   r   r]  r  r   leadtermr   )r   r0  r   rw   factorrl   s         rh   	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 ry   )r   r8  r	   r@   )d1d2rese1e2rc   maxpows         rh   mulzPow._eval_nseries.<locals>.mul  sc    C!"b/ BB"W;!ggb!&&1BrF2b6MACGB Jri   )	nsimplify)ceiling)	factorialffr4   r*   )HrR   rw   r1   sympy.series.limitsr  sympy.series.orderr  sympy.core.sympifyr  rl   r	   rC   nseriesr^  removeOr   r=   rangesympy.simplify.powsimpr  r  numbersr  trigsimpr   r  r   _eval_nseriessymbolr  rt  replace'sympy.functions.special.gamma_functionsr  
EulerGammar   r  NotImplementedErrorrF   r<   r;   sympy.simplify.simplifyr  cancelr   rJ   r   _eval_as_leading_termas_leading_termr>   r  r   is_Floatr@   r  r   simplifyrx  r   r  r  r]  r8  (sympy.functions.combinatorial.factorialsr  r  rX   r4   rH   dirr  r   )4rm   r0  r   r  r  rw   r1   r  r  r  e_seriese0r  
exp_seriesr   r   r  r  r  r_   r`   r  rb   rc   r  _r   r  r  r   rf  r|  r  r  r   r  r  gpolygtermsco1r  rg  rv  tkr  r  r   r4   ndirincoinexr  s4                                                      @rh   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+qS155[   .{{%''QqS::fQZFQqS1%%991ADyU1a4^#H			,::ad:+DAq ::!qvv+ :Q<(((6DAq}}

Ayy!t::ad:+DAq==!eQY&&(zz!$z/1}}-//?WV_4dKSSUMM%( 	6Da(GCB/#5F2J	6 EEJsV|((q!HYq\)E A!IIb!&&1E"R&L@b	ARBJA sV|(( 	<||		ammE;;q$'D$x##&q!tR2a4L'8!<
dD!!&s1SV8}'D'DQTX\'D']_`a
d&q!tQ/
d"1a4+JD$ff 	*BdB59T>!b'))C	* AaC!G3K3Kx~%QuQT1~% 
s
} /; 	!SAYTEMMOAuuQUUA--.)++::a=DAq		!t /0 	,Qq&y[!Q'1,!ta1fQh&)++	,D ' Q1SV8}22142PPQs8   A\ +^& ?_) B^#"^#&3_&_&)-``c                   ddl m}m} | j                  }| j                  }| j                  t        j
                  u rx|j                  ||      }|j                  |d      }	|	t        j                  u r|j                  |d      }	|	j                  du rt        j
                  |	z  S t        d| z        |j                  |      r% || ||      z        }
|
j                  |||      S ddlm} 	 |j                  |||      }|j                  s|j                   r|j                  |      s||z
  j#                  ||      } ||      j                   r| j%                  ||      dd	|z  z  z  S  ||      j&                  r3 ||      j)                  |||      }|j                  du r |||z        S | j%                  ||      S # t        $ r | cY S w xY w)
Nr   r   r  FzCannot expand %s around 0r  r  r*   r  )rR   rw   r1   rl   r	   rC   r  r  r<   r  rQ   r   r  rX   r4   rH   r   r  r   r   r  )rm   r0  r  r  rw   r1   r`   r_   ra   arg0ltr4   r   r  log_leadterms                  rh   r  zPow._eval_as_leading_termo  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  rw   r   )rm   r   r0  previous_termsr  s        rh   _taylor_termzPow._taylor_term  s%    E!$tyyA66ri   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  )
rl   r	   rC   supertaylor_termr@   r>   r  r  r  )rm   r   r0  r  r  r   r  rB   s          rh   r	  zPow.taylor_term  s    99AFF"7&q!=n==q566M655L$AJr"A}1uqy F!tIaL  ri   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   )ro  r}   )rl   r	   rC   rw  ro  rY   rw   rZ   )rm   rl   rw   r;  ro  s        rh   _eval_rewrite_as_sinzPow._eval_rewrite_as_sin  se    99Dqtxx/!$$q&89AOOCPQP_P_`d`h`hPhLi<iii ri   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   )rn  r}   )rl   r	   rC   rw  rn  rY   rw   rZ   )rm   rl   rw   r;  rn  s        rh   _eval_rewrite_as_coszPow._eval_rewrite_as_cos  sg    99Dqtxx/01??3qW[W_W_G_bcbfbfghbhGhCi3iii ri   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}   )rl   r	   rC   %sympy.functions.elementary.hyperbolicr  rw   )rm   rl   rw   r;  r  s        rh   _eval_rewrite_as_tanhzPow._eval_rewrite_as_tanh  sI    99BTXXaZ((1tDHHQJ/?+?@@ ri   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   )ro  rn  )rw  ro  rn  r	   rC   rK   r   rZ   rY   rJ   r7   )	rm   rl   rw   r  ro  rn  r   cosinesines	            rh   _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 ri   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.
        )rb  clear)r   _keep_coeffas_content_primitiver   r   r	   r@   r   r   r   r   rK   rV   r>   )rm   rb  r  r_   r`   cepehr  cehrb   r|  icehr   mes                  rh   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%%ri   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)r8  r  r   equalsis_constant)
rm   wrtflagsrz  r_   r`   bzr  econbcons
             rh   r"  zPow.is_constant  s    99Z&==?D!1XXa[Q$Cd{((q}}c"q}}c"!BU{\xx{ri   c                    | j                   \  }}|j                  |      r5|j                  |      s#|j                  |||z         }|||z
  z  dz
  | z  S y y rv   )r"   r  r  )rm   r   stepr_   r`   new_es         rh   _eval_difference_deltazPow._eval_difference_delta(  sW    yy1558AEE!HFF1a$h'E	NQ&$.. %8ri   ry   )r   )returnr
   )TrB  )r   rq   )FT)Ar:   
__module____qualname____doc__r  	__slots____annotations__r   r\   ro   propertyrl   rw   rz   classmethodr   r   r[   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r#  r&  r)  r=  r@  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__)rB   s   @rh   r   r      s   Wp F#I
` `D     ! ! " "#R%h6Bp%3:20*D$L/b "B:
)+(yvxtQ*fK$6%,N#-JJ(!4F Dyv #D 7 7! j
j
A
	9O&b./ri   r   power)r  )r   r   )r   r  )r  ru  rt  N):
__future__r   typingr   	itertoolsr   r  r   cacher   	singletonr	   rz  r
   r   r   r6  r   r   r   r   r   logicr   r   r   r   
parametersr   r6   r   r   rz   r   r   sympy.utilities.iterablesr   sympy.utilities.exceptionsr   sympy.utilities.miscr   sympy.multipledispatchr   r   r5  addobjectr  r  r   r   r  r   r  r  r  ru  rt  rG  ri   rh   <module>rC     s    "       %% % = = ) $ + * @ ' -V/$ V/p8 	7 		66
C    & ! * *ri   