a
    kh                    @  s`  d dl mZ d dlmZmZ d dlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZ ddlmZmZmZmZ ddlmZ ddlmZm Z  ddl!m"Z"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ G dd deZ,e+dZ-e-.e/e/fe, ddl.m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z: dS )    )annotations)CallableTYPE_CHECKING)product   )_sympify)cacheit)S)Expr)PrecisionExhausted)expand_complexexpand_multinomial
expand_mul_mexpand	PoleError)
fuzzy_bool	fuzzy_not	fuzzy_andfuzzy_or)global_parameters)is_gtis_lt)
NumberKindUndefinedKind)sift)sympy_deprecation_warning)as_int)
Dispatcherc                      s   e Zd ZdZdZdZer*eddddZeddd	d
Z	eddddZ
edd Zed{ddddddZd|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/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(dIdJ Z)d}dKdLZ*dMdN Z+dOdP Z,dQdR Z-dSdT Z.dUdV Z/dWdX Z0dYdZ Z1d[d\ Z2d]d^ Z3d_d` Z4d~dbdcZ5ddedfZ6dgdh Z7edidj Z8 fdkdlZ9dmdn Z:dodp Z;dqdr Z<dsdt Z=ddudvZ>dwdx Z?dydz Z@  ZAS )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])returnc                 C  s   d S N selfr#   r#   >/var/www/auris/lib/python3.9/site-packages/sympy/core/power.pyargsu   s    zPow.argsr
   c                 C  s
   | j d S )Nr   r'   r$   r#   r#   r&   basey   s    zPow.basec                 C  s
   | j d S Nr   r(   r$   r#   r#   r&   exp}   s    zPow.expc                 C  s   | j jtu r| jjS tS d S r"   )r+   kindr   r)   r   r$   r#   r#   r&   r,      s    zPow.kindNzExpr | complex)ber!   c                 C  s^  |d u 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u rtjS |tju 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
u rt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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v rtjS |tju rt%|j&rtjS tjS ddl'm(}	 |j)s
|tju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 u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.accumulationboundsr4   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.exponentialr5   Zis_AtomZ	exprtoolsr6   r8   Zsympy.simplify.radsimpr9   as_coeff_Mulr'   is_Add$sympy.functions.elementary.complexesr:   r;   ImaginaryUnitPi_eval_power__new__Z _exec_constructor_postprocessorsr    )clsr-   r.   r<   r)   r+   r/   argr4   r5   r6   r8   r9   cexnumZdenr:   r;   sobjr#   r#   r&   r`      s    



  


zPow.__new__r   c                 C  s    | j tjkrddlm} |S d S Nr   r7   )r)   r	   rJ   rY   r8   )r%   Zargindexr8   r#   r#   r&   inverse   s    zPow.inversec                 C  s   dd| j fS )N      )rA   ra   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integerrT   Zevenr   odd)r%   Zassumptionsrn   ro   r-   r.   r#   r#   r&   _eval_refine   s    zPow._eval_refinec                 C  s  |   \}}|tju r"|| | S d }|jr4d}n,|jrBd}n|jd ur`d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u rtj| t| ||  S |jdu 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||r`|	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y^   d }Y n0 |d ur||t|||  S d S )Nr   r   )rb   r;   rer:   r+   r8   )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_denomrO   )r.   ndr#   r#   r&   _half  s
    zPow._eval_power.<locals>._halfc                 S  s6   z| j ddd}|jr|W S W n ty0   Y n0 dS )zXReturn ``e`` evaluated to a Number with 2 significant
                digits, else None.rk   TstrictN)evalfrS   r   )r.   rvr#   r#   r&   _n2  s    
zPow._eval_power.<locals>._n2r2   TFrk   )rp   r	   rC   rO   is_polaris_extended_realr\   rb   r;   rt   r:   rY   r+   r8   #sympy.functions.elementary.integersrv   is_negativerF   r   rU   rW   is_imaginaryr]   is_extended_nonnegativer^   Halfr   )r%   Zexptr-   r.   rf   rb   r;   rt   r:   r+   r8   rv   r|   r   r#   r#   r&   r_      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   r0   r   )ModFr<   N)r)   r+   rO   is_positiver	   rG   Z%sympy.functions.combinatorial.numbersr   rP   int
bit_lengthIntegerpowmodr   r>   r   rQ   )r%   rw   r)   r+   r   r-   r.   mmbphir   r   r#   r#   r&   	_eval_ModR  s,     

