o
    *ήc%                    @  s  d dl mZ 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)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z5 dd Z6dd Z7dd Z8dd Z9G dd deZ:e2d Z;e;<e=e=fe: dd!l<m>Z> dd"l?m@Z@ dd#lAmBZBmCZC dd$lDmEZEmFZFmGZG d%S )&    )annotations)Callable)logsqrt)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)HAS_GMPYgmpy)sift)sympy_deprecation_warning)as_int)
Dispatcher)sqrtremc                 C  s^   | dk rt dt| } | dk r(tt| }d| ||    kr'd| kr(|S  t| dd S )z9Return the largest integer less than or equal to sqrt(n).r   zn must be nonnegativel            )
ValueErrorint_sqrtinteger_nthroot)ns r)   7/tmp/pip-target-vg8gfxp4/lib/python/sympy/core/power.pyisqrt   s   r+   c                 C  s   t | t |} }| dk rtd|dk rtdtr<|dk r<tdkr,t| |\}}nt| |\}}t |t|fS t| |S )a@  
    Return a tuple containing x = floor(y**(1/n))
    and a boolean indicating whether the result is exact (that is,
    whether x**n == y).

    Examples
    ========

    >>> from sympy import integer_nthroot
    >>> integer_nthroot(16, 2)
    (4, True)
    >>> integer_nthroot(26, 2)
    (5, False)

    To simply determine if a number is a perfect square, the is_square
    function should be used:

    >>> from sympy.ntheory.primetest import is_square
    >>> is_square(26)
    False

    See Also
    ========
    sympy.ntheory.primetest.is_square
    integer_log
    r   zy must be nonnegativer   zn must be positivel            r"   )r   r#   r   r   irootrootbool_integer_nthroot_python)yr'   xtr)   r)   r*   r&   .   s   
r&   c           	      C  sv  | dv r| dfS |dkr| dfS |dkr!t | \}}t|| fS ||  kr)dS zt| d|  d }W n- tyb   t| d| }|dkrZt|d }td	||  d |> }ntd	| }Y nw |d
krd|}}	 ||d  }||d | | |  | }}t|| dk rnqmn|}|| }|| k r|d7 }|| }|| k s|| kr|d8 }|| }|| kst||| kfS )N)r   r   Tr   r"   )r   Fg      ?g      ?5   g       @l           )mpmath_sqrtremr$   
bit_lengthOverflowError_logabs)	r0   r'   r1   remguessexpshiftxprevr2   r)   r)   r*   r/   Y   sN   
r/   c           	      C  s*  |dkrt d| dkrt d|dv r*t|}t| } |  d }||| | kfS |dk rPt| dkr5| n|  | \}}||oNt| dk rI|d n|d  fS t|}t| } d }}| |kr|}d}| |krt| |\} }|pr|}||7 }| |kr||9 }|d9 }| |ksh| |ks`||dko| dkfS )a   
    Returns ``(e, bool)`` where e is the largest nonnegative integer
    such that :math:`|y| \geq |x^e|` and ``bool`` is True if $y = x^e$.

    Examples
    ========

    >>> from sympy import integer_log
    >>> integer_log(125, 5)
    (3, True)
    >>> integer_log(17, 9)
    (1, False)
    >>> integer_log(4, -2)
    (2, True)
    >>> integer_log(-125,-5)
    (3, True)

    See Also
    ========
    integer_nthroot
    sympy.ntheory.primetest.is_square
    sympy.ntheory.factor_.multiplicity
    sympy.ntheory.factor_.perfect_power
    r   zx cannot take value as 1r   zy cannot take value as 0)r"   r"   )r#   r$   r   r6   integer_logr.   divmod)	r0   r1   er'   brdmr:   r)   r)   r*   r@      s8   &
r@   c                      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 )Powa4  
    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/Exponentiation#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
stacklevelFr4   AccumulationBoundsr   AccumBounds)	exp_polar)factor_termsr   )fraction)sign)rW   im);r   evaluater   
relationalrK   
isinstance	TypeErrorr   r   type__name__r
   ComplexInfinityNaNInfinityr   OneNegativeOner   Zero	is_finite	__class__Exp1!sympy.calculus.accumulationboundsrR   rG   minmax	is_Symbol
is_integer
is_Integer	is_numberis_Mul	is_Numbercould_extract_minus_signis_evenis_oddr9   is_infinite&sympy.functions.elementary.exponentialrS   is_Atom	exprtoolsrT   r   sympy.simplify.radsimprV   as_coeff_MulrI   is_Add$sympy.functions.elementary.complexesrW   rX   ImaginaryUnitPi_eval_power__new__ _exec_constructor_postprocessorsrH   )clsrC   rB   rY   rK   argrR   rS   rT   r   rV   cexnumdenrW   rX   r(   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   rU   )baser
   rg   ru   r   )selfargindexr   r)   r)   r*   inverse}  s   zPow.inversereturnr   c                 C  
   | j d S Nr   rJ   r   r)   r)   r*   r        
zPow.basec                 C  r   Nr   r   r   r)   r)   r*   r<     r   zPow.expc                 C  s   | j jtu r
| jjS tS N)r<   kindr   r   r   r   r)   r)   r*   r     s   zPow.kindc                 C  s   dd| j fS )N   r"   )r^   r   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)	sympy.assumptions.askr   r   as_base_expintegerrq   evenrG   odd)r   assumptionsr   r   rC   rB   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   )r   rX   rerW   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.qNr"   T)getattras_numer_denomrl   )rB   r'   rE   r)   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.r"   TstrictN)evalfrp   r   )rB   rvr)   r)   r*   _n2  s   zPow._eval_power.<locals>._n2r4   TFr"   )r   r
   r`   rl   is_polaris_extended_realr{   r   rX   r   rW   ru   r<   r   #sympy.functions.elementary.integersr   is_negativerc   rG   rr   r9   is_imaginaryr|   is_extended_nonnegativer}   Halfr   )r   otherrC   rB   r(   r   rX   r   rW   r<   r   r   r   r   r)   r)   r*   r~     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   rL   r   )ModFrY   N)r   r<   rl   is_positiver
   rd   sympy.ntheory.factor_r   rm   r$   r6   Integerpowmodr   r[   rG   rn   )r   r   r   r<   r   rC   rB   rF   mbphir   r6   r)   r)   r*   	_eval_Mod  s2    
