o
    GZh                    @  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Zed}d	d
Z	ed}ddZ
edd Zed~dddZdd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d0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$dBdC Z%dDdE Z&dFdG Z'dHdI Z(dJdK Z)ddLdMZ*dNdO Z+dPdQ Z,dRdS Z-dTdU Z.dVdW Z/dXdY Z0dZd[ Z1d\d] Z2d^d_ Z3d`da Z4ddcddZ5ddfdgZ6dhdi Z7edjdk Z8 fdldmZ9dndo Z:dpdq Z;drds Z<dtdu Z=ddvdwZ>dxdy Z?dzd{ 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_commutativereturntuple[Expr, Expr]c                 C  s   d S N selfr$   r$   ?/var/www/auris/lib/python3.10/site-packages/sympy/core/power.pyargsu   s   zPow.argsr
   c                 C  
   | j d S )Nr   r(   r%   r$   r$   r'   basey      
zPow.basec                 C  r)   Nr   r*   r%   r$   r$   r'   exp}   r,   zPow.expc                 C  s   | j jtu r
| jjS tS r#   )r.   kindr   r+   r   r%   r$   r$   r'   r/      s   zPow.kindNbExpr | complexec                 C  s:  |d u rt j}t|}t|}ddlm} t||st||r#td||fD ]}t|ts=tdt	|j
ddddd	 q'|r|tju rItjS |tju rzt|tjrWtjS t|tjrft|tjrftjS t|tjrz|jrrtjS |jd
u rztjS |tju rtjS |tju r|S |dkr|stjS |jj
dkr|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 rt%|j&rtjS tjS ddl'm(}	 |j)ss|tjurst||	ssddl*m+}
 ddl'm,} ddl-m.} |
|d
d/ \}}||\}}t||r?|j0d |kr?tj||  S |j1rsddl2m3}m4} |||}|j!rs|rs|||
|d
d |tj5 tj6  krstj||  S |7|}|d ur|S t8| ||}| 9|}t|ts|S |j:o|j:|_:|S )Nr   )
Relationalz Relational cannot be used in Powzf
    Using non-Expr arguments in Pow is deprecated (in this case, one of the
    arguments is of type zf).

    If you really did intend to construct a power with this base, use the **
    operator instead.z1.7znon-expr-args-deprecated   )Zdeprecated_since_versionZactive_deprecations_target
stacklevelFZAccumulationBoundsr   AccumBounds)	exp_polar)factor_termslog)fraction)sign)r>   im);r   evaluater   
relationalr3   
isinstance	TypeErrorr
   r   type__name__r	   ComplexInfinityNaNInfinityr   OneNegativeOner   Zero	is_finite	__class__Exp1!sympy.calculus.accumulationboundsr8   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.exponentialr9   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    )clsr0   r2   r@   r+   r.   r3   argr8   r9   r:   r<   r=   cexnumZdenr>   r?   sobjr$   r$   r'   rd      s   






	

  


zPow.__new__r   c                 C  s    | j tjkrddlm} |S d S Nr   r;   )r+   r	   rN   r]   r<   )r&   Zargindexr<   r$   r$   r'   inverse   s   zPow.inversec                 C  s   dd| j fS )N      )rE   re   r$   r$   r'   	class_key   s   zPow.class_keyc                 C  sz   ddl m}m} |  \}}||||r7| r9||||r(t| |S ||||r;t| | S d S d S d S )Nr   )askQ)	Zsympy.assumptions.askrr   rs   as_base_expintegerrX   Zevenr   odd)r&   Zassumptionsrr   rs   r0   r2   r$   r$   r'   _eval_refine   s   zPow._eval_refinec                 C  sj  |   \}}|tju r|| | S d }|jrd}n|jr!d}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rr||rq|jdu rftj| t| ||  S |jdu rqt|| S n|jr|jr|t|}|jrt||tj }t|dk dks|dkrd}n|jrd}n||jrt|dk dkrd}nx||r|	dtj tj | |tj||| dtj    }|jr|||| dkr||}nFd }nCz6|	dtj tj | |tj|||
| d tj   }|jr|||| dkr||}nd }W n ty$   d }Y nw |d ur3|t|||  S d S )Nr   r   )rf   r?   rer>   r.   r<   )floorc                 S  s:   t | dddkr
dS |  \}}|jr|dkrdS dS dS )zZReturn True if the exponent has a literal 2 as the
                denominator, else None.qNro   T)getattras_numer_denomrS   )r2   ndr$   r$   r'   _half  s   zPow._eval_power.<locals>._halfc                 S  s6   z| j ddd}|jr|W S W dS  ty   Y dS w )zXReturn ``e`` evaluated to a Number with 2 significant
                digits, else None.ro   TstrictN)evalfrW   r   )r2   rvr$   r$   r'   _n2  s   zPow._eval_power.<locals>._n2r6   TFro   )rt   r	   rG   rS   is_polaris_extended_realr`   rf   r?   rx   r>   r]   r.   r<   #sympy.functions.elementary.integersrz   is_negativerJ   r   rY   r[   is_imaginaryra   is_extended_nonnegativerb   Halfr   )r&   Zexptr0   r2   rj   rf   r?   rx   r>   r.   r<   rz   r   r   r$   r$   r'   rc      sn   