zPow._eval_Modc                 C  s   | j jr| j jr| jjS d S r"   )r+   rO   r   r)   rU   r$   r#   r#   r&   _eval_is_even  s    zPow._eval_is_evenc                 C  s   t | }|du r| jS |S NT)r   _eval_is_extended_negativerH   )r%   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u rdS | jjrddlm} || j jS d S )NTFr0   r   r7   )r)   r+   r   r   is_realis_extended_negativerU   rV   is_zeror   is_extended_nonpositiver   rO   rY   r8   )r%   r   r8   r#   r#   r&   _eval_is_extended_positive  s6    

zPow._eval_is_extended_positivec                 C  s   | j tju 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)r+   r	   r   r)   
is_complexr   r   rV   rH   rU   is_extended_positiver   r   r   r$   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u S | j jdu 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   r+   r   r   r	   rJ   NegativeInfinityrH   r   rX   is_nonnegativer   rW   r   r$   r#   r#   r&   _eval_is_zero  s*    
zPow._eval_is_zeroc                 C  s   | j \}}|jr$|jdu r$|jr$dS |jrN|jrN|tju 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_rationalrO   r   r	   rF   r   r   rH   r   r   rS   funcrP   )r%   r-   r.   checkr#   r#   r&   _eval_is_integer  s&    

zPow._eval_is_integerc                 C  s  | j tju r8| jjrdS | jjr8dtj | j tj jS ddl	m
}m} | j j}|d u r| j j|krv| j jjrv| jjS | j jtkr| j j tju r| j jjr| jjS d S | jj}|d u 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u 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v r$| jd jdu r$dS |r|r| j tju 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 ur|	S |du 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   )r8   r+   Fr   r   rb   )$r)   r	   rJ   r+   r   r   r]   r^   rU   rY   r8   r   r   r   r   rO   Zis_extended_nonzeror   r   is_Rationalr   rV   r[   as_coeff_AddrP   MulrF   coeffr   
is_nonzeror>   Rationalpr\   rb   r   )r%   r8   r+   Zreal_bZreal_eZim_bim_erc   aokrb   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 r"   )r   ).0r   r#   r#   r&   	<genexpr>B      z'Pow._eval_is_complex.<locals>.<genexpr>T)
r)   r	   rJ   r   r+   r   r   allr'   _eval_is_finiter$   r#   r#   r&   _eval_is_complex=  s    zPow._eval_is_complexc           
      C  s>  | j jdu rdS | j jr8| jjr8| jj}|d u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 u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u r:ddlm} || j | j tj }d| j}	|	d ur:|	S d S )NFrk   Tr   r7   r   )r)   r    r   r+   rO   rV   r	   rJ   r^   r]   rU   rY   r8   r   r   r   r   r\   rb   )
r%   rr   fr8   ZimlogZratZhalfrb   r   Zisoddr#   r#   r&   _eval_is_imaginaryE  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u r<dS d S r   )r+   rO   r   r)   rV   r   r	   rF   r$   r#   r#   r&   _eval_is_oddv  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 u r<d S | j j}|d u rPd S |rp|rp| j jslt| jjrpdS d S r   )	r+   r   r)   r   rX   r   rH   r   r   )r%   Z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)   rO   r+   r   r$   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)   rO   r+   r   r   rU   r$   r#   r#   r&   _eval_is_composite  s    