zPow._eval_Modc                 C  s    | j jr| j jr| jjS d S d S r   )r<   rl   r   r   rr   r   r)   r)   r*   _eval_is_even+  s   zPow._eval_is_evenc                 C  s   t | }|du r| jS |S NT)rG   _eval_is_extended_negativere   )r   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 )NTFrL   r   rU   )r   r<   r   r   is_realis_extended_negativerr   rs   is_zeror   is_extended_nonpositiver   rl   ru   r   )r   rF   r   r)   r)   r*   _eval_is_extended_positive5  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   rs   re   rr   is_extended_positiver   r   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
   rg   NegativeInfinityre   r   rt   is_nonnegativer   r9   r   r   r)   r)   r*   _eval_is_zerok  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   )rI   is_rationalrl   r   r
   rc   r   r   re   r   r   rp   funcrm   )r   rC   rB   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 rb|rdddlm}
 |
| j | j tj }|j rf|jS d S d S d S )	NTr"   r   )r   r<   Fr   r   r   )!r   r
   rg   r<   r   r   r|   r}   rr   ru   r   r   rG   r   r   rl   is_extended_nonzeror   r   is_Rationalr   rs   rz   as_coeff_Addrm   Mulrc   coeffr   
is_nonzeror{   r   r   )r   r   r<   real_breal_eim_bim_er   aokr   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>      z'Pow._eval_is_complex.<locals>.<genexpr>T)
r   r
   rg   r   r<   r   r   allrI   _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 )NFr"   Tr   rU   r   )r   rH   r   r<   rl   rs   r
   rg   r}   r|   rr   ru   r   r   r   r   r   r{   r   )
r   r   fr   imlograthalfr   r   isoddr)   r)   r*   _eval_is_imaginary  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<   rl   r   r   rs   r   r
   rc   r   r)   r)   r*   _eval_is_odd  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   rt   r   re   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   rl   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   rl   r<   r   r   rr   r   r)   r)   r*   _eval_is_composite5  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   rQ   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   r   )rl   )r   termr)   r)   r*   r   q  r   z1Pow._eval_subs.<locals>._check.<locals>.<genexpr>)FNNr   r   )rH   r   r#   r   r   r   r   r[   tupler   rA   r   )ct1ct2oldcoeff1terms1coeff2terms2r   combinesrC   rB   	remainderremainder_powr)   r)   r*   _checkM  s>   

zPow._eval_subs.<locals>._checkF)as_Addr   r   )rh   rR   r[   r<   r   subs__rpow__r   ru   r   r
   rg   is_Functionr   _subsrp   rG   rz   as_independentSymbolr   as_coeff_mulrI   appendrH   rl   Addis_Powr   r   )r   r   newrR   rC   rB   r<   r   r  lr   r   r   r   r  resultoargnew_lo_alr   newaexpor)   r)   r*   