"

zPow._eval_powerc                 C  st  | j | j}}|jr|jr|jr|| dkrtjS ddlm} |jrd|jrd|jrdt	|t	|t	|}}}|
 }|dkr\||kr\|
 d |kr\t	||}	tt||	||	  |S tt|||S ddlm}
 t|tr|jr|jr|
||}|
t||dd|S t|tr|jr|jrt	|
 }|dkr||}	|	|
||	 }|
t||dd|S d	S d	S d	S d	S d	S d	S )
aO  A dispatched function to compute `b^e \bmod q`, dispatched
        by ``Mod``.

        Notes
        =====

        Algorithms:

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

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

        3. For any unevaluated power found in `b` or `e`, the step 2
        will be recursed down to the base and the exponent
        such that the $b \bmod q$ becomes the new base and
        $\phi(q) + e \bmod \phi(q)$ becomes the new exponent, and then
        the computation for the reduced expression can be done.
        r   )totientP   r4   r   )ModFr@   N)r+   r.   rS   is_positiver	   rK   Z%sympy.functions.combinatorial.numbersr   rT   int
bit_lengthIntegerpowmodr   rB   r   rU   )r&   r{   r+   r.   r   r0   r2   mmbphir   r   r$   r$   r'   	_eval_ModR  s2    
zPow._eval_Modc                 C  s    | j jr| j jr| jjS d S d S r#   )r.   rS   r   r+   rY   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_negativerL   )r&   Zext_negr$   r$   r'   _eval_is_negative  s   
zPow._eval_is_negativec                 C  s   | j | jkr| j jrdS d S | j jr| jjrdS d S | j jr,| jjr$dS | jjr*dS d S | j jr:| jj	r8| jjS d S | j j
rF| jjrDdS d S | j jrr| jjrb| jd }|jrXdS |jrb|jdu rbdS | jjrtddlm} || j jS d S d S )NTFr4   r   r;   )r+   r.   r   r   is_realis_extended_negativerY   rZ   is_zeror   is_extended_nonpositiver   rS   r]   r<   )r&   r   r<   r$   r$   r'   _eval_is_extended_positive  sD   
zPow._eval_is_extended_positivec                 C  s   | j tju r| jjs| jjrdS | jjr&| j jr| jjrdS | j j	r$dS d S | jj
r2| j jr0dS d S | jjr>| j jr<dS d S | jjrJ| j jrHdS d S | jjrV| j j	rTdS d S | jjr`| j j	rbdS d S d S NFT)r.   r	   r   r+   
is_complexr   r   rZ   rL   rY   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rdS d S | j tjkr| jtju S | j jdu rb| j jr.| jjr.dS | jj	r6| j j
S | jjr<dS | jj
r\| jjr^dt| j  jrP| jjS dt| j  jr`| jjS d S d S d S | j jrl| jj	rndS d S d S )NTFr   )r+   r   r.   r   r   r	   rN   NegativeInfinityrL   r   r\   is_nonnegativer   r[   r   r%   r$   r$   r'   _eval_is_zero  s2   zPow._eval_is_zeroc                 C  s   | j \}}|jr|jdu r|jrdS |jr'|jr'|tju rdS |js%|jr'dS |jrC|jrC|js3|jrCt	|d j
rCt	|d j
rCdS |jrR|jrR| j| j  }|jS |jr_|jr_|d jr_dS |jrl|jrn|d jrpdS d S d S d S )NFTr   )r(   is_rationalrS   r   r	   rJ   r   r   rL   r   r   rW   funcrT   )r&   r0   r2   checkr$   r$   r'   _eval_is_integer  s(   