zPow._eval_is_compositec                 C  s   | j jS r"   )r)   r   r$   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u r| jjtdd}
|jjtdd}||
||\}}}|rZ| ||}|d ur~t|t|j|}|S n|j}g }g }| }| jjD ]z}|||}| }
||
||\}}}|r|||  |d u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u r| jjr| jjr|jjtdd}
| j|| j jtdd}||
||\}}}|r| ||}|d urt|t|j|}|S d S )
Nr   r3   ru   c                 S  s"  | \}}|\}}||kr|j r~|| }zt|dd d}W n6 tyr   | \}	}
|	jrb|
jpl|	jol|
j}Y n0 ||dfS t|ts|f}t	dd |D sdS zdt
t|t|\}}|dk r|dkr|d	7 }|t|8 }|dkrd}nt|g|R  }d||fW S  ty   Y n0 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 r"   )rO   )r   termr#   r#   r&   r     r   z1Pow._eval_subs.<locals>._check.<locals>.<genexpr>)FNNr   r   )r    r   
ValueErrorrp   r   r   r   r>   tupler   divmodr   )ct1ct2oldZcoeff1Zterms1Zcoeff2Zterms2r   Zcombinesr-   r.   	remainderremainder_powr#   r#   r&   _check  s8    


zPow._eval_subs.<locals>._checkF)Zas_Addr   r   )rK   r4   r>   r+   r)   subs__rpow__r   rY   r8   r	   rJ   Zis_Functionr   _subsrS   r   r[   Zas_independentSymbolr   Zas_coeff_mulr'   appendr    rO   Addis_Powr   r   )r%   r   newr4   r-   r.   r+   r8   r   lr   r   r   r   r   resultZoargZnew_lZo_alr   Znewaexpor#   r#   r&   
_eval_subs  st    

:



&6
zPow._eval_subsc                 C  s<   | j \}}|jr4|jdkr4|jdkr4t|j| fS ||fS )a  Return base and exp of self.

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

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

        Examples
        ========

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

        r   )r'   r   r   rw   r   )r%   r-   r.   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u rn|du rnt| }|| krn||S d S )Nr   )adjointF)r\   r   r+   rO   r)   r   r   )r%   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u rn|du rnt| }|| krn||S | jrx| S d S )Nr   )	conjugateF)r\   r   r+   rO   r)   r   r   r   )r%   rc   r   r   r   r#   r#   r&   _eval_conjugateK  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u r|du rt
| }|| kr||S d S )Nr   )	transposeF)r\   r   r)   r	   rJ   r   r+   rO   r   rX   r   )r%   r   r   r   r   r#   r#   r&   _eval_transposeY  s    zPow._eval_transposec                   s   j  j} tjkrZddlm} t||rZ|jrZddlm	} |
 |jg|jR  S |jr|dds~ jdu 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r-   r%   r#   r&   
<listcomp>s  r   z.Pow._eval_expand_power_exp.<locals>.<listcomp>c                 S  s   | j S r"   r   r   r#   r#   r&   <lambda>u  r   z,Pow._eval_expand_power_exp.<locals>.<lambda>Tbinaryc                   s   g | ]}  |qS r#   r   r   r   r#   r&   r   w  r   )r)   r+   r	   rJ   Zsympy.concrete.summationsr   r>   r    Zsympy.concrete.productsr   r   functionZlimitsr[   getr   _all_nonneg_or_nonpposr   r'   r   r   
_from_args)r%   hintsr.   r   r   rc   ncr#   r   r&   _eval_expand_power_expg  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ur|| n|t
j n>|r|  }|t
jur|| n|t
j || ~|sԈ jr|| | }|}n jrJ t|dkrjt
j}|s&|d jr&||d9 }t|d r:| }|D ]}||  q>|t
jur|| n\|r|r|d jr|d t
ju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 i  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 )r2   r#   r   r#   r#   r&   r     r   Nr2   r   c                 S  s
   | j du S NF)r   r   r#   r#   r&   r     r   z-Pow._eval_expand_power_base.<locals>.<lambda>Tr   c                 S  s4   | t ju rt jS | j}|rdS |d u r0t| jS d S r   )r	   r]   r   r   r   )r   Zpolarr#   r#   r&   pred  s    