_eval_subsA  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 is 1/Integer, then return Integer, -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)

        r   )rI   r   pr   r   )r   rC   rB   r)   r)   r*   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)r{   r  r<   rl   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<   rl   r   r   r   r   )r   r   r   r  r  r)   r)   r*   _eval_conjugate  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
   rg   r   r<   rl   r   rt   r   )r   r  r   r  r  r)   r)   r*   _eval_transpose  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r@|jr@t fdd|jD  S 
 |S )za**(n + m) -> a**n*a**mr   )Sum)Productc                   s   g | ]}  |qS r)   r   )r   r1   rC   r   r)   r*   
<listcomp>  s    z.Pow._eval_expand_power_exp.<locals>.<listcomp>)r   r<   r
   rg   sympy.concrete.summationsr!  r[   rH   sympy.concrete.productsr"  r   functionlimitsrz   r   rI   )r   hintsrB   r!  r"  r)   r$  r*   _eval_expand_power_exp  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**nforceF)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 )r4   r)   r0  r)   r)   r*   r%  )      Nr4   r   c                 S  s
   | j du S NF)r   r1   r)   r)   r*   <lambda>4  s   
 z-Pow._eval_expand_power_base.<locals>.<lambda>T)binaryc                 S  s4   | t ju rt jS | j}|rdS |d u rt| jS d S r   )r
   r|   r   r   r   )r1   polarr)   r)   r*   pred6  s   

z)Pow._eval_expand_power_base.<locals>.predrL   r   r   r"   c                 S  s   | j o
| jjo
| jjS r   )r  r<   r   r   rn   r3  r)   r)   r*   r4    s    c                   s    g | ]} |j |j  qS r)   )r   rI   r   rC   rB   r   r)   r*   r%         c                   s   g | ]
}j | d dqS )Fr   r#  r8  r9  r)   r*   r%    s    )getr   r<   ro   args_cncrm   r   r   r   r   r
   r|   lenr  poprb   rc   rl   rp   extendr   )r   r*  r,  rC   cargsncr   r   
maybe_realr7  siftednonnegnegimagIr   nonnor'   npowr)   )rB   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rtjtj}}|j D ]}|jr||  |9 }q||7 }q||  | S |S )zA(a + b + ..)**n -> a**n + n*a**(n-1)*b + .., n is nonzero integerr   r"   Fdeepr   )multinomial_coefficients)basic_from_dictc                       g | ]} j D ]}|| qqS r)   rI   r   r   g)r   r)   r*   r%    r:  z0Pow._eval_expand_multinomial.<locals>.<listcomp>c                   rO  r)   rP  rQ  multir)   r*   r%    s
    c                   s   g | ]}|  qS r)   r)   )r   r   rS  r)   r*   r%    r1  )rI   r   r  rz   rm   r   r   r   r  _eval_expand_multinomialr  	make_argsr  r$   rH   is_Orderr   r   rn   as_real_imagr
   r|   sympy.ntheory.multinomialrM  sympy.polys.polyutilsrN  r=  r9   rp   rb   rd   )r   r*  r<   r  r'   radicalexpanded_base_nr   order_termsother_termsrC   r   rI  rR  r   kr   rE   rG  r  rM  rN  expansion_dictr   tailr)   )r   rT  r*   rU    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   )polyrK  za br   r"   c                 S  s    g | ]}|d  d d s|qS )r   r   r"   r)   r0  r)   r)   r*   r%  %  r:  z$Pow.as_real_imag.<locals>.<listcomp>c                   (   g | ]\\}}}| |  |  qS r)   r)   r   aabbccr   rC   r)   r*   r%  &     ( c                 S  s$   g | ]}|d  d d dkr|qS )r   r   rL   r)   r0  r)   r)   r*   r%  (     $ c                   rc  r)   r)   rd  rh  r)   r*   r%  )  ri  c                 S  s$   g | ]}|d  d d dkr|qS )r   r   rL   r   r)   r0  r)   r)   r*   r%  *  rj  c                   rc  r)   r)   rd  rh  r)   r*   r%  +  ri  )atan2cossinr<   )rX   r   Fcomplexignore)!r<   rm   sympy.polys.polytoolsrb  r   rX  r
   rd   symbolsDummyrp   r   r|   termsr  r  (sympy.functions.elementary.trigonometricrk  rl  rm  r   r   r   r   r   r   rg   ru   expandr{   rX   r   r;  )r   rL  r*  rb  r<   re_er   exprmagrD   re_partim_part1im_part3rk  rl  rm  r2   rptpr   r(   rX   r   r  r)   rh  r*   rX    sv   

$

"
zPow.as_real_imagc                 C  sF   ddl m} | j|}| j|}| ||| j || j | j   S r   )ru   r   r   diffr<   )r   r(   r   dbasedexpr)   r)   r*   _eval_derivativeZ  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   rn  Fr   )r   r
   rg   ru   r<   _eval_evalf_evalfrm   r   rn   r   r  r   rv  )r   precr   r<   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   r.   _eval_is_polynomialrm   r   symsr)   r)   r*   r  o  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<   rl   r   r   r   r   r   r   r   r   r  r   r   is_irrationalr
   rg   r   )r   r  rC   rB   r)   r)   r*   _eval_is_rationaly  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#   )rx  r)   r)   r*   _is_one  s
   z'Pow._eval_is_algebraic.<locals>._is_oneTF)r   r   r
   rg   r   rI   r<   r   is_algebraicr}   r   r|   r   r   rl   r  )r   r  r(   r)   r)   r*   _eval_is_algebraic  sL   
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_functionrm   r  r)   r)   r*   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 r2  )	r   _eval_is_meromorphicr<   rm   r  r   r   re   r   )	r   r1   r   
base_meromexp_integer	exp_meromrC   b_zerolog_definedr)   r)   r*   r    s*   zPow._eval_is_meromorphicc                 C  r  r   )r<   r  r   _eval_is_algebraic_exprr   r  r)   r)   r*   r    r  zPow._eval_is_algebraic_exprc                 K  s   ddl m}m} |js||s||r|| S |tr=tjr0tt	j
||| |tdS |||| |tdS ddlm}m} ||||t	j||  | S )Nr   r   r   )r   Abs)ru   r<   r   r   r  r  r   
exp_is_powrG   r
   rg   r{   r   r  r|   )r   r   r  kwargsr<   r   r   r  r)   r)   r*   _eval_rewrite_as_exp  s   