zPow._eval_is_integerc                 C  s  | j tju r| jjrdS | jjrdtj | j tj jS ddl	m
}m} | j j}|d u rS| j j|kr;| j jjr;| jjS | j jtkrQ| j j tju rQ| j jjrQ| jjS d S | jj}|d u r]d S |r|r| j jrgdS | j jrq| jjrqdS | jjr{| j jr{dS | jjr| jjrdS | j jr| jjrdS |r| jjr| j jdu rt| j | j jS | j j}| jj}|r| jjr| jjrdS | jjrdS n=|r|| j jrdS | jjr| j \}}|r|jrt| j | | j | ddjS n| j tj tjfv r| jd jdu rdS |rB|rB| j tju rdS | jtj}|rB| j jr0|jr0| j jr0| j d jr0|jr0dS ||| j  tj j}	|	d urB|	S |du rr|rtt| jtrZ| jj dkrZdS ddl!m"}
 |
| j | j tj }|j#rv|jS d S d S d S )	NTro   r   )r<   r.   Fr   r   rf   )$r+   r	   rN   r.   r   r   ra   rb   rY   r]   r<   r   r   r   r   rS   Zis_extended_nonzeror   r   is_Rationalr   rZ   r_   as_coeff_AddrT   MulrJ   coeffr   
is_nonzerorB   Rationalpr`   rf   r   )r&   r<   r.   Zreal_bZreal_eZim_bim_erg   aokrf   ir$   r$   r'   _eval_is_extended_real  s   $
 
zPow._eval_is_extended_realc                 C  sH   | j tjkrt| jj| jjgS tdd | jD r | 	 r"dS d S d S )Nc                 s      | ]}|j V  qd S r#   )r   ).0r   r$   r$   r'   	<genexpr>B      z'Pow._eval_is_complex.<locals>.<genexpr>T)
r+   r	   rN   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r| jjr| jj}|d ur|S d S | j tjkr9d| j tjtj	  }|j
r2dS |jr7dS d S | jjrOddlm} || j j}|d urOdS | j jry| jjry| j jr]dS | jj}|se|S | jjrkdS d| j j}|rw| j jS |S | j jdu rddlm} || j | j tj }d| j}	|	d ur|	S d S d S )NFro   Tr   r;   r   )r+   r    r   r.   rS   rZ   r	   rN   rb   ra   rY   r]   r<   r   r   r   r   r`   rf   )
r&   rv   fr<   ZimlogratZhalfrf   r   Zisoddr$   r$   r'   _eval_is_imaginaryE  sP   
zPow._eval_is_imaginaryc                 C  sD   | 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 d S r   )r.   rS   r   r+   rZ   r   r	   rJ   r%   r$   r$   r'   _eval_is_oddv  s   zPow._eval_is_oddc                 C  s|   | 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 r(d S |r8|r:| j js6t| jjr<dS d S d S d S r   )	r.   r   r+   r   r\   r   rL   r   r   )r&   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 dS dS )zM
        An integer raised to the n(>=2)-th power cannot be a prime.
        r   FN)r+   rS   r.   r   r%   r$   r$   r'   _eval_is_prime  s   zPow._eval_is_primec                 C  s\   | j jr$| jjr&| j d jr| jd js"| j d jr(| jjr*| jjr,dS dS dS dS dS dS )zS
        A power is composite if both base and exponent are greater than 1
        r   TN)r+   rS   r.   r   r   rY   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|r*| j||}| j||}t||r$||S | ||S ddlm}m	} dd }|| jksE||kr_| jt
jkr_|jrVt|trV|| j||S || j|| S t|| jrz| j|jkrz|| j|j}	|	jrzt||	S t|| jr#| j|jkr#| jjdu r| jjtdd}
|jjtdd}||
||\}}}|r| ||}|d urt|t|j|}|S nd|j}g }g }| }| jjD ]6}|||}| }
||
||\}}}|r|||  |d ur|| q|js|js d S || q|r#t| }||dkrt| j|dd	n| j t| S t||s4|jrw|jt
ju ry| jjru| jjr{|jjtdd}
| j|| j jtdd}||
||\}}}|r}| ||}|d urst|t|j|}|S d S d S d S d S d S )
Nr   r7   ry   c                 S  s   | \}}|\}}||kr|j r>|| }z
t|dd d}W n ty8   | \}	}
|	jr0|
jp5|	jo5|
j}Y nw ||dfS t|tsF|f}t	dd |D sQdS z2t
t|t|\}}|dk ro|dkro|d	7 }|t|8 }|dkrvd}nt|g|R  }d||fW S  ty   Y dS w dS )
a*  Return (bool, pow, remainder_pow) where, if bool is True, then the
            exponent of Pow `old` will combine with `pow` so the substitution
            is valid, otherwise bool will be False.

            For noncommutative objects, `pow` will be an integer, and a factor
            `Pow(old.base, remainder_pow)` needs to be included. If there is
            no such factor, None is returned. For commutative objects,
            remainder_pow is always None.

            cti are the coefficient and terms of an exponent of self or old
            In this _eval_subs routine a change like (b**(2*x)).subs(b**x, y)
            will give y**2 since (b**x)**2 == b**(2*x); if that equality does
            not hold then the substitution should not occur so `bool` will be
            False.

            Fr   TNc                 s  r   r#   )rS   )r   termr$   r$   r'   r     r   z1Pow._eval_subs.<locals>._check.<locals>.<genexpr>)FNNr   r   )r    r   