z)Pow._eval_expand_power_base.<locals>.predr0   r   r   rk   c                 S  s   | j o| jjo| jjS r"   )r   r+   r   r)   rQ   r   r#   r#   r&   r     s   c                   s    g | ]} |j |j  qS r#   )r   r'   r   r-   r.   r%   r#   r&   r     r   c                   s   g | ]}j | d dqS )Fr   r   r   r   r#   r&   r     r   )r   r)   r+   rR   Zargs_cncrP   r   r   r   r   r	   r]   lenr   poprE   rF   rO   rS   extendr   )r%   r   r   r-   Zcargsr   r   otherZ
maybe_realr   ZsiftedZnonnegnegimagIr   Znonnorz   Znpowr#   )r.   r   r%   r&   r   {  s    
"













zPow._eval_expand_power_basec                   s4  | j \ }| }|jrZ|jdkrZ jrZ|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||}||g|R  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u 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   U  r   z0Pow._eval_expand_multinomial.<locals>.<listcomp>c                   s    g | ]} j D ]}|| qqS r#   r(   r  multir#   r&   r   Y  s   
c                   s   g | ]}|  qS r#   r#   )r   r   r	  r#   r&   r   ]  r   r   N)"r'   r   r   r[   rP   r   rw   r   r   _eval_expand_multinomialr   	make_argsr   r   r    is_Orderr   r   rQ   as_real_imagr	   r]   Zsympy.ntheory.multinomialr  Zsympy.polys.polyutilsr  r   rW   rS   r   r   r   r   r   )r%   r   r+   r   rz   radicalZexpanded_base_nr   Zorder_termsZother_termsr-   r   r  r  r   krc   r{   r  r   r  r  Zexpansion_dictr   tailr#   )r)   r
  r&   r    s    




"



zPow._eval_expand_multinomialc                   sn  | 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u 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u rddlm } | j  \}}|r|j|fi |}|j|fi |}|||| }}||| ||| fS ddlm}m} |rZd|d< | j|fi |}| d|krHd 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     r   z$Pow.as_real_imag.<locals>.<listcomp>c                   s(   g | ] \\}}}| |  |  qS r#   r#   r   ZaaZbbccr   r-   r#   r&   r     r   c                 S  s$   g | ]}|d  d d dkr|qS )r   r   r0   r#   r   r#   r#   r&   r     r   c                   s(   g | ] \\}}}| |  |  qS r#   r#   r  r  r#   r&   r     r   c                 S  s$   g | ]}|d  d d dkr|qS )r   r   r0   rj   r#   r   r#   r#   r&   r     r   c                   s(   g | ] \\}}}| |  |  qS r#   r#   r  r  r#   r&   r     r   )atan2cossinr+   )r;   rt   Fcomplexignore)!r+   rP   Zsympy.polys.polytoolsr  r)   r  r	   rG   symbolsDummyrS   r   r]   termsr   r   (sympy.functions.elementary.trigonometricr  r  r  r   r   r   r   r   r   rJ   rY   expandr\   r;   rt   r   )r%   r  r   r  r+   Zre_er   exprZmagrZre_partZim_part1Zim_part3r  r  r  trptprc   rf   r;   rt   r   r#   r  r&   r  p  sv    


$

"
zPow.as_real_imagc                 C  sF   ddl m} | j|}| j|}| ||| j || j | j   S rh   )rY   r8   r)   diffr+   )r%   rf   r8   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u r| ||  | }| }| || S | ||S )Nr   r  Fr   )rp   r	   rJ   rY   r+   _eval_evalfZ_evalfrP   r   rQ   r   r   r   r   )r%   precr)   r+   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)r+   hasr)   bool_eval_is_polynomialrP   r%   Zsymsr#   r#   r&   r,    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u r|jr|jrdS d S )NTF)r+   rO   r)   r   r   r   r   r   r   rp   r   r   r   is_irrationalr	   rJ   r   )r%   r   r-   r.   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u 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u r| jjS | j jdu 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u s*| j jr2| jj
S d S )Nc                 S  s&   z| d j W S  ty    Y dS 0 d S )Nr   F)r   r   )r!  r#   r#   r&   _is_one  s    z'Pow._eval_is_algebraic.<locals>._is_oneTF)r)   r   r	   rJ   r   r'   r+   r   Zis_algebraicr^   r   r]   r   r   rO   r.  )r%   r0  rf   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   )r+   r*  r)   _eval_is_rational_functionrP   r-  r#   r#   r&   r2  $  s    zPow._eval_is_rational_functionc           	      C  s   | j ||}| jj}|r|S | j||}|du r@|r<dS d S |d u rLd S | j ||}|j}|rjd}nt|jt|f}|du r|S |d u rd S |s|S | j||jS r   )	r)   _eval_is_meromorphicr+   rP   r   r   r   rH   r   )	r%   r   r   Z
base_meromZexp_integerZ	exp_meromr-   Zb_zeroZlog_definedr#   r#   r&   r3  .  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   )r+   r*  r)   _eval_is_algebraic_exprr   r-  r#   r#   r&   r4  S  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   )rb   Abs)rY   r+   r8   r   r*  r   r   Z
exp_is_powr   r	   rJ   r\   rb   r5  r]   )	r%   r)   r   kwargsr+   r8   r<   rb   r5  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 u r|s|}tj}|r|| }}| }|jr|tju r|tjur|| ||fS |tjur|tju r| |||fS | ||| ||fS r"   )r    r	   rE   rp   ry   r   rR   r   rT   rO   r   is_nonpositiverX   r   )r%   r)   r+   rz   r{   Zneg_expZint_expZdnonposr#   r#   r&   ry   q  s4    