"zPow._eval_rewrite_as_expc                 C  s
  | j s| tjfS |  \}}| \}}|j}|j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   )rH   r
   rb   r   r   r   ro   r   rq   rl   r   is_nonpositivert   r   )r   r   r<   r'   rE   neg_expint_expdnonposr)   r)   r*   r     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
   rb   r<   matchesrd   r[   r   r   rk   rm   r   copyr   xreplace)	r   rx  	repl_dictr   rE   rC   rB   sbser)   r)   r*   r  )  s.   

zPow.matchesr   c           0   
     s<  ddl m}m} ddlm} ddlm} | jtj	u r| jj
|||d}	|	jr*d|	 S ||	 |d}
|
tju r>||| |S |
tju rE| S |	|
 }||
 }}td|D ]}||| 9 }|j
|||d}||7 }qT|||| |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rt! |"|\}}W n. t!t#tfy3   |j|t$d|||d }|tj%tj&r*t# |"|\}}Y nw ||rFddl'm(} ||) }|j*sp|j+rR|j,sp|||| j||||d}||||| u rn| S |S |j-||d}|| tj. j)dd}|j+st# |||    j/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 |!j0s'|1 }|j*r|| S |j"||d\}}!|!j0s'|| | 2 }|j"||d\}}!|!j0s't# ddl3m4}" |j||" ||d }#i }$t56|#D ]}|||\}%}&|$7|&tj8|% |$|&< qAtj.}'tj8tj.i}(|$})ddl9m:}*m;}+ |'|!   j/r|+||'|*|' },|)D ]}|(7|tj8|,|)|   |(|< q}| |)|$})|'tj.7 }'|'|!   j/srddl<m=}- |j>s|j*r|j,r|j/r|-|| ?||j/r||| |d| tj@ tjA  |\}.}/n	||| |\}.}/tj8}|(D ]}&|&|/ }||(|& |. ||  7 }q|j>r|j0r||! | jBr|tC| ks|||| |7 }|S ) Nr   r   )limit)Order)r'   logxr   )powsimpTr<   )rL  combine)	powdenest)_illegal)r,  )r'   r  cdir)Wildzc, ex)r   exclude)	polygammar"   )
logcombiner  F)rv  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
   rb   rd   r   rV  r  r   leadtermr#   )r   r1   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
   rd   )d1d2rese1e2r   maxpowr)   r*   mul  s   "zPow._eval_nseries.<locals>.mul)ceiling)	factorialffrX   r?   )Dru   r<   r   sympy.series.limitsr  sympy.series.orderr  r   r
   rg   nseriesrW  removeOr   ra   rangesympy.simplify.powsimpr  r  numbersr  trigsimpr   r  r   _eval_nseriessymbolr  rr  replace'sympy.functions.special.gamma_functionsr  
