o
    g                     @  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Ze
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<ddsdt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 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   )deprecated_since_versionactive_deprecations_target
stacklevelFAccumulationBoundsr   AccumBounds)	exp_polar)factor_termslog)fraction)sign)r0   im);r   evaluater   
relationalr"   
isinstance	TypeErrorr	   r   type__name__r   ComplexInfinityNaNInfinityr   OneNegativeOner   Zero	is_finite	__class__Exp1!sympy.calculus.accumulationboundsr*   r   minmax	is_Symbol
is_integer
is_Integer	is_numberis_Mul	is_Numbercould_extract_minus_signis_evenis_oddabsis_infinite&sympy.functions.elementary.exponentialr+   is_Atom	exprtoolsr,   r.   sympy.simplify.radsimpr/   as_coeff_Mulr    is_Add$sympy.functions.elementary.complexesr0   r1   ImaginaryUnitPi_eval_power__new__ _exec_constructor_postprocessorsr   )clsber2   r"   argr*   r+   r,   r.   r/   cexnumdenr0   r1   sobj re   G/var/www/visachat/venv/lib/python3.10/site-packages/sympy/core/power.pyrY   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@   rO   r.   )selfargindexr.   re   re   rf   inverse   s   zPow.inversereturnr	   c                 C  
   | j d S Nr   r!   ri   re   re   rf   rh         
zPow.basec                 C  rm   Nr   ro   rp   re   re   rf   exp   rq   zPow.expc                 C  s   | j jtu r
| jjS tS N)rs   kindr   rh   r   rp   re   re   rf   ru      s   zPow.kindc                 C  s   dd| j fS )N      )r7   r[   re   re   rf   	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)	sympy.assumptions.askrz   r{   as_base_expintegerrJ   evenr   odd)ri   assumptionsrz   r{   r\   r]   re   re   rf   _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   )r^   r1   rer0   rs   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.qNrw   T)getattras_numer_denomrE   )r]   ndre   re   rf   _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.rw   TstrictN)evalfrI   r
   )r]   rvre   re   rf   _n2  s   zPow._eval_power.<locals>._n2r'   TFrw   )r}   r   r9   rE   is_polaris_extended_realrU   r^   r1   r   r0   rO   rs   r.   #sympy.functions.elementary.integersr   is_negativer<   r   rK   rM   is_imaginaryrV   is_extended_nonnegativerW   Halfr
   )ri   otherr\   r]   rc   r^   r1   r   r0   rs   r.   r   r   r   re   re   rf   rX      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   r#   r   )ModFr2   N)rh   rs   rE   is_positiver   r=   %sympy.functions.combinatorial.numbersr   rF   int
bit_lengthIntegerpowmodr   r4   r   rG   )ri   r   rh   rs   r   r\   r]   mmbphir   r   re   re   rf   	_eval_ModO  s2    
zPow._eval_Modc                 C  s    | j jr| j jr| jjS d S d S rt   )rs   rE   r   rh   rK   rp   re   re   rf   _eval_is_even  s   zPow._eval_is_evenc                 C  s   t | }|du r| jS |S NT)r   _eval_is_extended_negativer>   )ri   ext_negre   re   rf   _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 )NTFr#   r   r-   )rh   rs   r   r   is_realis_extended_negativerK   rL   is_zeror   is_extended_nonpositiver   rE   rO   r.   )ri   r   r.   re   re   rf   _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)rs   r   r   rh   
is_complexr   r   rL   r>   rK   is_extended_positiver   r   r   rp   re   re   rf   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   )rh   r   rs   r   r   r   r@   NegativeInfinityr>   r   rN   is_nonnegativer   rM   r   rp   re   re   rf   _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_rationalrE   r   r   r<   r   r   r>   r   r   rI   funcrF   )ri   r\   r]   checkre   re   rf   _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 )	NTrw   r   )r.   rs   Fr   r   r^   )$rh   r   r@   rs   r   r   rV   rW   rK   rO   r.   r   r   r   r   rE   is_extended_nonzeror   r   is_Rationalr   rL   rT   as_coeff_AddrF   Mulr<   coeffr   
is_nonzeror4   RationalprU   r^   r   )ri   r.   rs   real_breal_eim_bim_er_   aokr^   ire   re   rf   _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 rt   )r   ).0r   re   re   rf   	<genexpr>?      z'Pow._eval_is_complex.<locals>.<genexpr>T)
rh   r   r@   r   rs   r   r   allr    _eval_is_finiterp   re   re   rf   _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 )NFrw   Tr   r-   r   )rh   r   r   rs   rE   rL   r   r@   rW   rV   rK   rO   r.   r   r   r   r   rU   r^   )
ri   r   fr.   imlograthalfr^   r   isoddre   re   rf   _eval_is_imaginaryB  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   )rs   rE   r   rh   rL   r   r   r<   rp   re   re   rf   _eval_is_odds  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   )	rs   r   rh   r   rN   r   r>   r   r   )ri   c1c2re   re   rf   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)rh   rE   rs   r   rp   re   re   rf   _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)rh   rE   rs   r   r   rK   rp   re   re   rf   _eval_is_composite  s   


