U
    L?h                     @  s\  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 deZ+e*dZ,e,-e.e.fe+ ddl-m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9 dS )    )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                      s  e Zd ZU dZdZdZded< ded< edydd	ZdzddZ	e
ddddZe
ddddZe
dd Zedd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z d9d: Z!d;d< Z"d=d> Z#d?d@ Z$dAdB Z%dCdD Z&dEdF Z'dGdH Z(d{dIdJZ)dKdL Z*dMdN Z+dOdP Z,dQdR Z-dSdT Z.dUdV Z/dWdX Z0dYdZ Z1d[d\ Z2d]d^ Z3d|d`daZ4d}dcddZ5d~dedfZ6edgdh Z7 fdidjZ8dkdl Z9dmdn Z:dodp Z;dqdr Z<ddsdtZ=dudv Z>dwdx Z?  Z@S )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_argsNc                 C  s^  |d krt j}t|}t|}ddlm} t||s>t||rFtd||fD ],}t|tsNtdt	|j
ddddd	 qN|r"|tjkrtjS |tjkrt|tjrtjS t|tjrt|tjrtjS t|tjr|jrtjS |jd
krtjS |tjkrtjS |tjkr|S |dkr,|s,tjS |jj
dkrn|tjkrddlm} |t||jt||jS n`|jr~|js|jr|jr|j s|j!r|" r|j#r| }n|j$rt| | S tj||fkrtjS |tjkrt%|j&rtjS tjS ddl'm(} |j)s
|tjk	r
t||s
ddl*m+} ddl'm,}	 ddl-m.}
 ||d
d/ \}}|
|\}}t||	r|j0d |krtj||  S |j1r
ddl2m3}m4} |||}|j!r
|r
||	||d
d |tj5 tj6  kr
tj||  S |7|}|d k	r"|S t8| ||}| 9|}t|tsJ|S |j:oV|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   )Zdeprecated_since_versionZactive_deprecations_target
stacklevelFZAccumulationBoundsr   AccumBounds)	exp_polar)factor_termslog)fraction)sign)r-   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(   Zis_AtomZ	exprtoolsr)   r+   Zsympy.simplify.radsimpr,   as_coeff_Mulr    is_Add$sympy.functions.elementary.complexesr-   r.   ImaginaryUnitPi_eval_power__new__Z _exec_constructor_postprocessorsr   )clsber/   r"   argr'   r(   r)   r+   r,   cexnumZdenr-   r.   sobj r]   B/var/www/html/venv/lib/python3.8/site-packages/sympy/core/power.pyrS   v   s    



  


zPow.__new__r   c                 C  s    | j tjkrddlm} |S d S Nr   r*   )baser   r=   rL   r+   )selfZargindexr+   r]   r]   r^   inverse   s    zPow.inverser	   )returnc                 C  s
   | j d S )Nr   r!   ra   r]   r]   r^   r`      s    zPow.basec                 C  s
   | j d S Nr   rd   re   r]   r]   r^   exp   s    zPow.expc                 C  s   | j jtkr| jjS tS d S N)rg   kindr   r`   r   re   r]   r]   r^   ri      s    zPow.kindc                 C  s   dd| j fS )N      )r4   rT   r]   r]   r^   	class_key   s    zPow.class_keyc                 C  sr   ddl m}m} |  \}}||||rn| rn||||rPt| |S ||||rnt| | S d S )Nr   )askQ)	Zsympy.assumptions.askrn   ro   as_base_expintegerrG   Zevenr   odd)ra   Zassumptionsrn   ro   rU   rV   r]   r]   r^   _eval_refine   s    zPow._eval_refinec                 C  s  |   \}}|tjkr"|| | S d }|jr4d}n.|jrBd}n |jd k	rbddlm}m}m	}m
} ddlm}	m}
 ddlm} dd }dd	 }|jr|d
kr||r|jdkrtj| t| ||  S |jdkrt|| S n0|jr|jrt|}|jrt||tj }t|dk dks2|dkr8d}n|jrFd}n||jrjt|dk dkrjd}nn||rb|	dtj tj | |tj||| dtj    }|jr|||| dkr||}nd }nzl|	dtj tj | |tj|||
| d tj   }|jr@|||| dkr@||}nd }W n tk
r`   d }Y nX |d k	r~|t|||  S d S )Nr   r   )rW   r.   rer-   rg   r+   )floorc                 S  s6   t | dddkrdS |  \}}|jr2|dkr2dS dS )zZReturn True if the exponent has a literal 2 as the
                denominator, else None.qNrk   T)getattras_numer_denomrB   )rV   ndr]   r]   r^   _half
  s
    zPow._eval_power.<locals>._halfc                 S  s8   z| j ddd}|jr|W S W n tk
r2   Y nX dS )zXReturn ``e`` evaluated to a Number with 2 significant
                digits, else None.rk   TstrictN)evalfrF   r
   )rV   rvr]   r]   r^   _n2  s    