EulerGammar#   r  NotImplementedErrorrj   r`   r_   sympy.simplify.simplifyr  cancelr   rn   r   as_leading_termrb   r   r   simplifyrv  r   r  r  rV  r;  rd   (sympy.functions.combinatorial.factorialsr  r  r{   rX   rl   dirr}   r|   r  r   )0r   r1   r'   r  r  r<   r   r  r  e_seriese0r2   
exp_seriesr   r   r  r  r  rC   rB   r  r   r   r  _rF   r  r  r   rR  rD   r  r  rE   r  gpolygtermsco1r  r_  rt  tkr  r  r   rX   incoinexr)   r  r*   r  K  s   




$
"

, 
zPow._eval_nseriesc                 C  s:  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| r|jr|jr||| ||jr| |||d| tj tj  S | ||S )	Nr   r   r  FzCannot expand %s around 0)r  r  r  r?   )ru   r<   r   r   r
   rg   r  r  r`   r  rt   r   r  r{   rX   rl   is_constantr   r   r  r   r}   r|   )r   r1   r  r  r<   r   rB   rC   r   arg0ltrX   r   r)   r)   r*   _eval_as_leading_term  s6   



$zPow._eval_as_leading_termc                 G  s$   ddl m} || j|| || S )Nr   )binomial)r  r  r<   r   )r   r'   r1   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   )sympifyr4   )r  )
r   r
   rg   supertaylor_termrd   rb   r  r  r  )r   r'   r1   r  r  r  r  rf   r)   r*   r    s   zPow.taylor_termc                 C  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   )rm  r"   )r   r
   rg   ru  rm  r|   r<   r}   )r   r   r<   rm  r)   r)   r*   _eval_rewrite_as_sin#     0zPow._eval_rewrite_as_sinc                 C  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   )rl  r"   )r   r
   rg   ru  rl  r|   r<   r}   )r   r   r<   rl  r)   r)   r*   _eval_rewrite_as_cos(  r  zPow._eval_rewrite_as_cosc                 C  s@   | j tju rddlm} d|| jd  d|| jd   S d S )Nr   )tanhr   r"   )r   r
   rg   %sympy.functions.elementary.hyperbolicr  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   )rm  rl  )ru  rm  rl  r
   rg   ro   r   r}   r|   rn   r[   )	r   r   r<   r  rm  rl  r   cosinesiner)   r)   r*   _eval_rewrite_as_sqrt2  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)r   _keep_coeffas_content_primitiver   r   r
   rd   r   rA   r  r   ro   ry   rb   )r   r[  r  rC   rB   cepehr2   cehr   rD   icehrF   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 )Nr  Tr   F)r;  r  r   equalsr  )
r   wrtflagsrx  rC   rB   bzr  econbconr)   r)   r*   r    s*   




zPow.is_constantc                 C  sJ   | j \}}||r!||s#|||| }|||  d |  S d S d S r   )rI   r  r  )r   r'   steprC   rB   new_er)   r)   r*   _eval_difference_delta  s
   
zPow._eval_difference_deltar   )r   )r   r   )Tr2  )r   r   )FT)Ar^   
__module____qualname____doc__r  	__slots____annotations__r	   r   r   propertyr   r<   r   classmethodr   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r   r+  r.  rU  rX  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  __classcell__r)   r)   r  r*   rG      s   
 X
b

	T8D1		 {
zS
'
%

#
" 
*

QrG   power)r  )r   )r   r  )r  rs  rr  N)H
__future__r   typingr   mathr   r8   r   r%   	itertoolsr   r  r   cacher	   	singletonr
   rx  r   r   r   r(  r   r   r   r   r   logicr   r   r   r   
parametersr   rZ   r   r   r   r   r   sympy.external.gmpyr   r   sympy.utilities.iterablesr   sympy.utilities.exceptionsr   sympy.utilities.miscr   sympy.multipledispatchr    mpmath.libmpr!   r5   r+   r&   r/   r@   rG   r  addobjectr  r  r   r  r   r  r  r  rs  rr  r)   r)   r)   r*   <module>   sX    +*7             ~