zPow._eval_is_compositec                 C  s   | j jS rt   )rh   r   rp   re   re   rf   _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   r)   r   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   rt   )rE   )r   termre   re   rf   r     r   z1Pow._eval_subs.<locals>._check.<locals>.<genexpr>)FNNr   r   )r   r   
ValueErrorr}   r   r   r   r4   tupler   divmodr   )ct1ct2oldcoeff1terms1coeff2terms2r   combinesr\   r]   	remainderremainder_powre   re   rf   _check  s>   

zPow._eval_subs.<locals>._checkF)as_Addr   r   )rA   r*   r4   rs   rh   subs__rpow__r   rO   r.   r   r@   is_Functionr   _subsrI   r   rT   as_independentSymbolr   as_coeff_mulr    appendr   rE   Addis_Powr   r   )ri   r   newr*   r\   r]   rs   r.   r   lr   r   r   r   r   resultoargnew_lo_alr   newaexpore   re   rf   
_eval_subs  sz   

:

&6
zPow._eval_subsc                 C  s<   | j \}}|jr|j|jk r|jdkrd| | 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   )ri   r\   r]   re   re   rf   r}      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)rU   r  rs   rE   rh   r   r   )ri   r  r   r   expandedre   re   rf   _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)rU   r  rs   rE   rh   r   r   r   )ri   r_   r   r   r  re   re   rf   _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	}}|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)rU   r  rh   r   r@   r   rs   rE   r   rN   r   )ri   r  r   r   r  re   re   rf   _eval_transposeW  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 re   r   r   xr\   ri   re   rf   
<listcomp>q      z.Pow._eval_expand_power_exp.<locals>.<listcomp>c                 S  s   | j S rt   r   r  re   re   rf   <lambda>s  s    z,Pow._eval_expand_power_exp.<locals>.<lambda>Tbinaryc                   r  re   r  r  r  re   rf   r  u  r  )rh   rs   r   r@   sympy.concrete.summationsr
  r4   r   sympy.concrete.productsr  r   functionlimitsrT   getr   _all_nonneg_or_nonpposr   r    r   r   
_from_args)ri   hintsr]   r
  r  r_   ncre   r  rf   _eval_expand_power_expe  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)split_1c                   s*   g | ]}t |d r|jdi  n|qS )_eval_expand_power_basere   )hasattrr#  r   r   )r  re   rf   r    s    z/Pow._eval_expand_power_base.<locals>.<listcomp>c                 S  s   g | ]}|d  qS )r'   re   r%  re   re   rf   r        Nr'   r   c                 S  s
   | j du S NF)r   r  re   re   rf   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   rV   r   r   r   )r  polarre   re   rf   pred  s   

z)Pow._eval_expand_power_base.<locals>.predr#   r   r   rw   c                 S  s   | j o
| jjo
| jjS rt   )r   rs   r   rh   rG   r  re   re   rf   r    s    c                   s    g | ]} |j |j  qS re   )r   r    r   r\   r]   ri   re   rf   r         c                   s   g | ]
}j | d dqS )Fr   r  r*  r+  re   rf   r    s    )r  rh   rs   rH   args_cncrF   r   r   r   r   r   rV   lenr   popr;   r<   rE   rI   extendr   )ri   r  r  r\   cargsr   r   r   
maybe_realr)  siftednonnegnegimagIr   nonnor   npowre   )r]   r  ri   rf   r#  y  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   rw   Fdeepr   )multinomial_coefficients)basic_from_dictc                       g | ]} j D ]}|| qqS re   r    r   r   g)rh   re   rf   r  S  r,  z0Pow._eval_expand_multinomial.<locals>.<listcomp>c                   r?  re   r@  rA  multire   rf   r  W  s
    c                   s   g | ]}|  qS re   re   )r   r   rC  re   rf   r  [  r&  r  )"r    r   r   rT   rF   r   r   r   r   _eval_expand_multinomialr   	make_argsr   r   r   is_Orderr   r   rG   as_real_imagr   rV   sympy.ntheory.multinomialr=  sympy.polys.polyutilsr>  r.  rM   rI   r  r   r  r   r  )ri   r  rs   r   r   radicalexpanded_base_nr   order_termsother_termsr\   r   r9  rB  r   kr_   r   r7  r   r=  r>  expansion_dictr   tailre   )rh   rD  rf   rE    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 brx   rw   c                 S  s    g | ]}|d  d d s|qS )r   r   rw   re   r%  re   re   rf   r    r,  z$Pow.as_real_imag.<locals>.<listcomp>c                   (   g | ]\\}}}| |  |  qS re   re   r   aabbccr   r\   re   rf   r       ( c                 S  s$   g | ]}|d  d d dkr|qS )r   r   r#   re   r%  re   re   rf   r       $ c                   rS  re   re   rT  rX  re   rf   r    rY  c                 S  s$   g | ]}|d  d d dkr|qS )r   r   r#   rv   re   r%  re   re   rf   r    rZ  c                   rS  re   re   rT  rX  re   rf   r    rY  )atan2cossinrs   )r1   r   Fcomplexignore)!rs   rF   sympy.polys.polytoolsrR  rh   rH  r   r=   symbolsDummyrI   r   rV   termsr   r   (sympy.functions.elementary.trigonometricr[  r\  r]  r   r   r   r   r   r   r@   rO   expandrU   r1   r   r  )ri   r<  r  rR  rs   re_er   exprmagrre_partim_part1im_part3r[  r\  r]  trptpr_   rc   r1   r   r  re   rX  rf   rH  n  sv   