zPow.as_numer_denomFc           	      C  s   t |}|d u ri }|tju r:| jtj|}|d ur:|S t|tsHd S | \}}|  \}}|j	r|j
r|r|jr||||  |S ||d|  |S | }| j||}|d u rd S | j|||}|d u rt| ||S |S r*   )r   r	   rE   r+   matchesrG   r>   r
   rp   rN   rP   r   copyr)   Zxreplace)	r%   r!  Z	repl_dictr   r{   r-   r.   Zsbser#   r#   r&   r9    s.    

zPow.matchesr   c           2   
     s$  ddl m}m} ddlm} ddlm} ddlm}	 | j	t
ju r| jj|||d}
|
jrbd|
 S ||
 |d}|t
ju r||| |S |t
ju 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 ur||rddlm} td||gd\}}|||||  ||||  }|| } | }z>ddl m!} ||t
j"r|d urt# |$|\}}W n\ t#t%tfy   |j|t&d|||d }|t
j't
j(rnt% |$|\}}Y n0 ||rddl)m*} ||+ }|j,s|j-r|j.s| | j/|||dkr|||| j||||d}||||| kr| S |S |j0||d}t1|| + }|| }|j-sDt% |||    t2rd|	|  j3r~||||  |S |j,r|| }|| kr|||| |7 }|S dd }  fdd}!z|j$||d\}}"W nT t#t%fy,   |||   |ddkr"|| |||  |   Y S t% Y n0 |j4rh|"t
j5krh|dd dd }|j$||d\}}"|"j6s|7 }|j,r|| S |j$||d\}}"|"j6s|| | 8 }|j$||d\}}"|"j6st% ddl9m:}# |j||# ||d }$i }%t;<|$D ]*}| ||\}&}'|%=|'t
j5|& |%|'< qt
j>}(t
j5t
j>i})|%}*dd l?m@}+mA}, |(|"   j3r|,||(|+|( }-|*D ]$}|)=|t
j5|-|*|   |)|< q~|!|*|%}*|(t
j>7 }(qXdd!lBmC}. |jDsd|j,rd|j3rd|| E||}/|.|/j3r| || d"d#|   |\}0}1nF|.|/j,rP| |||| j0|||d|\}0}1n| || |\}0}1n| || |\}0}1t
j5}|)D ]&}'|'|1 }||)|' |0 ||  7 }q|jDr|j6r||" | jFr|t1| ks z|||| |7 }W n2 t%y   |||| j||||d Y S 0 |S )$Nr   ru   )limit)Ordersympify)rz   logxr   )powsimpTr+   )r  combine)	powdenest)_illegal)r   )rz   r@  cdir)Wildzc, ex)ra   exclude)	polygammark   )
logcombiner@  rE  r@  c              	   S  s   t jt j }}t| D ]^}||rn| \}}||krvz| |W   S  tyj   | t jf Y   S 0 q||9 }q||fS r"   )	r	   rE   rG   r   r  r*  rp   leadtermr   )r   r   r   r+   Zfactorr)   r#   r#   r&   	coeff_exp  s    