zPow._eval_power.<locals>._n2r%   TFrk   )rp   r   r6   rB   is_polaris_extended_realrO   rW   r.   rt   r-   rL   rg   r+   #sympy.functions.elementary.integersrv   is_negativer9   r   rH   rJ   is_imaginaryrP   is_extended_nonnegativerQ   Halfr
   )ra   otherrU   rV   r[   rW   r.   rt   r-   rg   r+   rv   r|   r   r]   r]   r^   rR      sd    





"


zPow._eval_powerc                 C  sr  | j | j }}|jrn|jrn|jr6|| dkr6tjS ddlm} |jr|jr|jrt	|t	|t	|  }}}|
 }|dkr||kr|
 d |krt	||}	tt||	||	  |S tt|||S ddlm}
 t|tr|jr|jr|
||}|
t||dd|S t|trn|jrn|jrnt	|
 }|dkrn||}	|	|
||	 }|
t||d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r/   N)r`   rg   rB   is_positiver   r:   Z%sympy.functions.combinatorial.numbersr   rC   int
bit_lengthIntegerpowmodr   r1   r   rD   )ra   rw   r`   rg   r   rU   rV   mmbphir   r   r]   r]   r^   	_eval_ModO  s,     

zPow._eval_Modc                 C  s   | j jr| j jr| jjS d S rh   )rg   rB   r   r`   rH   re   r]   r]   r^   _eval_is_even  s    zPow._eval_is_evenc                 C  s   t | }|dkr| jS |S NT)r   _eval_is_extended_negativer;   )ra   Zext_negr]   r]   r^   _eval_is_negative  s    
zPow._eval_is_negativec                 C  s   | j | jkr| j jrdS n| j jr0| jjrdS n| j jrR| jjrDdS | jjrdS n| j jrl| jj	r| jjS nn| j j
r| jjrdS nX| j jr| jjr| jd }|jrdS |jr|jdkrdS | jjrddlm} || j jS d S )NTFr#   r   r*   )r`   rg   r   r   is_realis_extended_negativerH   rI   is_zeror   is_extended_nonpositiver   rB   rL   r+   )ra   r   r+   r]   r]   r^   _eval_is_extended_positive  s6    

zPow._eval_is_extended_positivec                 C  s   | j tjkr | jjs| jjr dS | jjrJ| j jr<| jjr<dS | j j	rdS nl| jj
r`| j jrdS nV| jjrv| j jrdS n@| jjr| j jrdS n*| jjr| j j	rdS n| jjr| j j	rdS d S NFT)rg   r   r   r`   
is_complexr   r   rI   r;   rH   is_extended_positiver   r   r   re   r]   r]   r^   r     s.    zPow._eval_is_extended_negativec                 C  s   | j jr"| jjrdS | jjrdS n| j tjkr:| jtjkS | j jdkr| j jrZ| jjrZdS | jj	rj| j j
S | jjrvdS | jj
r| jjrdt| j  jr| jjS dt| j  jr| jjS n| j jr| jj	rdS d S )NTFr   )r`   r   rg   r   r   r   r=   NegativeInfinityr;   r   rK   is_nonnegativer   rJ   r   re   r]   r]   r^   _eval_is_zero  s*    
zPow._eval_is_zeroc                 C  s   | j \}}|jr$|jdkr$|jr$dS |jrN|jrN|tjkr>dS |jsJ|jrNdS |jr|jr|jsf|jrt	|d j
rt	|d j
rdS |jr|jr| j| j  }|jS |jr|jr|d jrdS |jr|jr|d jrdS d S )NFTr   )r    is_rationalrB   r   r   r9   r   r   r;   r   r   rF   funcrC   )ra   rU   rV   checkr]   r]   r^   _eval_is_integer  s&    

zPow._eval_is_integerc                 C  s  | j tjkr8| jjrdS | jjr8dtj | j tj jS ddl	m
}m} | j j}|d kr| j j|krv| j jjrv| jjS | j jtkr| j j tjkr| j jjr| jjS d S | jj}|d krd S |r.|r.| j jrdS | j jr| jjrdS | jj r| j j rdS | jjr| jjrdS | j jr.| jjr.dS |r^| jjr^| j jdkr^t| j | j jS | j j}| jj}|r$| jjr| jjrdS | jjr$dS n|r|| j jrdS | jjr| j \}}|r$|jr$t| j | | j | ddjS n,| j tj tjfkr$| jd jdkr$dS |r|r| j tjkrBdS | jtj}|r| j jr|jr| j jr| j d jr|jrdS ||| j  tj j}	|	d k	r|	S |dkr|rt| jtr| jj dkrdS ddl!m"}
 |
| j | j tj }|j#r|jS d S )	NTrk   r   )r+   rg   Fr   r   rW   )$r`   r   r=   rg   r   r   rP   rQ   rH   rL   r+   r   r   r   r   rB   Zis_extended_nonzeror   r   is_Rationalr   rI   rN   as_coeff_AddrC   Mulr9   coeffr   
is_nonzeror1   RationalprO   rW   r   )ra   r+   rg   Zreal_bZreal_eZim_bim_erX   aokrW   ir]   r]   r^   _eval_is_extended_real  s    $





  
 