$

"
zPow.as_real_imagc                 C  sF   ddl m} | j|}| j|}| ||| j || j | j   S rg   )rO   r.   rh   diffrs   )ri   rc   r.   dbasedexpre   re   rf   _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   )r}   r   r@   rO   rs   _eval_evalf_evalfrF   r   rG   r   r  r   rf  )ri   precrh   rs   exp_functionre   re   rf   ru    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)rs   hasrh   bool_eval_is_polynomialrF   ri   symsre   re   rf   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)rs   rE   rh   r   r   r   r   r   r   r}   r   r   r   is_irrationalr   r@   r   )ri   r   r\   r]   re   re   rf   _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   )rh  re   re   rf   _is_one  s
   z'Pow._eval_is_algebraic.<locals>._is_oneTF)rh   r   r   r@   r   r    rs   r   is_algebraicrW   r   rV   r   r   rE   r~  )ri   r  rc   re   re   rf   _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   )rs   ry  rh   _eval_is_rational_functionrF   r|  re   re   rf   r  "     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'  )	rh   _eval_is_meromorphicrs   rF   r   r   r   r>   r   )	ri   r  r   
base_meromexp_integer	exp_meromr\   b_zerolog_definedre   re   rf   r  ,  s*   zPow._eval_is_meromorphicc                 C  r  r   )rs   ry  rh   _eval_is_algebraic_exprr   r|  re   re   rf   r  Q  r  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   r   r   )r^   Abs)rO   rs   r.   r   ry  r   r   
exp_is_powr   r   r@   rU   r^   r  rV   )	ri   rh   r  kwargsrs   r.   r2   r^   r  re   re   rf   _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 rt   )r   r   r;   r}   r   r   rH   r   rJ   rE   r   is_nonpositiverN   r   )ri   rh   rs   r   r   neg_expint_expdnonposre   re   rf   r   o  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 rr   )r   r   r;   rs   matchesr=   r4   r	   r}   rD   rF   r   copyrh   xreplace)	ri   rh  	repl_dictr   r   r\   r]   sbsere   re   rf   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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}|| t
j1 j+dd}|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l)m6}# |#|j$||d\}}"|"j7s_|8 }|j,r:|| S |j$||d\}}"|"j7s_|| | 9 }|j$||d\}}"|"j7s_t% ddl:m;}$ |j||$ ||d }%i }&t<=|%D ]}| ||\}'}(|&>|(t
j5|' |&|(< qyt
j1})t
j5t
j1i}*|&}+dd l?m@},mA}- |)|"   j3r|-||)|,|) }.|+D ]}|*>|t
j5|.|+|   |*|< q|!|+|&}+|)t
j17 })|)|"   j3sdd!lBmC}/ |jDs.|j,r.|j3r.|| E||}0|/|0j3r
| || d"d#|   |\}1}2n-|/|0j,r$| |||| j0|||d|\}1}2n| || |\}1}2n	| || |\}1}2t
j5}|*D ]}(|(|2 }||*|( |1 ||  7 }q<|jDrg|j7rg||" | jFrg|tG| ksz|||| |7 }W |S  t%y   |||| j||||d Y S w |S )$Nr   r   )limit)Ordersympify)r   logxr   )powsimpTrs   )r<  combine)	powdenest)_illegal)r  )r   r  cdir)Wildzc, ex)r[   exclude)	polygammarw   )
logcombiner  r  r  F)rf  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 rt   )	r   r;   r=   r   rF  ry  r}   leadtermr   )r   r  r   rs   factorrh   re   re   rf   	coeff_exp  s   