z$Pow._eval_nseries.<locals>.coeff_expc                   sN   i }t | |D ]:\}}|| }| k r||tj| | ||   ||< q|S r"   )r   r   r	   rG   )d1Zd2rese1e2rd   Zmaxpowr#   r&   mul"  s    $zPow._eval_nseries.<locals>.mulc                 S  s   | j S r"   )is_Floatr   r#   r#   r&   r   6  r   z#Pow._eval_nseries.<locals>.<lambda>c                 S  s   t | S r"   )r   r   r#   r#   r&   r   6  r   )ceiling)	factorialffr;   r2   )GrY   r+   r8   Zsympy.series.limitsr<  Zsympy.series.orderr=  Zsympy.core.sympifyr?  r)   r	   rJ   Znseriesr  ZremoveOr   rD   rangeZsympy.simplify.powsimprA  rC  numbersrD  Ztrigsimprp   r*  r   _eval_nseriessymbolrF  r  replaceZ'sympy.functions.special.gamma_functionsrH  Z
EulerGammar   rL  NotImplementedErrorrM   rC   rB   Zsympy.simplify.simplifyrI  cancelr   rQ   r   _eval_as_leading_termas_leading_termr   r   r   rT  rG   r   simplifyr   r   rU  r   r  r   rE   (sympy.functions.combinatorial.factorialsrV  rW  r\   r;   rO   dirr8  )2r%   r   rz   r@  rE  r+   r8   r<  r=  r?  Ze_seriesZe0r#  Z
exp_seriesr   r   rA  rC  rD  r-   r.   rF  rc   rd   rH  _r   rI  rO  r   r  r"  rM  rS  r{   rU  ZgpolyZgtermsZco1rP  r  r  ZtkrV  rW  r   r;   ndirZincoZinexr#   rR  r&   r\    s    


$
"
 ( 
$zPow._eval_nseriesc                 C  st  ddl m}m} | j}| j}| jtju rz|j||d}||d}	|	tju rX|	|d}	|	j
du rltj|	 S td|  n||r|||| }
|
j|||dS ddlm} z|j|||d}W n ty   |  Y S 0 |jsd|jrd||sd|| ||}||jr,| ||dd	|   S ||jrd||j|||d}|j
du rd||| S | ||S d S )
Nr   ru   rK  FzCannot expand %s around 0rJ  rX  r2   rY  )rY   r+   r8   r)   r	   rJ   rb  r   rC   r<  rX   r   r*  r\   r;   rO   r   re  r   r   ra  )r%   r   r@  rE  r+   r8   r.   r-   rb   Zarg0ltr;   r   rg  Zlog_leadtermr#   r#   r&   ra  r  s8    