ValueErrorrt   r   r   r   rB   tupler   divmodr   )ct1ct2oldZcoeff1Zterms1Zcoeff2Zterms2r   Zcombinesr0   r2   	remainderremainder_powr$   r$   r'   _check  s>   

zPow._eval_subs.<locals>._checkF)Zas_Addr   r   )rO   r8   rB   r.   r+   subs__rpow__r   r]   r<   r	   rN   Zis_Functionr   _subsrW   r   r_   Zas_independentSymbolr   Zas_coeff_mulr(   appendr    rS   Addis_Powr   r   )r&   r   newr8   r0   r2   r.   r<   r   lr   r   r   r   r   resultZoargZnew_lZo_alr   Znewaexpor$   r$   r'   
_eval_subs  sz   

:

&6
zPow._eval_subsc                 C  s<   | j \}}|jr|jdkr|jdkrt|j| fS ||fS )a  Return base and exp of self.

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

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

        Examples
        ========

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

        r   )r(   r   r   r{   r   )r&   r0   r2   r$   r$   r'   rt   #  s   
zPow.as_base_expc                 C  sz   ddl m} | jj| jj}}|r|| j| j S |r#| j|| j S |du r7|du r9t| }|| kr;||S d S d S d S )Nr   )adjointF)r`   r   r.   rS   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}}|r|| j| j S |r#| j|| j S |du r7|du r7t| }|| kr7||S | jr<| S d S )Nr   )	conjugateF)r`   r   r.   rS   r+   r   r   r   )r&   rg   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	}}|r+| j| j S |r5|| j| j S |du rI|du rKt
| }|| krM||S d S d S d S )Nr   )	transposeF)r`   r   r+   r	   rN   r   r.   rS   r   r\   r   )r&   r   r   r   r   r$   r$   r'   _eval_transposeY  s   zPow._eval_transposec                   s   j  j} tjkr-ddlm} t||r-|jr-ddlm	} |
 |jg|jR  S |jrs|dds? jdu s?| rs|jrOt fdd|jD  S  jrst|jdd	 d
d\}}|rst fdd|D   t|  S S )za**(n + m) -> a**n*a**mr   )Sum)ProductforceFc                      g | ]}  |qS r$   r   r   xr0   r&   r$   r'   
<listcomp>s      z.Pow._eval_expand_power_exp.<locals>.<listcomp>c                 S     | j S r#   r   r   r$   r$   r'   <lambda>u      z,Pow._eval_expand_power_exp.<locals>.<lambda>Tbinaryc                   r   r$   r   r   r   r$   r'   r   w  r   )r+   r.   r	   rN   Zsympy.concrete.summationsr   rB   r    Zsympy.concrete.productsr   r   functionZlimitsr_   getr   _all_nonneg_or_nonpposr   r(   r   r   
_from_args)r&   hintsr2   r   r   rg   ncr$   r   r'   _eval_expand_power_expg  s$   
zPow._eval_expand_power_expc                   s>   dd}j}j |jsS |jdd\}}|r_fdd|D } jrN jr1t|   }ntdd |ddd D     }|rL|t|   9 }|S |sZ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rnD|dkr|| n:|dkr|r|  }|t
jur|| n$|t
j n|r|  }|t
jur|| n|t
j || ~|s jr|| | }|}nv jrJ t|dkr*t
j}|s|d jr||d9 }t|d r| }|D ]	}||  q|t
jur)|| n.|rS|rS|d jrM|d t
jurM|t
j ||d   n|| n|| ~|}||7 }t
j}|r jrt	|dd dd\}}t fdd|D  }|t fdd|D  9 }|r|jt|  dd	9 }|S )z(a*b)**n -> a**n * b**nr   F)Zsplit_1c                   s*   g | ]}t |d r|jdi  n|qS )_eval_expand_power_baser$   )hasattrr   r   r   )r   r$   r'   r     s    z/Pow._eval_expand_power_base.<locals>.<listcomp>c                 S  s   g | ]}|d  qS )r6   r$   r  r$   r$   r'   r         Nr6   r   c                 S  s
   | j du S NF)r   r   r$   r$   r'   r     s   
 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 rt| jS d S r   )r	   ra   r   r   r   )r   Zpolarr$   r$   r'   pred  s   

z)Pow._eval_expand_power_base.<locals>.predr4   r   r   ro   c                 S  s   | j o
| jjo
| jjS r#   )r   r.   r   r+   rU   r   r$   r$   r'   r     s    c                   s    g | ]} |j |j  qS r$   )r   r(   r   r0   r2   r&   r$   r'   r          c                   s   g | ]
}j | d dqS )Fr   r   r  r  r$   r'   r     s    )r   r+   r.   rV   Zargs_cncrT   r   r   r   r   r	   ra   lenr   poprI   rJ   rS   rW   extendr   )r&   r   r   r0   Zcargsr   r   otherZ
maybe_realr  ZsiftedZnonnegnegimagIr   Znonnor~   Znpowr$   )r2   r   r&   r'   r   {  s   
"

















zPow._eval_expand_power_basec                   s(  | j \ }| }|jr|jdkr jr|jsOt|j|j }|s$|S |  || g }}|  |}|jr<|	 }t
|D ]	}|||  qAt
| S t|} jrsg g }}	 j D ]}
|
jrj||
 q_|	|
 q_|rt
|	 }t
| }|dkrt|| dd|| |  S t||d  dd}t|| dd|| |  S  jrV  \}}
|jrV|
jrV|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@ r&|| |
|  |
| ||  }}|d8 }|| |
|
  d| |
 }}
|d }|stj}|dkrJ|||  S t|| || |  S |	}ddlm} ddlm} |t||}||g|R  S |dkrt
 fdd	 j D  S  |d  	 jrt
fd
d	 j D  S t
fdd	 j D  S |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||  | q|| qt ||  t
!|g  S |S )zA(a + b + ..)**n -> a**n + n*a**(n-1)*b + .., n is nonzero integerr   ro   Fdeepr   )multinomial_coefficients)basic_from_dictc                       g | ]} j D ]}|| qqS r$   r*   r   r   g)r+   r$   r'   r   U  r  z0Pow._eval_expand_multinomial.<locals>.<listcomp>c                   r  r$   r*   r  multir$   r'   r   Y  s
    c                   s   g | ]}|  qS r$   r$   )r   r   r  r$   r'   r   ]  r  r   )"r(   r   r   r_   rT   r   r{   r   r   _eval_expand_multinomialr   	make_argsr   r   r    is_Orderr   r   rU   as_real_imagr	   ra   Zsympy.ntheory.multinomialr  Zsympy.polys.polyutilsr  r  r[   rW   r   r   r   r   r   )r&   r   r.   r   r~   radicalZexpanded_base_nr   Zorder_termsZother_termsr0   r   r  r  r   krg   r   r  r   r  r  Zexpansion_dictr   tailr$   )r+   r  r'   r    s   



"



zPow._eval_expand_multinomialc                   sf  | j jrddlm} | j }| jj|d\}}|s| tjfS tdt	d\ |dkrG|j
r>|j
r>t| j| }|| kr>| S |  | }n5|d |d  }|| | | }}|j
rs|j
rst||tj  |  }|| krs| 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rC| 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 rddlm } | j  \}}|rl|j|fi |}|j|fi |}||||}}||| ||| fS ddlm}m} |rd|d< | j|fi |}| d|krd S ||||fS || || fS )Nr   )polyr  za brp   ro   c                 S  s    g | ]}|d  d d s|qS )r   r   ro   r$   r  r$   r$   r'   r     r  z$Pow.as_real_imag.<locals>.<listcomp>c                   (   g | ]\\}}}| |  |  qS r$   r$   r   ZaaZbbccr   r0   r$   r'   r        ( c                 S  s$   g | ]}|d  d d dkr|qS )r   r   r4   r$   r  r$   r$   r'   r        $ c                   r!  r$   r$   r"  r$  r$   r'   r     r%  c                 S  s$   g | ]}|d  d d dkr|qS )r   r   r4   rn   r$   r  r$   r$   r'   r     r&  c                   r!  r$   r$   r"  r$  r$   r'   r     r%  )atan2cossinr.   )r?   rx   Fcomplexignore)!r.   rT   Zsympy.polys.polytoolsr   r+   r  r	   rK   symbolsDummyrW   r   ra   termsr   r   (sympy.functions.elementary.trigonometricr'  r(  r)  r   r   r   r   r   r   rN   r]   expandr`   r?   rx   r   )r&   r  r   r   r.   Zre_er   exprmagrZre_partZim_part1Zim_part3r'  r(  r)  trptprg   rj   r?   rx   r   r$   r$  r'   r  p  sv   