zPow._eval_is_extended_realc                 C  sD   | j tjkr t| jj| jjgS tdd | jD r@| 	 r@dS d S )Nc                 s  s   | ]}|j V  qd S rh   )r   ).0r   r]   r]   r^   	<genexpr>?  s     z'Pow._eval_is_complex.<locals>.<genexpr>T)
r`   r   r=   r   rg   r   r   allr    _eval_is_finitere   r]   r]   r^   _eval_is_complex:  s    zPow._eval_is_complexc           
      C  s>  | j jdkrdS | j jr8| jjr8| jj}|d k	r4|S d S | j tjkrrd| j tjtj	  }|j
rddS |jrndS d S | jjrddlm} || j j}|d k	rdS | j jr| jjr| j jrdS | jj}|s|S | jjrdS d| j j}|r| j jS |S | j jdkr:ddlm} || j | j tj }d| j}	|	d k	r:|	S d S )NFrk   Tr   r*   r   )r`   r   r   rg   rB   rI   r   r=   rQ   rP   rH   rL   r+   r   r   r   r   rO   rW   )
ra   rr   fr+   ZimlogratZhalfrW   r   Zisoddr]   r]   r^   _eval_is_imaginaryB  sL    

zPow._eval_is_imaginaryc                 C  s@   | j jr<| j jr| jjS | j jr,| jjr,dS | jtjkr<dS d S r   )rg   rB   r   r`   rI   r   r   r9   re   r]   r]   r^   _eval_is_odds  s    zPow._eval_is_oddc                 C  st   | j jr(| jjrdS | jjs$| jjr(dS | jj}|d kr<d S | j j}|d krPd S |rp|rp| j jslt| jjrpdS d S r   )	rg   r   r`   r   rK   r   r;   r   r   )ra   c1c2r]   r]   r^   r   |  s    zPow._eval_is_finitec                 C  s$   | j jr | jjr | jd jr dS dS )zM
        An integer raised to the n(>=2)-th power cannot be a prime.
        r   FN)r`   rB   rg   r   re   r]   r]   r^   _eval_is_prime  s    zPow._eval_is_primec                 C  sL   | j jrH| jjrH| j d jr(| jd jsD| j d jrH| jjrH| jjrHdS dS )zS
        A power is composite if both base and exponent are greater than 1
        r   TN)r`   rB   rg   r   r   rH   re   r]   r]   r^   _eval_is_composite  s    


zPow._eval_is_compositec                 C  s   | j jS rh   )r`   r   re   r]   r]   r^   _eval_is_polar  s    zPow._eval_is_polarc                 C  s  ddl m} t| j|rT| j||}| j||}t||rH||S | ||S ddlm}m	} dd }|| jks||kr| jt
jkr|jrt|tr|| j||S || j|| S t|| jr| j|jkr|| j|j}	|	jrt||	S t|| jrZ| j|jkrZ| jjdkr| jjtdd}
|jjtdd}||
||\}}}|rZ| ||}|d k	r~t|t|j|}|S n|j}g }g }| }| jjD ]z}|||}| }
||
||\}}}|r|||  |d k	r|| qn|js|js d S || q|rZt| }||dkrJt| j|dd	n| j t| S t||s||jr|jt
jkr| jjr| jjr|jjtdd}
| j|| j jtdd}||
||\}}}|r| ||}|d k	rt|t|j|}|S d S )
Nr   r&   ru   c                 S  s$  | \}}|\}}||kr |j r|| }zt|dd d}W n8 tk
rt   | \}	}
|	jrd|
jpn|	jon|
j}Y nX ||dfS t|ts|f}t	dd |D sdS zbt
t|t|\}}|dk r|dkr|d	7 }|t|8 }|dkrd}nt|f| }d||fW S  tk
r   Y nX 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                 s  s   | ]}|j V  qd S rh   )rB   )r   termr]   r]   r^   r     s     z1Pow._eval_subs.<locals>._check.<locals>.<genexpr>)FNNr   r   )r   r   
ValueErrorrp   r   r   r   r1   tupler   divmodr   )ct1ct2oldZcoeff1Zterms1Zcoeff2Zterms2r   ZcombinesrU   rV   	remainderremainder_powr]   r]   r^   _check  s8    


zPow._eval_subs.<locals>._checkF)Zas_Addr   r   )r>   r'   r1   rg   r`   subs__rpow__r   rL   r+   r   r=   Zis_Functionr   _subsrF   r   rN   Zas_independentSymbolr   Zas_coeff_mulr    appendr   rB   Addis_Powr   r   )ra   r   newr'   rU   rV   rg   r+   r   lr   r   r   r   r   resultZoargZnew_lZo_alr   Znewaexpor]   r]   r^   
_eval_subs  sv    