z$Pow._eval_nseries.<locals>.coeff_expc                   sN   i }t | |D ]\}}|| }| k r$||tj| | ||   ||< q|S rt   )r   r  r   r=   )d1d2rese1e2r`   maxpowre   rf   mul  s   "zPow._eval_nseries.<locals>.mul)	nsimplify)ceiling)	factorialffr1   r'   )HrO   rs   r.   sympy.series.limitsr  sympy.series.orderr  sympy.core.sympifyr  rh   r   r@   nseriesrG  removeOr   r:   rangesympy.simplify.powsimpr  r  numbersr  trigsimpr}   ry  r   _eval_nseriessymbolr  rb  replace'sympy.functions.special.gamma_functionsr  
EulerGammar   r  NotImplementedErrorrC   r9   r8   sympy.simplify.simplifyr  cancelr   rG   r   _eval_as_leading_termas_leading_termr;   r   r   is_Floatr=   r  r   simplifyrf  r   r  r   rF  r  (sympy.functions.combinatorial.factorialsr  r  rU   r1   rE   dirr  r   )3ri   r  r   r  r  rs   r.   r  r  r  e_seriese0rn  
exp_seriesr   r   r  r  r  r\   r]   r  r_   r`   r  _r   r  r  r   rB  rj  r  r  r   r  r  gpolygtermsco1r  rO  rd  tkr  r  r   r1   ndirincoinexre   r  rf   r    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   r   r  FzCannot expand %s around 0r  r  r'   r  )rO   rs   r.   rh   r   r@   r  r   r9   r  rN   r   ry  rU   r1   rE   r   r  r   r   r  )ri   r  r  r  rs   r.   r]   r\   r^   arg0ltr1   r   r  log_leadtermre   re   rf   r  o  s:   






zPow._eval_as_leading_termc                 G  s$   ddl m} || j|| || S )Nr   )binomial)r  r  rs   r   )ri   r   r  previous_termsr  re   re   rf   _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   r  r'   )r  )
rh   r   r@   supertaylor_termr=   r;   r  r  r  )ri   r   r  r  r  r   r  r?   re   rf   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]  rw   )rh   r   r@   re  r]  rV   rs   rW   )ri   rh   rs   r  r]  re   re   rf   _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\  rw   )rh   r   r@   re  r\  rV   rs   rW   )ri   rh   rs   r  r\  re   re   rf   _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   rw   )rh   r   r@   %sympy.functions.elementary.hyperbolicr  rs   )ri   rh   rs   r  r  re   re   rf   _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\  )re  r]  r\  r   r@   rH   r   rW   rV   rG   r4   )	ri   rh   rs   r  r]  r\  r   cosinesinere   re   rf   _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.
        )rK  clear)r}   _keep_coeffas_content_primitiver   r   r   r=   r   r   r   r   rH   rS   r;   )ri   rK  r  r\   r]   cepehrn  cehr_   rj  icehr   mere   re   rf   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 )Nr  Tr   F)r  r  r}   equalsis_constant)
ri   wrtflagsrh  r\   r]   bzr   econbconre   re   rf   r    s*   




zPow.is_constantc                 C  sJ   | j \}}||r!||s#|||| }|||  d |  S d S d S rr   )r    ry  r   )ri   r   stepr\   r]   new_ere   re   rf   _eval_difference_delta(  s
   
zPow._eval_difference_deltart   )r   )rl   r	   )Tr'  )r   rn   )FT)Ar7   
__module____qualname____doc__r   	__slots____annotations__r   rY   rk   propertyrh   rs   ru   classmethodry   r   rX   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r}   r  r  r	  r!  r#  rE  rH  rt  ru  r{  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  __classcell__re   re   r  rf   r      s   
 X
b

	T8F1		 {
zS
'
%

#
" 
<"

Qr   power)r   )r   r   )r   r  )r   rc  rb  N):
__future__r   typingr   	itertoolsr   r  r   cacher   	singletonr   rh  r	   r   r
   r  r   r   r   r   r   logicr   r   r   r   
parametersr   r3   r   r   ru   r   r   sympy.utilities.iterablesr   sympy.utilities.exceptionsr   sympy.utilities.miscr   sympy.multipledispatchr   r   r  addobjectr   r  r   r   r  r   r  r  r   rc  rb  re   re   re   rf   <module>   sL                  &