$

"
zPow.as_real_imagc                 C  sF   ddl m} | j|}| j|}| ||| j || j | j   S rl   )r]   r<   r+   diffr.   )r&   rj   r<   ZdbaseZdexpr$   r$   r'   _eval_derivative  s   "zPow._eval_derivativec                 C  s   |   \}}|tjkrddlm} || jdd|S ||}|js(||}|jrK|j	rK|j
du rK| ||  | }| }| || S | ||S )Nr   r*  Fr   )rt   r	   rN   r]   r.   _eval_evalfZ_evalfrT   r   rU   r   r   r   r1  )r&   precr+   r.   Zexp_functionr$   r$   r'   r:    s   


zPow._eval_evalfc                 C  sB   | j j| rdS | jj| rt| j|o| j jo| j dkS dS )NFr   T)r.   hasr+   bool_eval_is_polynomialrT   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
s#|jS |	 \}}|jr1|jr1dS |jrN|jrHt|js?|jrAdS ||krGdS n|jrN|jS |tju r[|jr]|jr_dS d S d S d S )NTF)r.   rS   r+   r   r   r   r   r   r   rt   r   r   r   is_irrationalr	   rN   r   )r&   r   r0   r2   r$   r$   r'   _eval_is_rational  s0   
zPow._eval_is_rationalc                 C  s8  dd }| j js|| j rdS | j tju rG| j| j }|j| jkrD| jjr@| jjr+dS | jtj	 j
r4dS | jtjtj	  j
rBdS d S d S |jS | jj
rs| j jdu rU| jjS | j jdu ri| jjrc| j jS | j jridS | jjrq| j jS d S | j jr| jjrt| j jrt|| j s| j jdu s| j jr| jj
S d S d S d S )Nc                 S  s"   z| d j W S  ty   Y dS w )Nr   F)r   r   )r2  r$   r$   r'   _is_one  s
   z'Pow._eval_is_algebraic.<locals>._is_oneTF)r+   r   r	   rN   r   r(   r.   r   Zis_algebraicrb   r   ra   r   r   rS   r@  )r&   rB  rj   r$   r$   r'   _eval_is_algebraic  sJ   zPow._eval_is_algebraicc                 C  4   | j j| rdS | jj| r| j|o| j jS dS r   )r.   r<  r+   _eval_is_rational_functionrT   r?  r$   r$   r'   rE  $     zPow._eval_is_rational_functionc           	      C  s   | j ||}| jj}|r|S | j||}|du r |rdS d S |d u r&d S | j ||}|j}|r5d}n	t|jt|f}|du rD|S |d u rJd S |sN|S | j||jS r  )	r+   _eval_is_meromorphicr.   rT   r   r   r   rL   r   )	r&   r   r   Z