:



&6 
zPow._eval_subsc                 C  s<   | j \}}|jr4|j|jk r4|jdkr4d| | 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   rw   )ra   rU   rV   r]   r]   r^   rp      s    
zPow.as_base_expc                 C  sr   ddl m} | jj| jj }}|r2|| j| j S |rF| j|| j S |dkrn|dkrnt| }|| krn||S d S )Nr   )adjointF)rO   r   rg   rB   r`   r   r   )ra   r   r   r   expandedr]   r]   r^   _eval_adjoint=  s    zPow._eval_adjointc                 C  s|   ddl m} | jj| jj }}|r2|| j| j S |rF| j|| j S |dkrn|dkrnt| }|| krn||S | jrx| S d S )Nr   )	conjugateF)rO   r   rg   rB   r`   r   r   r   )ra   rX   r   r   r   r]   r]   r^   _eval_conjugateI  s    zPow._eval_conjugatec                 C  s   ddl m} | jtjkr,| tj| j S | jj| jjp@| jj	 }}|rV| j| j S |rj|| j| j S |dkr|dkrt
| }|| kr||S d S )Nr   )	transposeF)rO   r   r`   r   r=   r   rg   rB   r   rK   r   )ra   r   r   r   r   r]   r]   r^   _eval_transposeW  s    zPow._eval_transposec                   s   j  j} tjkrXddlm} t||rX|jrXddlm	} |
 |jf|j S |jr|dds| jdks|| r|jrt fdd|jD  S  jrt|jdd	 d
d\}}|rt fdd|D   t|  S S )za**(n + m) -> a**n*a**mr   )Sum)ProductforceFc                   s   g | ]}  |qS r]   r   r   xrU   ra   r]   r^   
<listcomp>q  s     z.Pow._eval_expand_power_exp.<locals>.<listcomp>c                 S  s   | j S rh   r   r   r]   r]   r^   <lambda>s      z,Pow._eval_expand_power_exp.<locals>.<lambda>Tbinaryc                   s   g | ]}  |qS r]   r   r   r   r]   r^   r   u  s     )r`   rg   r   r=   Zsympy.concrete.summationsr   r1   r   Zsympy.concrete.productsr   r   functionZlimitsrN   getr   _all_nonneg_or_nonpposr   r    r   r   
_from_args)ra   hintsrV   r   r   rX   ncr]   r   r^   _eval_expand_power_expe  s*    
zPow._eval_expand_power_expc                   sT   dd}j}j |js"S |jdd\}}|rfdd|D } jr jrbt|   }n"tdd |ddd D     }|r|t|   9 }|S |sjt|  dd	S t| g}t	|d
d dd\}}dd }	t	||	}
|
d }||
d 7 }|
d }|
t
j }|rt
j}t|d }|dkr0n|dkrF|| n~|dkr|rx|  }|t
jk	r|| n|t
j n>|r|  }|t
jk	r|| n|t
j || ~|sԈ jr|| | }|}n jrtt|dkrjt
j}|s&|d jr&||d9 }t|d r:| }|D ]}||  q>|t
jk	r|| n\|r|r|d jr|d t
jk	r|t
j ||d   n
|| n
|| ~|}||7 }t
j}|r2 jrt	|dd dd\}}t fdd|D  }|t fdd|D  9 }|rP|jt|  dd	9 }|S )z(a*b)**n -> a**n * b**nr   F)Zsplit_1c                   s&   g | ]}t |d r|jf  n|qS )_eval_expand_power_base)hasattrr   r   r   )r   r]   r^   r     s   z/Pow._eval_expand_power_base.<locals>.<listcomp>c                 S  s   g | ]}|d  qS )r%   r]   r   r]   r]   r^   r     s     Nr%   r   c                 S  s
   | j dkS NF)r   r   r]   r]   r^   r     r   z-Pow._eval_expand_power_base.<locals>.<lambda>Tr   c                 S  s4   | t jkrt jS | j}|rdS |d kr0t| jS d S r   )r   rP   r   r   r   )r   Zpolarr]   r]   r^   pred  s    
z)Pow._eval_expand_power_base.<locals>.predr#   r   r   rk   c                 S  s   | j o| jjo| jjS rh   )r   rg   r   r`   rD   r   r]   r]   r^   r     s   c                   s    g | ]} |j |j  qS r]   )r   r    r   rU   rV   ra   r]   r^   r     s     c                   s   g | ]}j | d dqS )Fr   r   r   r   r]   r^   r     s     )r   r`   rg   rE   Zargs_cncrC   r   r   r   r   r   rP   lenr   popr8   r9   rB   AssertionErrorrF   extendr   )ra   r   r   rU   Zcargsr   r   r   Z
maybe_realr   ZsiftedZnonnegnegimagIr   Znonnorz   Znpowr]   )rV   r   ra   r^   r   y  s    
"