zPow._eval_as_leading_termc                 G  s$   ddl m} || j|| || S )Nr   )binomial)rd  ri  r+   r   )r%   rz   r   previous_termsri  r#   r#   r&   _taylor_term  s    zPow._taylor_termc                   s   | j tjur"t j||g|R  S |dk r0tjS |dkr>tjS ddlm} ||}|rr|d }|d urr|| | S ddlm	} || || S )Nr   r   r>  r2   )rV  )
r)   r	   rJ   supertaylor_termrG   rE   r?  rd  rV  )r%   rz   r   rj  r?  r   rV  rI   r#   r&   rm    s    zPow.taylor_termc                 K  sL   | j tju rHddlm} |tj| j tjd  tj|tj| j   S d S )Nr   )r  rk   )r)   r	   rJ   r  r  r]   r+   r^   )r%   r)   r+   r   r  r#   r#   r&   _eval_rewrite_as_sin  s    zPow._eval_rewrite_as_sinc                 K  sL   | j tju rHddlm} |tj| j tj|tj| j tjd    S d S )Nr   )r  rk   )r)   r	   rJ   r  r  r]   r+   r^   )r%   r)   r+   r   r  r#   r#   r&   _eval_rewrite_as_cos  s    zPow._eval_rewrite_as_cosc                 K  s@   | j tju r<ddlm} d|| jd  d|| jd   S d S )Nr   )tanhr   rk   )r)   r	   rJ   Z%sympy.functions.elementary.hyperbolicrq  r+   )r%   r)   r+   r   rq  r#   r#   r&   _eval_rewrite_as_tanh  s    zPow._eval_rewrite_as_tanhc           	      K  s   ddl m}m} |tju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	   rJ   rR   r   r^   r]   rQ   r>   )	r%   r)   r+   r6  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u s||kr,|
| t|||fS tj| ||fS )a  Return the tuple (R, self/R) where R is the positive Rational
        extracted from self.

        Examples
        ========

        >>> from sympy import sqrt
        >>> sqrt(4 + 4*sqrt(2)).as_content_primitive()
        (2, sqrt(1 + sqrt(2)))
        >>> sqrt(3 + 3*sqrt(2)).as_content_primitive()
        (1, sqrt(3)*sqrt(1 + sqrt(2)))

        >>> from sympy import expand_power_base, powsimp, Mul
        >>> from sympy.abc import x, y

        >>> ((2*x + 2)**2).as_content_primitive()
        (4, (x + 1)**2)
        >>> (4**((1 + y)/2)).as_content_primitive()
        (2, 4**(y/2))
        >>> (3**((1 + y)/2)).as_content_primitive()
        (1, 3**((y + 1)/2))
        >>> (3**((5 + y)/2)).as_content_primitive()
        (9, 3**((y + 1)/2))
        >>> eq = 3**(2 + 2*x)
        >>> powsimp(eq) == eq
        True
        >>> eq.as_content_primitive()
        (9, 3**(2*x))
        >>> powsimp(Mul(*_))
        3**(2*x + 2)

        >>> eq = (2 + 2*x)**y
        >>> s = expand_power_base(eq); s.is_Mul, s
        (False, (2*x + 2)**y)
        >>> eq.as_content_primitive()
        (1, (2*(x + 1))**y)
        >>> s = expand_power_base(_[1]); s.is_Mul, s
        (True, 2**y*(x + 1)**y)

        See docstring of Expr.as_content_primitive for more examples.
        )r  clear)rp   _keep_coeffas_content_primitiver   r   r	   rG   r   r   r   rw   rR   rZ   rE   )r%   r  rt  r-   r.   Zcepehr#  Zcehrc   r"  Zicehr   mer#   r#   r&   rv    s*    +$
zPow.as_content_primitivec           
      O  s   | }| ddr| }| \}}|d}|rJ|| }||krJ| S |j| }|j| }	|	r|rjdS |d}|du rdS n|	d u rd S |dS )Nrc  Tr   F)r   rc  rp   equalsis_constant)
r%   Zwrtflagsr!  r-   r.   Zbzr   ZeconZbconr#   r#   r&   r{    s(    



zPow.is_constantc                 C  sF   | j \}}||rB||sB|||| }|||  d |  S d S r*   )r'   r*  r   )r%   rz   stepr-   r.   Znew_er#   r#   r&   _eval_difference_delta+  s    
zPow._eval_difference_delta)N)r   )T)NF)r   )FT)BrA   
__module____qualname____doc__r   	__slots__r   propertyr'   r)   r+   r,   r   r`   ri   classmethodrm   rs   r_   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(  r,  r/  r1  r2  r3  r4  r7  ry   r9  r\  ra  rk  rm  ro  rp  rr  rs  rv  r{  r~  __classcell__r#   r#   rn  r&   r      s   X
b

	T8F1		 {z
S
'
%
#
"
 ="

Qr   power)r   )r   r   )r   ru  )r   r  r  N);
__future__r   typingr   r   	itertoolsr   r?  r   cacher   Z	singletonr	   r!  r
   r   r   r   r   r   r   r   r   Zlogicr   r   r   r   
parametersr   r=   r   r   r,   r   r   Zsympy.utilities.iterablesr   Zsympy.utilities.exceptionsr   Zsympy.utilities.miscr   Zsympy.multipledispatchr   r   r  addobjectr   r[  r   r   rS  r   ru  r]  r   r  r  r#   r#   r#   r&   <module>   sJ                 )