base_meromZexp_integerZ	exp_meromr0   Zb_zeroZlog_definedr$   r$   r'   rG  .  s*   zPow._eval_is_meromorphicc                 C  rD  r   )r.   r<  r+   _eval_is_algebraic_exprr   r?  r$   r$   r'   rH  S  rF  zPow._eval_is_algebraic_exprc           	      K  s   ddl m}m} |js||s||r|| S |t}|tr<tjr2tt	j
||| |dS |||| |dS ddlm}m} ||||t	j||  | S )Nr   ry   r   )rf   Abs)r]   r.   r<   r   r<  r   r   Z
exp_is_powr   r	   rN   r`   rf   rI  ra   )	r&   r+   r   kwargsr.   r<   r@   rf   rI  r$   r$   r'   _eval_rewrite_as_exp]  s   

"zPow._eval_rewrite_as_expc                 C  s
  | j s| tjfS |  \}}| \}}|j}|jr#|s#|js#| }|j	}|j
s0|s0|}tj}|j}|r=| | }}n|d u rH|sH|}tj}|rR||}}| }|jry|tju rg|tjurg|| ||fS |tjury|tju ry| |||fS | ||| ||fS r#   )r    r	   rI   rt   r}   r   rV   r   rX   rS   r   is_nonpositiver\   r   )r&   r+   r.   r~   r   Zneg_expZint_expZdnonposr$   r$   r'   r}   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s$d S | \}}|  \}}|j	rO|j
rO|rO|jrE||||  |S ||d|  |S | }| j||}|d u r`d S | j|||}|d u rut| ||S |S r-   )r   r	   rI   r.   matchesrK   rB   r
   rt   rR   rT   r   copyr+   Zxreplace)	r&   r2  Z	repl_dictr   r   r0   r2   sbser$   r$   r'   rM    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r0d|
 S ||
 |d}|t