zPow._eval_expand_power_basec                   s2  | j \ }| }|jrX|jdkrX jrX|jst|j|j }|sH|S |  || g  }}|  |}|jrx|	 }t
|D ]}|||  qt
| S t|} jrg g  }}	 j D ] }
|
jr||
 q|	|
 q|rLt
|	 }t
| }|dkrt|| dd|| |  S t||d  dd}t|| dd|| |  S  jr  \}}
|jr|
jr|js|
js| |j|
j |}|j|
j |j|
j  }}
n | |j|}|j|j|
  }}
n.|
js| |
j|}||
j |
j }}
nd}t|t|
ddf\}}
}}|r|d@ rV|| |
|  |
| ||   }}|d8 }|| |
|
  d| |
  }}
|d }qtj}|dkr|||  S t|| || |  S |	}ddlm} ddlm} |t||}||f| S |dkrt
 fdd	 j D  S  |d  	 jr>t
fd
d	 j D  S t
fdd	 j D  S n|jr|jdk r jrt|j|jkrd|  | 	  S |jr* jr*|ddsЈ jdks| r*g g  }}|j D ],}|jr ||  | n
|| qt ||  t
!|g  S |S dS )zA(a + b + ..)**n -> a**n + n*a**(n-1)*b + .., n is nonzero integerr   rk   Fdeepr   )multinomial_coefficients)basic_from_dictc                   s    g | ]} j D ]}|| qqS r]   r    r   r   g)r`   r]   r^   r   S  s       z0Pow._eval_expand_multinomial.<locals>.<listcomp>c                   s    g | ]} j D ]}|| qqS r]   r
  r  multir]   r^   r   W  s     c                   s   g | ]}|  qS r]   r]   )r   r   r  r]   r^   r   [  s     r   N)"r    r   r   rN   rC   r   rw   r   r   _eval_expand_multinomialr   	make_argsr   r   r   is_Orderr   r   rD   as_real_imagr   rP   Zsympy.ntheory.multinomialr  Zsympy.polys.polyutilsr	  r   rJ   rF   r   r   r   r   r   )ra   r   rg   r   rz   radicalZexpanded_base_nr   Zorder_termsZother_termsrU   r   r  r  r   krX   r{   r  r   r  r	  Zexpansion_dictr   tailr]   )r`   r  r^   r    s    




"



zPow._eval_expand_multinomialc                   sb  | j jrddlm} | j }| jj|d\}}|s<| tjfS tdt	d\ |dkr|j
r~|j
r~t| j| }|| kr~| S |  | }nj|d |d  }|| | |  }}|j
r|j
rt||tj  |  }|| kr| S |  |  }dd | D }	t fd	d|	D  }
d
d | D }	t fdd|	D  }dd | D }	t fdd|	D  }|
 |tj| i| ||i| || i fS ddlm}m}m} | j jr| jj|d\}}|jr*| j tjkr*|jr| tjfS |jr*tj| j | j  fS | | |d| |d tj}	|||}| |	| j || j   }}||| ||| fS | jtjkrddlm } | j  \}}|r|j|f|}|j|f|}|||| }}||| ||| fS ddlm}m} |rNd|d< | j|f|}| d|kr<d S ||||fS n|| || fS d S )Nr   )polyr  za brl   rk   c                 S  s    g | ]}|d  d d s|qS )r   r   rk   r]   r   r]   r]   r^   r     s      z$Pow.as_real_imag.<locals>.<listcomp>c                   s(   g | ] \\}}}| |  |  qS r]   r]   r   ZaaZbbccr   rU   r]   r^   r     s    
 c                 S  s$   g | ]}|d  d d dkr|qS )r   r   r#   r]   r   r]   r]   r^   r     s      c                   s(   g | ] \\}}}| |  |  qS r]   r]   r  r  r]   r^   r     s    
 c                 S  s$   g | ]}|d  d d dkr|qS )r   r   r#   rj   r]   r   r]   r]   r^   r     s      c                   s(   g | ] \\}}}| |  |  qS r]   r]   r  r  r]   r^   r     s    
 )atan2cossinrg   )r.   rt   Fcomplexignore)!rg   rC   Zsympy.polys.polytoolsr  r`   r  r   r:   symbolsDummyrF   r   rP   termsr   r   (sympy.functions.elementary.trigonometricr  r  r  r   r   r   r   r   r   r=   rL   expandrO   r.   rt   r   )ra   r  r   r  rg   Zre_er   exprmagrZre_partZim_part1Zim_part3r  r  r  trptprX   r[   r.   rt   r   r]   r  r^   r  n  sv    


$

"
zPow.as_real_imagc                 C  sF   ddl m} | j|}| j|}| ||| j || j | j   S r_   )rL   r+   r`   diffrg   )ra   r[   r+   ZdbaseZdexpr]   r]   r^   _eval_derivative  s    zPow._eval_derivativec                 C  s   |   \}}|tjkr6ddlm} || jdd|S ||}|jsP||}|jr|j	r|j
dkr| ||  | }| }| || S | ||S )Nr   r  Fr   )rp   r   r=   rL   rg   _eval_evalfZ_evalfrC   r   rD   r   r   r   r$  )ra   precr`   rg   Zexp_functionr]   r]   r^   r-    s    


zPow._eval_evalfc                 C  sF   | j j| rdS | jj| r>t| j|o:| j jo:| j dkS dS d S )NFr   T)rg   hasr`   bool_eval_is_polynomialrC   ra   Zsymsr]   r]   r^   r1    s    zPow._eval_is_polynomialc                 C  s   | j jr,| jjr,tt| j j| jjgr,dS | j| 	  }|j
sF|jS |	 \}}|jrb|jrbdS |jr|jrt|js~|jrdS ||krdS n|jr|jS |tjkr|jr|jrdS d S )NTF)rg   rB   r`   r   r   r   r   r   r   rp   r   r   r   is_irrationalr   r=   r   )ra   r   rU   rV   r]   r]   r^   _eval_is_rational  s*    
zPow._eval_is_rationalc                 C  s6  dd }| j js|| j rdS | j tjkr| j| j }|j| jkr| jjr| jjrVdS | jtj	 j
rhdS | jtjtj	  j
rdS n|jS n| jj
r| j jdkr| jjS | j jdkr| jjr| j jS | j jrdS | jjr| j jS nR| j jr2| jjr2t| j jrt|| j s*| j jdks*| j jr2| jj
S d S )Nc                 S  s(   z| d j W S  tk
r"   Y dS X d S )Nr   F)r   r   )r%  r]   r]   r^   _is_one  s    z'Pow._eval_is_algebraic.<locals>._is_oneTF)r`   r   r   r=   r   r    rg   r   Zis_algebraicrQ   r   rP   r   r   rB   r3  )ra   r5  r[   r]   r]   r^   _eval_is_algebraic  sB    