ju rD||| |S |t
ju rK| S |
| }|| }}td|D ]}||| 9 }|j|||d}||7 }qZ|||| |7 }ddlm} ||d	d
dS ddlm} ddlm} || d	d } |  \}}|j| rt ||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(r2t% |$|\}}Y nw ||rNddl)m*} ||+ }|j,s|j-rZ|j.s| | j/|||dkr|||| j||||d}||||| kr| S |S |j0||d}t1|| + }|| }|j-st% |||    t2r|	|  j3r||||  |S |j,r|| }|| kr|||| |7 }|S dd }  fdd}!z|j$||d\}}"W n( t#t%fy   |||   |ddkr|| |||  |   Y S t% w |j4r-|"t
j5kr-|dd dd }|j$||d\}}"|"j6sb|7 }|j,r=|| S |j$||d\}}"|"j6sb|| | 8 }|j$||d\}}"|"j6sbt% 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 }(|(|"   j3sdd!lBmC}. |jDs1|j,r1|j3r1|| E||}/|.|/j3r| || d"d#|   |\}0}1n-|.|/j,r'| |||| j0|||d|\}0}1n| || |\}0}1n	| || |\}0}1t
j5}|)D ]}'|'|1 }||)|' |0 ||  7 }q?|jDrj|j6rj||" | jFrj|t1| ksz|||| |7 }W |S  t%y   |||| j||||d Y S w |S )$Nr   ry   )limit)Ordersympify)r~   logxr   )powsimpTr.   )r  combine)	powdenest)_illegal)r   )r~   rU  cdir)Wildzc, ex)re   exclude)	polygammaro   )
logcombinerU  rZ  rU  c              	   S  s   t jt j}}t| D ]/}||r7| \}}||kr6z| |W   S  ty5   | t jf Y   S w q||9 }q||fS r#   )	r	   rI   rK   r   r  r<  rt   leadtermr   )r   r   r   r.   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	   rK   )Zd1Zd2rese1e2rh   Zmaxpowr$   r'   mul"  s   "zPow._eval_nseries.<locals>.mulc                 S  r   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  s    )ceiling)	factorialffr?   r6   )Gr]   r.   r<   Zsympy.series.limitsrQ  Zsympy.series.orderrR  Zsympy.core.sympifyrT  r+   r	   rN   Znseriesr  ZremoveOr   rH   rangeZsympy.simplify.powsimprV  rX  numbersrY  Ztrigsimprt   r<  r   _eval_nseriessymbolr[  r-  replaceZ'sympy.functions.special.gamma_functionsr]  Z
EulerGammar   ra  NotImplementedErrorrQ   rG   rF   Zsympy.simplify.simplifyr^  cancelr   rU   r   _eval_as_leading_termas_leading_termr   r   r   ri  rK   r   simplifyr1  r   rj  r   r  r   rI   (sympy.functions.combinatorial.factorialsrk  rl  r`   r?   rS   dirrL  )2r&   r   r~   rU  rZ  r.   r<   rQ  rR  rT  Ze_seriesZe0r5  Z
exp_seriesr   r   rV  rX  rY  r0   r2   r[  rg   rh   r]  _r   r^  rd  r   r  r4  rc  rh  r   rj  ZgpolyZgtermsZco1re  r  r/  Ztkrk  rl  r   r?   ndirZincoZinexr$   rg  r'   rq    s  




$
"

 ( "zPow._eval_nseriesc                 C  sb  ddl m}m} | j}| j}| jtju r<|j||d}||d}	|	tju r,|	|d}	|	j
du r6tj|	 S td|  ||rQ|||| }
|
j|||dS ddlm} z
|j|||d}W n tyl   |  Y S w |js|jr||s|| ||}||jr| ||dd	|   S ||jr||j|||d}|j
du r||| S | ||S )
Nr   ry   r`  FzCannot expand %s around 0r_  rm  r6   rn  )r]   r.   r<   r+   r	   rN   rw  r   rG   rQ  r\   r   r<  r`   r?   rS   r   rz  r   r   rv  )r&   r   rU  rZ  r.   r<   r2   r0   rf   Zarg0ltr?   r   r|  Zlog_leadtermr$   r$   r'   rv  r  s:   






zPow._eval_as_leading_termc                 G  s$   ddl m} || j|| || S )Nr   )binomial)ry  r~  r.   r   )r&   r~   r   previous_termsr~  r$   r$   r'   _taylor_term  s   zPow._taylor_termc                   s   | j tjurt j||g|R  S |dk rtjS |dkrtjS ddlm} ||}|r9|d }|d ur9|| | S ddlm	} || || S )Nr   r   rS  r6   )rk  )
r+   r	   rN   supertaylor_termrK   rI   rT  ry  rk  )r&   r~   r   r  rT  r   rk  rM   r$   r'   r    s   zPow.taylor_termc                 K  sL   | j tju r$ddlm} |tj| j tjd  tj|tj| j   S d S )Nr   )r)  ro   )r+   r	   rN   r0  r)  ra   r.   rb   )r&   r+   r.   r   r)  r$   r$   r'   _eval_rewrite_as_sin     0zPow._eval_rewrite_as_sinc                 K  sL   | j tju r$ddlm} |tj| j tj|tj| j tjd    S d S )Nr   )r(  ro   )r+   r	   rN   r0  r(  ra   r.   rb   )r&   r+   r.   r   r(  r$   r$   r'   _eval_rewrite_as_cos  r  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   ro   )r+   r	   rN   Z%sympy.functions.elementary.hyperbolicr  r.   )r&   r+   r.   r   r  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 }|rB|j	rD|tj| |tj| }}t
||sFt
||sH|tj|  S d S d S d S d S d S )Nr   )r)  r(  )r0  r)  r(  r	   rN   rV   r   rb   ra   rU   rB   )	r&   r+   r.   rJ  r)  r(  r   ZcosineZsiner$   r$   r'   _eval_rewrite_as_sqrt  s   

zPow._eval_rewrite_as_sqrtc              	   C  s6  |   \}}t|j||d }|j||d\}}|jrZ| \}}|jrZ|tjkrZ|| }	| ||	}
tj}|
jsHt|	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)rt   _keep_coeffas_content_primitiver   r   r	   rK   r   r   r   r{   rV   r^   rI   )r&   r  r  r0   r2   Zcepehr5  Zcehrg   r4  Zicehr   mer$   r$   r'   r    s*   +$
zPow.as_content_primitivec           
      O  s   | }| ddr| }| \}}|d}|r%|| }||kr%| S |j| }|j| }	|	rA|r5dS |d}|du r@dS n|	d u rGd S |dS )Nrx  Tr   F)r   rx  rt   equalsis_constant)
r&   Zwrtflagsr2  r0   r2   Zbzr   ZeconZbconr$   r$   r'   r    s*   




zPow.is_constantc                 C  sJ   | j \}}||r!||s#|||| }|||  d |  S d S d S r-   )r(   r<  r   )r&   r~   stepr0   r2   Znew_er$   r$   r'   _eval_difference_delta+  s
   
zPow._eval_difference_delta)r!   r"   )r!   r
   r#   )r0   r1   r2   r1   r!   r
   )r   )Tr  )r   )FT)BrE   
__module____qualname____doc__r   	__slots__r   propertyr(   r+   r.   r/   r   rd   rm   classmethodrq   rw   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   r   r   r   r   r   r  r  r9  r:  r>  rA  rC  rE  rG  rH  rK  r}   rM  rq  rv  r  r  r  r  r  r  r  r  r  __classcell__r$   r$   r  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   r   	itertoolsr   rT  r   cacher   Z	singletonr	   r2  r
   r   r   r   r   r   r   r   r   Zlogicr   r   r   r   
parametersr   rA   r   r   r/   r   r   Zsympy.utilities.iterablesr   Zsympy.utilities.exceptionsr   Zsympy.utilities.miscr   Zsympy.multipledispatchr   r   r  addobjectr   rp  r   r   rh  r   r  rr  r   r.  r-  r$   r$   r$   r'   <module>   sL                  )