zPow._eval_is_algebraicc                 C  s8   | j j| rdS | jj| r0| j|o.| j jS dS d S r   )rg   r/  r`   _eval_is_rational_functionrC   r2  r]   r]   r^   r7  "  s    zPow._eval_is_rational_functionc           	      C  s   | j ||}| jj}|r|S | j||}|dkr@|r<dS d S |d krLd S | j ||}|j}|rjd}nt|jt|f}|dkr|S |d krd S |s|S | j||jS r   )	r`   _eval_is_meromorphicrg   rC   r   r   r   r;   r   )	ra   r   r   Z
base_meromZexp_integerZ	exp_meromrU   Zb_zeroZlog_definedr]   r]   r^   r8  ,  s*    zPow._eval_is_meromorphicc                 C  s8   | j j| rdS | jj| r0| j|o.| j jS dS d S r   )rg   r/  r`   _eval_is_algebraic_exprr   r2  r]   r]   r^   r9  Q  s    zPow._eval_is_algebraic_exprc           	      K  s   ddl m}m} |js*||s*||r2|| S |t}|trztjrdtt	j
||| |dS |||| |dS n2ddlm}m} ||||t	j||  | S d S )Nr   ru   r   )rW   Abs)rL   rg   r+   r   r/  r   r   Z
exp_is_powr   r   r=   rO   rW   r:  rP   )	ra   r`   r   kwargsrg   r+   r/   rW   r:  r]   r]   r^   _eval_rewrite_as_exp[  s    

zPow._eval_rewrite_as_expc                 C  s
  | j s| tjfS |  \}}| \}}|j}|jrF|sF|jsF| }|j	}|j
s`|s`|}tj}|j}|rz| |  }}n|d kr|s|}tj}|r|| }}| }|jr|tjkr|tjk	r|| ||fS |tjk	r|tjkr| |||fS | ||| ||fS rh   )r   r   r8   rp   ry   r   rE   r   rG   rB   r   is_nonpositiverK   r   )ra   r`   rg   rz   r{   Zneg_expZint_expZdnonposr]   r]   r^   ry   o  s4    


zPow.as_numer_denomFc           	      C  s   t |}|d kri }|tjkr:| jtj|}|d k	r:|S t|tsHd S | \}}|  \}}|j	r|j
r|r|jr||||  |S ||d|  |S | }| j||}|d krd S | j|||}|d krt| ||S |S rf   )r   r   r8   rg   matchesr:   r1   r	   rp   rA   rC   r   copyr`   Zxreplace)	ra   r%  Z	repl_dictr   r{   rU   rV   sbser]   r]   r^   r>    s.    

zPow.matchesr   c           3   
     s$  ddl m}m} ddlm} ddlm} ddlm}	 | j	t
jkr| jj|||d}
|
jrbd|
 S ||
 |d}|t
jkr||| |S |t
jkr| S |
| }|| }}td|D ](}||| 9 }|j|||d}||7 }q|||| |7 }ddlm} ||d	d
dS ddlm} ddlm} || d	d } |  \}}|j| rRt ||r||||| j||||dS |d k	r||rddlm} td||gd\}}|||||  ||||  }|| } | }z>ddl m!} ||t
j"r|d k	rt# |$|\}}W n^ t#t%tfk
r   |j|t&d|||d }|t
j't
j(rpt% |$|\}}Y nX ||rddl)m*} ||+ }|j,s|j-r|j.s| | j/|||dkr|||| j||||d}||||| kr| S |S |j0||d}|| t
j1 j+dd}|j-sDt% |||    t2rd|	|  j3r~||||  |S |j,r|| }|| kr|||| |7 }|S dd }  fdd}!z|j$||d\}}"W nV t#t%fk
r.   |||   |ddkr$|| |||  |   Y S t% Y nX |j4rf|"t
j5krfddl)m6}# |#|j$||d\}}"|"j7s|8 }|j,r|| S |j$||d\}}"|"j7s|| | 9 }|j$||d\}}"|"j7st% ddl:m;}$ |j||$ ||d }%i }&t<=|%D ]*}| ||\}'}(|&>|(t
j5|' |&|(< qt
j1})t
j5t
j1i}*|&}+dd l?m@},mA}- |)|"   j3r|-||)|,|) }.|+D ]$}|*>|t
j5|.|+|   |*|< q||!|+|&}+|)t
j17 })qVdd!lBmC}/ |jDsb|j,rb|j3rb|| E||}0|/|0j3r| || d"d#|   |\}1}2nF|/|0j,rN| |||| j0|||d|\}1}2n| || |\}1}2n| || |\}1}2t
j5}|*D ]&}(|(|2 }||*|( |1 ||  7 }q~|jDr|j7r||" | jFr|tG| ks z|||| |7 }W n4 t%k
r   |||| j||||d Y S X |S )$Nr   ru   )limit)Ordersympify)rz   logxr   )powsimpTrg   )r  combine)	powdenest)_illegal)r   )rz   rF  cdir)Wildzc, ex)rT   exclude)	polygammark   )
logcombinerF  rK  rF  F)r$  c              	   S  s   t jt j }}t| D ]`}||rp| \}}||krxz| |W   S  tk
rl   | t jf Y   S X q||9 }q||fS rh   )	r   r8   r:   r   r  r/  rp   leadtermr   )r   r   r   rg   factorr`   r]   r]   r^   	coeff_exp  s    

z$Pow._eval_nseries.<locals>.coeff_expc                   sN   i }t | |D ]:\}}|| }| k r||tj| | ||   ||< q|S rh   )r   r   r   r:   )Zd1Zd2rese1e2rY   Zmaxpowr]   r^   mul  s    $zPow._eval_nseries.<locals>.mul)	nsimplify)ceiling)	factorialffr.   r%   )HrL   rg   r+   Zsympy.series.limitsrB  Zsympy.series.orderrC  Zsympy.core.sympifyrE  r`   r   r=   Znseriesr  ZremoveOr   r7   rangeZsympy.simplify.powsimprG  rI  numbersrJ  Ztrigsimprp   r/  r   _eval_nseriessymbolrL  r   replaceZ'sympy.functions.special.gamma_functionsrN  Z
EulerGammar   rR  NotImplementedErrorr@   r6   r5   Zsympy.simplify.simplifyrO  cancelr   rD   r   _eval_as_leading_termas_leading_termr8   r   r   Zis_Floatr:   rZ  r   simplifyr$  r   r[  r   r  r   (sympy.functions.combinatorial.factorialsr\  r]  rO   r.   rB   dirr=  r   )3ra   r   rz   rF  rK  rg   r+   rB  rC  rE  Ze_seriesZe0r(  Z
exp_seriesr   r   rG  rI  rJ  rU   rV   rL  rX   rY   rN  _r   rO  rU  r   r  r'  rT  rY  r{   rZ  r[  ZgpolyZgtermsZco1rV  r  r"  Ztkr\  r]  r   r.   ndirZincoZinexr]   rX  r^   rb    s    


$
"
 ( 
$zPow._eval_nseriesc                 C  sx  ddl m}m} | j}| j}| jtjkr||j||d}||d}	|	tjkrX|	|d}	|	j
dkrltj|	 S td|   n||r|||| }
|
j|||dS ddlm} z|j|||d}W n tk
r   |  Y S X |jsh|jrh||sh|| ||}||jr0| ||dd	|   S ||jrh||j|||d}|j
dkrh||| S | ||S d S )
Nr   ru   rQ  FzCannot expand %s around 0rP  r^  r%   r_  )rL   rg   r+   r`   r   r=   rh  r   r6   rB  rK   r   r/  rO   r.   rB   r   rk  r   r   rg  )ra   r   rF  rK  rg   r+   rV   rU   rW   Zarg0ltr.   r   rm  Zlog_leadtermr]   r]   r^   rg  o  s8    




zPow._eval_as_leading_termc                 G  s$   ddl m} || j|| || S )Nr   )binomial)rj  ro  rg   r   )ra   rz   r   previous_termsro  r]   r]   r^   _taylor_term  s    zPow._taylor_termc                   s   | j tjk	r t j||f| S |dk r.tjS |dkr<tjS ddlm} ||}|rp|d }|d k	rp|| | S ddlm	} || || S )Nr   r   rD  r%   )r\  )
r`   r   r=   supertaylor_termr:   r8   rE  rj  r\  )ra   rz   r   rp  rE  r   r\  r<   r]   r^   rs    s    zPow.taylor_termc                 K  sL   | j tjkrHddlm} |tj| j tjd  tj|tj| j   S d S )Nr   )r  rk   )r`   r   r=   r#  r  rP   rg   rQ   )ra   r`   rg   r   r  r]   r]   r^   _eval_rewrite_as_sin  s    zPow._eval_rewrite_as_sinc                 K  sL   | j tjkrHddlm} |tj| j tj|tj| j tjd    S d S )Nr   )r  rk   )r`   r   r=   r#  r  rP   rg   rQ   )ra   r`   rg   r   r  r]   r]   r^   _eval_rewrite_as_cos  s    zPow._eval_rewrite_as_cosc                 K  s@   | j tjkr<ddlm} d|| jd  d|| jd   S d S )Nr   )tanhr   rk   )r`   r   r=   Z%sympy.functions.elementary.hyperbolicrw  rg   )ra   r`   rg   r   rw  r]   r]   r^   _eval_rewrite_as_tanh  s    zPow._eval_rewrite_as_tanhc           	      K  s   ddl m}m} |tjk	rd S |jr|tjtj }|r|j	r|tj| |tj|  }}t
||st
||s|tj|  S d S )Nr   )r  r  )r#  r  r  r   r=   rE   r   rQ   rP   rD   r1   )	ra   r`   rg   r;  r  r  r   ZcosineZsiner]   r]   r^   _eval_rewrite_as_sqrt  s    

zPow._eval_rewrite_as_sqrtc              	   C  s>  |   \}}t|j||d }|j||d\}}|jr| \}}|jr|tjkr|| }	| ||	}
tj}|
jst|	j	|	j
\}}| ||}
|
| |t|||| |	j
  fS t||}|jr,|jr,|j||d\}}| || \}
}|  \}}|tjk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.
        )r  clear)rp   _keep_coeffas_content_primitiver   r   r   r:   r   r   r   rw   rE   rM   r8   )ra   r  rz  rU   rV   ZceZpehr(  ZcehrX   r'  Zicehr   mer]   r]   r^   r|    s*    +$
zPow.as_content_primitivec           
      O  s   | }| ddr| }| \}}|d}|rJ|| }||krJ| S |j| }|j| }	|	r|rjdS |d}|dkrdS n|	d krd S |dS )Nri  Tr   F)r   ri  rp   equalsis_constant)
ra   Zwrtflagsr%  rU   rV   Zbzr   ZeconZbconr]   r]   r^   r    s(    



zPow.is_constantc                 C  sF   | j \}}||rB||sB|||| }|||  d |  S d S rf   )r    r/  r   )ra   rz   steprU   rV   Znew_er]   r]   r^   _eval_difference_delta(  s    
zPow._eval_difference_delta)N)r   )T)NF)r   )Nr   )FT)Ar4   
__module____qualname____doc__r   	__slots____annotations__r   rS   rb   propertyr`   rg   ri   classmethodrm   rs   rR   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rp   r   r   r   r   r   r  r  r,  r-  r1  r4  r6  r7  r8  r9  r<  ry   r>  rb  rg  rq  rs  ru  rv  rx  ry  r|  r  r  __classcell__r]   r]   rt  r^   r      s   
Xb


	T8F1		 {z
S
'
%
#
"
 <
"

Qr   power)r   )r   r   )r   r{  )r   r!  r   N):
__future__r   typingr   	itertoolsr   rE  r   cacher   Z	singletonr   r%  r	   r   r
   r   r   r   r   r   r   Zlogicr   r   r   r   
parametersr   r0   r   r   ri   r   r   Zsympy.utilities.iterablesr   Zsympy.utilities.exceptionsr   Zsympy.utilities.miscr   Zsympy.multipledispatchr   r   r  addobjectr   ra  r   r   rY  r   r{  rc  r   r!  r   r]   r]   r]   r^   <module>   sJ                 &