U
    ZÊ¹j  ã                   @  s\  d dl mZ d dlmZ d dlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZ dd
lmZmZmZmZmZ ddlmZmZmZmZ ddlmZ ddlmZmZ ddl m!Z!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z* G dd„ deƒZ+e*dƒZ,e, -e.e.fe+¡ ddl-m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9 dS )é    )Úannotations)ÚCallable)Úproducté   )Ú_sympify)Úcacheit)ÚS)ÚExpr)ÚPrecisionExhausted)Úexpand_complexÚexpand_multinomialÚ
expand_mulÚ_mexpandÚ	PoleError)Ú
fuzzy_boolÚ	fuzzy_notÚ	fuzzy_andÚfuzzy_or)Úglobal_parameters)Úis_gtÚis_lt)Ú
NumberKindÚUndefinedKind)Úsift)Úsympy_deprecation_warning)Úas_int)Ú
Dispatcherc                      s  e Zd ZU dZdZdZded< ded< edydd	„ƒZdzdd„Z	e
ddœdd„ƒZe
ddœdd„ƒZe
dd„ ƒZedd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Z d9d:„ Z!d;d<„ Z"d=d>„ Z#d?d@„ Z$dAdB„ Z%dCdD„ Z&dEdF„ Z'dGdH„ Z(d{dIdJ„Z)dKdL„ Z*dMdN„ Z+dOdP„ Z,dQdR„ Z-dSdT„ Z.dUdV„ Z/dWdX„ Z0dYdZ„ Z1d[d\„ Z2d]d^„ Z3d|d`da„Z4d}dcdd„Z5d~dedf„Z6edgdh„ ƒZ7‡ fdidj„Z8dkdl„ Z9dmdn„ Z:dodp„ Z;dqdr„ Z<ddsdt„Z=dudv„ Z>dwdx„ Z?‡  Z@S )€ÚPowa%  
    Defines the expression x**y as "x raised to a power y"

    .. deprecated:: 1.7

       Using arguments that aren't subclasses of :class:`~.Expr` in core
       operators (:class:`~.Mul`, :class:`~.Add`, and :class:`~.Pow`) is
       deprecated. See :ref:`non-expr-args-deprecated` for details.

    Singleton definitions involving (0, 1, -1, oo, -oo, I, -I):

    +--------------+---------+-----------------------------------------------+
    | expr         | value   | reason                                        |
    +==============+=========+===============================================+
    | z**0         | 1       | Although arguments over 0**0 exist, see [2].  |
    +--------------+---------+-----------------------------------------------+
    | z**1         | z       |                                               |
    +--------------+---------+-----------------------------------------------+
    | (-oo)**(-1)  | 0       |                                               |
    +--------------+---------+-----------------------------------------------+
    | (-1)**-1     | -1      |                                               |
    +--------------+---------+-----------------------------------------------+
    | S.Zero**-1   | zoo     | This is not strictly true, as 0**-1 may be    |
    |              |         | undefined, but is convenient in some contexts |
    |              |         | where the base is assumed to be positive.     |
    +--------------+---------+-----------------------------------------------+
    | 1**-1        | 1       |                                               |
    +--------------+---------+-----------------------------------------------+
    | oo**-1       | 0       |                                               |
    +--------------+---------+-----------------------------------------------+
    | 0**oo        | 0       | Because for all complex numbers z near        |
    |              |         | 0, z**oo -> 0.                                |
    +--------------+---------+-----------------------------------------------+
    | 0**-oo       | zoo     | This is not strictly true, as 0**oo may be    |
    |              |         | oscillating between positive and negative     |
    |              |         | values or rotating in the complex plane.      |
    |              |         | It is convenient, however, when the base      |
    |              |         | is positive.                                  |
    +--------------+---------+-----------------------------------------------+
    | 1**oo        | nan     | Because there are various cases where         |
    | 1**-oo       |         | lim(x(t),t)=1, lim(y(t),t)=oo (or -oo),       |
    |              |         | but lim( x(t)**y(t), t) != 1.  See [3].       |
    +--------------+---------+-----------------------------------------------+
    | b**zoo       | nan     | Because b**z has no limit as z -> zoo         |
    +--------------+---------+-----------------------------------------------+
    | (-1)**oo     | nan     | Because of oscillations in the limit.         |
    | (-1)**(-oo)  |         |                                               |
    +--------------+---------+-----------------------------------------------+
    | oo**oo       | oo      |                                               |
    +--------------+---------+-----------------------------------------------+
    | oo**-oo      | 0       |                                               |
    +--------------+---------+-----------------------------------------------+
    | (-oo)**oo    | nan     |                                               |
    | (-oo)**-oo   |         |                                               |
    +--------------+---------+-----------------------------------------------+
    | oo**I        | nan     | oo**e could probably be best thought of as    |
    | (-oo)**I     |         | the limit of x**e for real x as x tends to    |
    |              |         | oo. If e is I, then the limit does not exist  |
    |              |         | and nan is used to indicate that.             |
    +--------------+---------+-----------------------------------------------+
    | oo**(1+I)    | zoo     | If the real part of e is positive, then the   |
    | (-oo)**(1+I) |         | limit of abs(x**e) is oo. So the limit value  |
    |              |         | is zoo.                                       |
    +--------------+---------+-----------------------------------------------+
    | oo**(-1+I)   | 0       | If the real part of e is negative, then the   |
    | -oo**(-1+I)  |         | limit is 0.                                   |
    +--------------+---------+-----------------------------------------------+

    Because symbolic computations are more flexible than floating point
    calculations and we prefer to never return an incorrect answer,
    we choose not to conform to all IEEE 754 conventions.  This helps
    us avoid extra test-case code in the calculation of limits.

    See Also
    ========

    sympy.core.numbers.Infinity
    sympy.core.numbers.NegativeInfinity
    sympy.core.numbers.NaN

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Exponentiation
    .. [2] https://en.wikipedia.org/wiki/Zero_to_the_power_of_zero
    .. [3] https://en.wikipedia.org/wiki/Indeterminate_forms

    T©Úis_commutativeztuple[Expr, Expr]ÚargsÚ_argsNc                 C  s^  |d krt j}t|ƒ}t|ƒ}ddlm} t||ƒs>t||ƒrFtdƒ‚||fD ],}t|tƒsNtdt	|ƒj
›d�dddd	� qN|�r"|tjkr’tjS |tjkrôt|tjƒr®tjS t|tjƒrÌt|tjƒrÌtjS t|tjƒrô|jrätjS |jd
krôtjS |tjk�rtjS |tjk�r|S |dk�r,|�s,tjS |jj
dk�rn|tjk�rÎd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$�rÎt| |ƒ S tj||fk�rätjS |tjk�rt%|ƒj&�rtjS tjS ddl'm(} |j)�s
|tjk	�r
t||ƒ�s
ddl*m+} ddl'm,}	 ddl-m.}
 ||d
d� /¡ \}}|
|ƒ\}}t||	ƒ�r¢|j0d |k�r¢tj||  S |j1�r
ddl2m3}m4} |||ƒƒ}|j!�r
|�r
||	||d
d� ƒ|tj5 tj6  k�r
tj||  S | 7|¡}|d k	�r"|S t 8| ||¡}|  9|¡}t|tƒ�sJ|S |j:�oV|j:|_:|S )Nr   )Ú
Relationalz Relational cannot be used in Powzf
    Using non-Expr arguments in Pow is deprecated (in this case, one of the
    arguments is of type zf).

    If you really did intend to construct a power with this base, use the **
    operator instead.z1.7znon-expr-args-deprecatedé   )Zdeprecated_since_versionZactive_deprecations_targetÚ
stacklevelFéÿÿÿÿZAccumulationBoundsr   ©ÚAccumBounds)Ú	exp_polar)Úfactor_terms©Úlog)Úfraction)Úsign)r-   Úim);r   Úevaluater   Ú
relationalr"   Ú
isinstanceÚ	TypeErrorr	   r   ÚtypeÚ__name__r   ÚComplexInfinityÚNaNÚInfinityr   ÚOneÚNegativeOner   ÚZeroÚ	is_finiteÚ	__class__ÚExp1Ú!sympy.calculus.accumulationboundsr'   r   ÚminÚmaxÚ	is_SymbolÚ
is_integerÚ
is_IntegerÚ	is_numberÚis_MulÚ	is_NumberÚcould_extract_minus_signÚis_evenÚis_oddÚabsÚis_infiniteÚ&sympy.functions.elementary.exponentialr(   Zis_AtomZ	exprtoolsr)   r+   Zsympy.simplify.radsimpr,   Úas_coeff_Mulr    Úis_AddÚ$sympy.functions.elementary.complexesr-   r.   ÚImaginaryUnitÚPiÚ_eval_powerÚ__new__Z _exec_constructor_postprocessorsr   )ÚclsÚbÚer/   r"   Úargr'   r(   r)   r+   r,   ÚcÚexÚnumZdenr-   r.   ÚsÚobj© r]   úO/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/core/power.pyrS   v   s¤    
÷


ÿÿÿþ  ÿ


zPow.__new__r   c                 C  s    | j tjkrddlm} |S d S ©Nr   r*   )Úbaser   r=   rL   r+   )ÚselfZargindexr+   r]   r]   r^   ÚinverseÙ   s    zPow.inverser	   )Úreturnc                 C  s
   | j d S )Nr   ©r!   ©ra   r]   r]   r^   r`   ß   s    zPow.basec                 C  s
   | j d S ©Nr   rd   re   r]   r]   r^   Úexpã   s    zPow.expc                 C  s   | j jtkr| jjS tS d S ©N)rg   Úkindr   r`   r   re   r]   r]   r^   ri   ç   s    zPow.kindc                 C  s   dd| j fS )Né   é   )r4   ©rT   r]   r]   r^   Ú	class_keyî   s    zPow.class_keyc                 C  sr   ddl m}m} |  ¡ \}}|| |¡|ƒrn| ¡ rn|| |¡|ƒrPt| |ƒS || |¡|ƒrnt| |ƒ S d S )Nr   )ÚaskÚQ)	Zsympy.assumptions.askrn   ro   Úas_base_expÚintegerrG   Zevenr   Úodd)ra   Zassumptionsrn   ro   rU   rV   r]   r]   r^   Ú_eval_refineò   s    zPow._eval_refinec                 C  s‚  |   ¡ \}}|tjkr"|| | S d }|jr4d}�n.|jrBd}�n |jd k	�rbddlm}m}m	}m
} ddlm}	m}
 ddlm} dd„ }dd	„ }|j�rÚ|d
kræ||ƒrä|jdkrÎtj| t| || ƒ S |jdkrät|| ƒS n0|j�r|jrüt|ƒ}|j�rt||ƒƒtj }t|ƒdk dk�s2|dk�r8d}n |j�rFd}n’||ƒj�rjt|ƒdk dk�rjd}nn||ƒ�rb|	dtj tj | |tj|||ƒ dtj   ƒ ƒ}|j�rÔ|||ƒ| ƒdk�rÔ||ƒ}nd }nˆzl|	dtj tj | |tj|||
|ƒ ƒd tj  ƒ ƒ}|j�r@|||ƒ| ƒdk�r@||ƒ}nd }W n tk
�r`   d }Y nX |d k	�r~|t||| ƒ S d S )Nr   r   )rW   r.   Úrer-   ©rg   r+   )Úfloorc                 S  s6   t | ddƒdkrdS |  ¡ \}}|jr2|dkr2dS dS )zZReturn True if the exponent has a literal 2 as the
                denominator, else None.ÚqNrk   T)ÚgetattrÚas_numer_denomrB   )rV   ÚnÚdr]   r]   r^   Ú_half
  s
    zPow._eval_power.<locals>._halfc                 S  s8   z| j ddd�}|jr|W S W n tk
r2   Y nX dS )zXReturn ``e`` evaluated to a Number with 2 significant
                digits, else None.rk   T©ÚstrictN)ÚevalfrF   r
   )rV   Úrvr]   r]   r^   Ú_n2  s    
zPow._eval_power.<locals>._n2r%   TFrk   )rp   r   r6   rB   Úis_polarÚis_extended_realrO   rW   r.   rt   r-   rL   rg   r+   Ú#sympy.functions.elementary.integersrv   Úis_negativer9   r   rH   rJ   Úis_imaginaryrP   Úis_extended_nonnegativerQ   ÚHalfr
   )ra   ÚotherrU   rV   r[   rW   r.   rt   r-   rg   r+   rv   r|   r�   r]   r]   r^   rR   û   sd    




ÿ
"ÿ


zPow._eval_powerc                 C  sr  | j | j }}|j�rn|j�rn|jr6|| dkr6tjS ddlm} |jrÌ|jrÌ|jrÌt	|ƒ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ƒ�rn|j�rn|j�rnt	|ƒ 
¡ }|dk�rn||ƒ}	|	|
||	ƒ }|
t||dd�|ƒS d	S )
aO  A dispatched function to compute `b^e \bmod q`, dispatched
        by ``Mod``.

        Notes
        =====

        Algorithms:

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

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

        3. For any unevaluated power found in `b` or `e`, the step 2
        will be recursed down to the base and the exponent
        such that the $b \bmod q$ becomes the new base and
        $\phi(q) + e \bmod \phi(q)$ becomes the new exponent, and then
        the computation for the reduced expression can be done.
        r   )ÚtotientéP   r#   r   )ÚModF©r/   N)r`   rg   rB   Úis_positiver   r:   Z%sympy.functions.combinatorial.numbersrŠ   rC   ÚintÚ
bit_lengthÚIntegerÚpowÚmodrŒ   r1   r   rD   )ra   rw   r`   rg   rŠ   rU   rV   ÚmÚmbÚphirŒ   r�   r]   r]   r^   Ú	_eval_ModO  s,     

zPow._eval_Modc                 C  s   | j jr| j jr| jjS d S rh   )rg   rB   rŽ   r`   rH   re   r]   r]   r^   Ú_eval_is_even‡  s    zPow._eval_is_evenc                 C  s   t  | ¡}|dkr| jS |S ©NT)r   Ú_eval_is_extended_negativer;   )ra   Zext_negr]   r]   r^   Ú_eval_is_negative‹  s    
zPow._eval_is_negativec                 C  sÞ   | j | jkr| j jrÚdS nÀ| j jr0| jjrÚdS nª| j jrR| jjrDdS | jjrÚdS nˆ| j jrl| jj	rÚ| jjS nn| j j
r‚| jjrÚdS nX| j jrÚ| jjrº| jd }|jr¦dS |jrº|jdkrºdS | jjrÚddlm} || j ƒjS d S )NTFr#   r   r*   )r`   rg   r‡   rŽ   Úis_realÚis_extended_negativerH   rI   Úis_zerorƒ   Úis_extended_nonpositiver†   rB   rL   r+   )ra   r”   r+   r]   r]   r^   Ú_eval_is_extended_positive‘  s6    

zPow._eval_is_extended_positivec                 C  sº   | j tjkr | jjs| jjr dS | jjrJ| j jr<| jjr<dS | j j	r¶dS nl| jj
r`| j jr¶dS nV| jjrv| j jr¶dS n@| jjrŒ| j jr¶dS n*| jjr¢| j j	r¶dS n| jjr¶| j j	r¶dS d S ©NFT)rg   r   rˆ   r`   Ú
is_complexrƒ   r�   rI   r;   rH   Úis_extended_positiverž   r‡   rŸ   re   r]   r]   r^   rš   ®  s.    zPow._eval_is_extended_negativec                 C  sÐ   | j jr"| jjrdS | jjrÌdS nª| j tjkr:| jtjkS | j jdkr¸| j jrZ| jjrZdS | jj	rj| j j
S | jjrvdS | jj
rÌ| jjrÌdt| j ƒ jrž| jjS dt| j ƒ jrÌ| jjS n| j jrÌ| jj	rÌdS d S )NTFr   )r`   rž   rg   r£   rŸ   r   r=   ÚNegativeInfinityr;   r…   rK   Úis_nonnegativerƒ   rJ   r�   re   r]   r]   r^   Ú_eval_is_zeroÇ  s*    
zPow._eval_is_zeroc                 C  sÜ   | j \}}|jr$|jdkr$|jr$dS |jrN|jrN|tjkr>dS |jsJ|jrNdS |jr†|jr†|jsf|jr†t	|d j
ƒr†t	|d j
ƒr†dS |jr¤|jr¤| j| j Ž }|jS |jr¾|jr¾|d jr¾dS |jrØ|jrØ|d jrØdS d S )NFTr   )r    Úis_rationalrB   rŽ   r   r9   r¥   r…   r;   r   rž   rF   ÚfuncrC   )ra   rU   rV   Úcheckr]   r]   r^   Ú_eval_is_integerß  s&    

zPow._eval_is_integerc                 C  s  | j tjkr8| jjrdS | jjr8dtj | j tj jS ddl	m
}m} | j j}|d kr¦| j j|krv| j jjrv| jjS | j jtkr¢| j j tjkr¢| j jjr¢| jjS d S | jj}|d krºd S |�r.|�r.| j jrÒdS | j jræ| jjrædS | jj� rþ| j j� rþdS | jj�r| jj�rdS | j j�r.| jj�r.dS |�r^| jj�r^| j jdk�r^t| j | j ƒjS | j j}| jj}|�r$| jj�rœ| jj�rŒdS | jj�r$dS nˆ|�r´|| j ƒj�r´dS | jj�rø| j ¡ \}}|�r$|j�r$t| j | | j | dd�jS n,| j tj tjfk�r$| jd jdk�r$dS |�r°|�r°| j tjk�rBdS | j tj¡}|�r°| j j�rŒ|j�rŒ| j j�rŒ| j d j�rŒ|j�rŒdS ||| j ƒ tj j}	|	d k	�r°|	S |dk�r|�rt| jtƒ�rà| jj dk�ràdS ddl!m"}
 |
| j ƒ| j tj }|j#�r|jS d S )	NTrk   r   )r+   rg   Fr�   r   ©rW   )$r`   r   r=   rg   rƒ   r†   rP   rQ   rH   rL   r+   r¨   r   r£   r‡   rB   Zis_extended_nonzeror¥   r�   Úis_Rationalrž   rI   rN   Úas_coeff_AddrC   ÚMulr9   Úcoeffr§   Ú
is_nonzeror1   ÚRationalÚprO   rW   r¢   )ra   r+   rg   Zreal_bZreal_eZim_bÚim_erX   ÚaÚokrW   Úir]   r]   r^   Ú_eval_is_extended_realô  sŠ    $





  ÿ
 
zPow._eval_is_extended_realc                 C  sD   | j tjkr t| jj| jjgƒS tdd„ | jD ƒƒr@|  	¡ r@dS d S )Nc                 s  s   | ]}|j V  qd S rh   )r¢   )Ú.0r´   r]   r]   r^   Ú	<genexpr>?  s     z'Pow._eval_is_complex.<locals>.<genexpr>T)
r`   r   r=   r   rg   r¢   r�   Úallr    Ú_eval_is_finitere   r]   r]   r^   Ú_eval_is_complex:  s    zPow._eval_is_complexc           
      C  s>  | j jdkrdS | j jr8| jjr8| jj}|d k	r4|S d S | j tjkrrd| j tjtj	  }|j
rddS |jrndS d S | jjržddlm} || j ƒj}|d k	rždS | j jrò| jjrò| j jrºdS | jj}|sÊ|S | jjrÖdS d| j j}|rî| j jS |S | j jdk�r:ddlm} || j ƒ| j tj }d| j}	|	d k	�r:|	S d S )NFrk   Tr   r*   r«   )r`   r   r†   rg   rB   rI   r   r=   rQ   rP   rH   rL   r+   rƒ   rŽ   r§   r…   rO   rW   )
ra   rr   Úfr+   ZimlogÚratZhalfrW   r¶   Zisoddr]   r]   r^   Ú_eval_is_imaginaryB  sL    

zPow._eval_is_imaginaryc                 C  s@   | j jr<| j jr| jjS | j jr,| jjr,dS | jtjkr<dS d S r™   )rg   rB   rŽ   r`   rI   r¥   r   r9   re   r]   r]   r^   Ú_eval_is_odds  s    zPow._eval_is_oddc                 C  st   | j jr(| jjrdS | jjs$| jjr(dS | jj}|d kr<d S | j j}|d krPd S |rp|rp| j jslt| jjƒrpdS d S r¡   )	rg   r…   r`   rž   rK   r°   r;   r¥   r   )ra   Úc1Úc2r]   r]   r^   r»   |  s    zPow._eval_is_finitec                 C  s$   | j jr | jjr | jd jr dS dS )zM
        An integer raised to the n(>=2)-th power cannot be a prime.
        r   FN)r`   rB   rg   rŽ   re   r]   r]   r^   Ú_eval_is_primeŒ  s    zPow._eval_is_primec                 C  sL   | j jrH| jjrH| j d jr(| jd jsD| j d jrH| jjrH| jjrHdS dS )zS
        A power is composite if both base and exponent are greater than 1
        r   TN)r`   rB   rg   rŽ   r…   rH   re   r]   r]   r^   Ú_eval_is_composite“  s    
ÿ
ÿ
þþþzPow._eval_is_compositec                 C  s   | j jS rh   )r`   r‚   re   r]   r]   r^   Ú_eval_is_polarœ  s    zPow._eval_is_polarc                 C  s  ddl m} t| j|ƒrT| j ||¡}| j ||¡}t||ƒrH| |¡S |  ||¡S ddlm}m	} dd„ }|| jksŠ||kr¾| jt
jkr¾|jr¬t|tƒr¬|| j ||¡ƒS || j ||¡ S t|| jƒrô| j|jkrô|| j|jƒ}	|	jrôt||	ƒS t|| jƒ�rZ| j|jk�rZ| jjdk�r„| jjtdd�}
|jjtdd�}||
||ƒ\}}}|�rZ|  ||¡}|d k	�r~t|t|j|ƒƒ}|S nÖ|j}g }g }| ¡ }| jjD ]z}| ||¡}| ¡ }
||
||ƒ\}}}|�rú| || ¡ |d k	�r¢| |¡ �q¢n|j�s|j�s d S | |¡ �q¢|�rZt|Ž }| |dk�rJt| j|dd	�n| j¡ t|Ž S t||ƒ�s||j�rþ|jt
jk�rþ| jj�rþ| jj�rþ|jjtdd�}
| j|| jƒ jtdd�}||
||ƒ\}}}|�rþ|  ||¡}|d k	�rút|t|j|ƒƒ}|S d S )
Nr   r&   ru   c                 S  s$  | \}}|\}}||k�r |j r€|| }zt|dd� d}W n8 tk
rt   | ¡ \}	}
|	jrd|
jpn|	jon|
j}Y nX ||dfS t|tƒs�|f}t	dd„ |D ƒƒs¦dS zbt
t|ƒt|ƒƒ\}}|dk râ|dkrâ|d	7 }|t|ƒ8 }|dkrðd}nt|f|žŽ }d||fW S  tk
�r   Y nX dS )
a*  Return (bool, pow, remainder_pow) where, if bool is True, then the
            exponent of Pow `old` will combine with `pow` so the substitution
            is valid, otherwise bool will be False.

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

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

            Fr}   TNc                 s  s   | ]}|j V  qd S rh   )rB   )r¸   Útermr]   r]   r^   r¹   Ï  s     z1Pow._eval_subs.<locals>._check.<locals>.<genexpr>)FNNr   r   )r   r   Ú
ValueErrorrp   rŽ   rœ   r¥   r1   Útuplerº   Údivmodr®   )Úct1Úct2ÚoldZcoeff1Zterms1Zcoeff2Zterms2r’   ZcombinesrU   rV   Ú	remainderÚremainder_powr]   r]   r^   Ú_check«  s8    


zPow._eval_subs.<locals>._checkF)Zas_Addr   r�   )r>   r'   r1   rg   r`   ÚsubsÚ__rpow__r¨   rL   r+   r   r=   Zis_Functionr   Ú_subsrF   r   rN   Zas_independentÚSymbolr®   Zas_coeff_mulr    Úappendr   rB   ÚAddÚis_Powrƒ   rŽ   )ra   rÌ   Únewr'   rU   rV   rg   r+   rÏ   ÚlrÊ   rË   rµ   r’   rÎ   ÚresultZoargZnew_lZo_alr´   ZnewaÚexpor]   r]   r^   Ú
_eval_subsŸ  sv    

:



&6 ÿ
zPow._eval_subsc                 C  s<   | j \}}|jr4|j|jk r4|jdkr4d| | fS ||fS )aú  Return base and exp of self.

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

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

        Examples
        ========

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

        r   r   )r    r¬   r²   rw   )ra   rU   rV   r]   r]   r^   rp      s    
zPow.as_base_expc                 C  sr   ddl m} | jj| jj }}|r2|| jƒ| j S |rF| j|| jƒ S |dkrn|dkrnt| ƒ}|| krn||ƒS d S )Nr   )ÚadjointF)rO   rÜ   rg   rB   r`   rŽ   r   )ra   rÜ   r¶   r²   Úexpandedr]   r]   r^   Ú_eval_adjoint=  s    zPow._eval_adjointc                 C  s|   ddl m} | jj| jj }}|r2|| jƒ| j S |rF| j|| jƒ S |dkrn|dkrnt| ƒ}|| krn||ƒS | jrx| S d S )Nr   )Ú	conjugateF)rO   rß   rg   rB   r`   rŽ   r   rƒ   )ra   rX   r¶   r²   rÝ   r]   r]   r^   Ú_eval_conjugateI  s    zPow._eval_conjugatec                 C  s–   ddl m} | jtjkr,|  tj| j ¡ ¡S | jj| jjp@| jj	 }}|rV| j| j S |rj|| jƒ| j S |dkr’|dkr’t
| ƒ}|| kr’||ƒS d S )Nr   )Ú	transposeF)rO   rá   r`   r   r=   r¨   rg   rB   r¢   rK   r   )ra   rá   r¶   r²   rÝ   r]   r]   r^   Ú_eval_transposeW  s    zPow._eval_transposec                   sè   ˆj ‰ ˆj}ˆ tjkrXddlm} t||ƒrX|jrXddlm	} |ˆ 
ˆ |j¡f|jžŽ S |jrä| dd¡s|ˆ jdks|| ¡ rä|jrœt‡ ‡fdd„|jD ƒŽ S ˆ jrät|jdd	„ d
d�\}}|rät‡ ‡fdd„|D ƒŽ ˆ t |¡  S ˆS )za**(n + m) -> a**n*a**mr   )ÚSum)ÚProductÚforceFc                   s   g | ]}ˆ  ˆ |¡‘qS r]   ©r¨   ©r¸   Úx©rU   ra   r]   r^   Ú
<listcomp>q  s     z.Pow._eval_expand_power_exp.<locals>.<listcomp>c                 S  s   | j S rh   r   ©rè   r]   r]   r^   Ú<lambda>s  ó    z,Pow._eval_expand_power_exp.<locals>.<lambda>T©Úbinaryc                   s   g | ]}ˆ  ˆ |¡‘qS r]   ræ   rç   ré   r]   r^   rê   u  s     )r`   rg   r   r=   Zsympy.concrete.summationsrã   r1   r   Zsympy.concrete.productsrä   r¨   ÚfunctionZlimitsrN   Úgetrž   Ú_all_nonneg_or_nonpposr®   r    r   rÕ   Ú
_from_args)ra   ÚhintsrV   rã   rä   rX   Úncr]   ré   r^   Ú_eval_expand_power_expe  s*    
ÿÿÿzPow._eval_expand_power_expc                   sT  ˆ  dd¡}ˆj}ˆj‰ |js"ˆS |jdd�\}}|r¾‡fdd„|D ƒ}ˆ jrœˆ jrbt|ˆ  Ž }n"tdd„ |ddd… D ƒˆ   Ž }|r˜|t|Ž ˆ  9 }|S |s´ˆjt|Ž ˆ dd	�S t|Ž g}t	|d
d„ dd�\}}dd„ }	t	||	ƒ}
|
d }||
d 7 }|
d }|
t
j }|�rÆt
j}t|ƒd }|dk�r0n”|dk�rF| |¡ n~|dk�r†|�rx| ¡  }|t
jk	�r„| |¡ n| t
j¡ n>|�r®| ¡  }|t
jk	�rº| |¡ n| t
j¡ | |¡ ~|�sÔˆ j�ræ|| | }|}nîˆ j�ròt‚t|ƒdk�rjt
j}|�s&|d j�r&|| d¡9 }t|ƒd �r:| }|D ]}| | ¡ �q>|t
jk	�rÆ| |¡ n\|�r¼|�r¼|d j�r°|d t
jk	�r°| t
j¡ | |d  ¡ n
| |¡ n
| |¡ ~|}||7 }t
j}|�r2ˆ j�rt	|dd„ dd�\}}t‡ ‡fdd„|D ƒŽ }|t‡ ‡fdd„|D ƒŽ 9 }|�rP|ˆjt|Ž ˆ dd	�9 }|S )z(a*b)**n -> a**n * b**nrå   F)Zsplit_1c                   s&   g | ]}t |d ƒr|jf ˆ Žn|‘qS )Ú_eval_expand_power_base)Úhasattrr÷   ©r¸   r¶   )rô   r]   r^   rê   ˆ  s   ÿÿz/Pow._eval_expand_power_base.<locals>.<listcomp>c                 S  s   g | ]}|d  ‘qS )r%   r]   rù   r]   r]   r^   rê   �  s     Nr%   r�   c                 S  s
   | j dkS ©NF)rƒ   rë   r]   r]   r^   rì   ›  rí   z-Pow._eval_expand_power_base.<locals>.<lambda>Trî   c                 S  s4   | t jkrt jS | j}|rdS |d kr0t| jƒS d S r™   )r   rP   r‚   r   r‡   )rè   Zpolarr]   r]   r^   Úpred�  s    
z)Pow._eval_expand_power_base.<locals>.predr#   r   r   rk   c                 S  s   | j o| jjo| jjS rh   )rÖ   rg   r¬   r`   rD   rë   r]   r]   r^   rì   ë  s   ÿc                   s    g | ]}ˆ  |j |jŽ ˆ ¡‘qS r]   )r¨   r    ©r¸   rU   ©rV   ra   r]   r^   rê   î  s     c                   s   g | ]}ˆj |ˆ d d�‘qS )Fr�   ræ   rü   rý   r]   r^   rê   ï  s     )rñ   r`   rg   rE   Zargs_cncrC   rŽ   r®   r¨   r   r   rP   ÚlenrÔ   Úpopr8   r9   rB   ÚAssertionErrorrF   Úextendr¬   )ra   rô   rå   rU   Zcargsrõ   r€   r‰   Z
maybe_realrû   ZsiftedZnonnegÚnegÚimagÚIr¶   ZnonnÚorz   Znpowr]   )rV   rô   ra   r^   r÷   y  s¦    
þ"

ÿ










þ
zPow._eval_expand_power_basec                   s2  | j \‰ }| }|j�rX|jdk�rXˆ j�rX|jsžt|j|j ƒ}|sH|S |  ˆ || ¡g  }}|  ˆ |¡}|jrx| 	¡ }t
 |¡D ]}| || ¡ q‚t
|Ž S t|ƒ}ˆ j�rìg g  }}	ˆ j D ] }
|
jrÔ| |
¡ q¾|	 |
¡ q¾|�rLt
|	Ž }t
|Ž }|dk�rt|| dd�|| |  S t||d  dd�}t|| dd�|| |  S ˆ j�r´ˆ  ¡ \}}
|j�r´|
j�r´|j�sÒ|
j�s°|  |j|
j |¡}|j|
j |j|
j  }}
n |  |j|¡}|j|j|
  }}
n.|
j�sü|  |
j|¡}||
j |
j }}
nd}t|ƒt|
ƒddf\}}
}}|�r€|d@ �rV|| |
|  |
| ||   }}|d8 }|| |
|
  d| |
  }}
|d }�qtj}|dk�rœ|||  S t|ƒ| || |  S |	}ddlm} ddlm} |t|ƒ|ƒ}||f|žŽ S |dk�rt
‡ fdd	„ˆ j D ƒŽ S ˆ |d   	¡ ‰ˆj�r>t
‡fd
d	„ˆ j D ƒŽ S t
‡fdd	„ˆ j D ƒŽ S nÖ|j�rœ|jdk �rœˆ j�rœt|jƒ|jk�rœd|  ˆ | ¡ 	¡  S |j�r*ˆ j�r*| dd¡�sÐˆ jdk�sÐ| ¡ �r*g g  }}|j D ],}|j�r | |  ˆ |¡¡ n
| |¡ �qàt ||  ˆ t
 !|¡¡g Ž S |S dS )zA(a + b + ..)**n -> a**n + n*a**(n-1)*b + .., n is nonzero integerr   rk   F©Údeepr   )Úmultinomial_coefficients)Úbasic_from_dictc                   s    g | ]}ˆ j D ]}|| ‘qqS r]   ©r    ©r¸   r½   Úg)r`   r]   r^   rê   S  s       z0Pow._eval_expand_multinomial.<locals>.<listcomp>c                   s    g | ]}ˆ j D ]}|| ‘qqS r]   r
  r  ©Úmultir]   r^   rê   W  s     ÿc                   s   g | ]}|ˆ  ‘qS r]   r]   )r¸   r½   r  r]   r^   rê   [  s     rå   N)"r    r¬   r²   rN   rC   r‘   rw   r¨   rÖ   Ú_eval_expand_multinomialrÕ   Ú	make_argsrÔ   r�   r   Úis_Orderr   r   rD   Úas_real_imagr   rP   Zsympy.ntheory.multinomialr  Zsympy.polys.polyutilsr	  rþ   rJ   rF   rñ   rž   rò   r®   ró   )ra   rô   rg   rÙ   rz   ÚradicalZexpanded_base_nrÆ   Zorder_termsZother_termsrU   r½   r  r  r´   ÚkrX   r{   r  r²   r  r	  Zexpansion_dictr¯   Útailr]   )r`   r  r^   r  ô  s     
ÿ



"

ÿÿÿ

zPow._eval_expand_multinomialc                   sb  | j j�r¶ddlm} | j }| jj|d�\}}|s<| tjfS tdt	d�\‰ ‰|dkr�|j
r~|j
r~t| j| ƒ}|| kr~| ¡ S |ˆ ˆ | ƒ}nj|d |d  }|| | |  }}|j
rè|j
rèt||tj  |  ƒ}|| krè| ¡ S |ˆ ˆ |  ƒ}dd„ | ¡ D ƒ}	t‡ ‡fd	d„|	D ƒŽ }
d
d„ | ¡ D ƒ}	t‡ ‡fdd„|	D ƒŽ }dd„ | ¡ D ƒ}	t‡ ‡fdd„|	D ƒŽ }|
 ˆ |ˆtj| i¡| ˆ |ˆ|i¡| ˆ |ˆ| i¡ fS ddlm}m}m} | j j�rˆ| jj|d�\}}|j�r*| j tjk�r*|j�r| tjfS |j�r*tj| j | j  fS |  |  |d¡|  |d¡ tj¡}	|||ƒ}|  |	| j ¡|| j   }}|||ƒ |||ƒ fS | jtjk�rüddlm } | j  ¡ \}}|�rÒ|j|f|Ž}|j|f|Ž}||ƒ||ƒ }}||ƒ| ||ƒ| fS ddlm}m} |�rNd|d< | j|f|Ž}|  d¡|k�r<d S ||ƒ||ƒfS n|| ƒ|| ƒfS d S )Nr   )Úpolyr  za brl   rk   c                 S  s    g | ]}|d  d d s|‘qS )r   r   rk   r]   rù   r]   r]   r^   rê   Œ  s      z$Pow.as_real_imag.<locals>.<listcomp>c                   s(   g | ] \\}}}|ˆ |  ˆ|  ‘qS r]   r]   ©r¸   ZaaZbbÚcc©r´   rU   r]   r^   rê   �  s    
 c                 S  s$   g | ]}|d  d d dkr|‘qS )r   r   r#   r]   rù   r]   r]   r^   rê   �  s      c                   s(   g | ] \\}}}|ˆ |  ˆ|  ‘qS r]   r]   r  r  r]   r^   rê   �  s    
 c                 S  s$   g | ]}|d  d d dkr|‘qS )r   r   r#   rj   r]   rù   r]   r]   r^   rê   ‘  s      c                   s(   g | ] \\}}}|ˆ |  ˆ|  ‘qS r]   r]   r  r  r]   r^   rê   ’  s    
 )Úatan2ÚcosÚsin©rg   )r.   rt   FÚcomplexÚignore)!rg   rC   Zsympy.polys.polytoolsr  r`   r  r   r:   ÚsymbolsÚDummyrF   r   rP   ÚtermsrÕ   rÐ   Ú(sympy.functions.elementary.trigonometricr  r  r  r¬   rž   rˆ   r‡   rŸ   r¨   r=   rL   ÚexpandrO   r.   rt   rñ   )ra   r  rô   r  rg   Zre_er³   ÚexprÚmagÚrZre_partZim_part1Zim_part3r  r  r  ÚtÚrpÚtprX   r[   r.   rt   rÝ   r]   r  r^   r  n  sv    


ÿ$ÿ

"
zPow.as_real_imagc                 C  sF   ddl m} | j |¡}| j |¡}| ||| jƒ || j | j   S r_   )rL   r+   r`   Údiffrg   )ra   r[   r+   ZdbaseZdexpr]   r]   r^   Ú_eval_derivativeÁ  s    zPow._eval_derivativec                 C  s¢   |   ¡ \}}|tjkr6ddlm} || jdd� |¡S | |¡}|jsP| |¡}|jr–|j	r–|j
dkr–| ¡ || ¡   |¡ }| }|  ||¡ ¡ S |  ||¡S )Nr   r  Fr�   )rp   r   r=   rL   rg   Ú_eval_evalfZ_evalfrC   r…   rD   rƒ   rß   r¨   r$  )ra   Úprecr`   rg   Zexp_functionr]   r]   r^   r-  Ç  s    


zPow._eval_evalfc                 C  sF   | j j|Ž rdS | jj|Ž r>t| j |¡o:| j jo:| j dkƒS dS d S )NFr   T)rg   Úhasr`   ÚboolÚ_eval_is_polynomialrC   ©ra   Zsymsr]   r]   r^   r1  Ö  s    ÿÿzPow._eval_is_polynomialc                 C  sº   | j jr,| jjr,tt| j j| jjgƒƒr,dS | j|  	¡ Ž }|j
sF|jS | 	¡ \}}|jrb|jrbdS |jrœ|jr�t|jƒs~|jr‚dS ||krœdS n|jrœ|jS |tjkr¶|jr¶|jr¶dS d S )NTF)rg   rB   r`   r§   r   r   r…   rž   r¨   rp   rÖ   r¬   r¥   Úis_irrationalr   r=   r°   )ra   r²   rU   rV   r]   r]   r^   Ú_eval_is_rationalà  s*    ÿ
zPow._eval_is_rationalc                 C  s6  dd„ }| j js|| j ƒrdS | j tjkrŠ| j| jŽ }|j| jkr‚| jjrˆ| jjrVdS | jtj	 j
rhdS | jtjtj	  j
rˆdS n|jS n¨| jj
rà| j jdkr¦| jjS | j jdkrÎ| jjrÂ| j jS | j jrÎdS | jjrÞ| j jS nR| j j�r2| jj�r2t| j jƒ�rt|| j ƒƒ�s*| j jdk�s*| j j�r2| jj
S d S )Nc                 S  s(   z| d j W S  tk
r"   Y dS X d S )Nr   F)rž   rÇ   )r%  r]   r]   r^   Ú_is_oneü  s    z'Pow._eval_is_algebraic.<locals>._is_oneTF)r`   rž   r   r=   r¨   r    rg   r°   Zis_algebraicrQ   r§   rP   rŽ   r   rB   r3  )ra   r5  r[   r]   r]   r^   Ú_eval_is_algebraicû  sB    
ÿ
þýzPow._eval_is_algebraicc                 C  s8   | j j|Ž rdS | jj|Ž r0| j |¡o.| j jS dS d S r¡   )rg   r/  r`   Ú_eval_is_rational_functionrC   r2  r]   r]   r^   r7  "  s    ÿzPow._eval_is_rational_functionc           	      C  s¬   | j  ||¡}| jj}|r|S | j ||¡}|dkr@|r<dS d S |d krLd S | j  ||¡}|j}|rjd}nt|jt|ƒfƒ}|dkrˆ|S |d kr”d S |sœ|S | j ||¡jS rú   )	r`   Ú_eval_is_meromorphicrg   rC   rÐ   rž   r   r;   r   )	ra   rè   r´   Z
base_meromZexp_integerZ	exp_meromrU   Zb_zeroZlog_definedr]   r]   r^   r8  ,  s*    zPow._eval_is_meromorphicc                 C  s8   | j j|Ž rdS | jj|Ž r0| j |¡o.| j jS dS d S r¡   )rg   r/  r`   Ú_eval_is_algebraic_exprr¬   r2  r]   r]   r^   r9  Q  s    ÿzPow._eval_is_algebraic_exprc           	      K  s°   ddl m}m} |js*| |¡s*| |¡r2|| S | t¡}| t¡rztjrdtt	j
||ƒ| |d�S |||ƒ| |d�S n2ddlm}m} ||||ƒƒt	j||ƒ  | ƒS d S )Nr   ru   r�   )rW   ÚAbs)rL   rg   r+   rž   r/  rÓ   r   Z
exp_is_powr   r   r=   rO   rW   r:  rP   )	ra   r`   rÚ   Úkwargsrg   r+   r/   rW   r:  r]   r]   r^   Ú_eval_rewrite_as_exp[  s    

zPow._eval_rewrite_as_expc                 C  s
  | j s| tjfS |  ¡ \}}| ¡ \}}|j}|jrF|sF|jsF| ¡ }|j	}|j
s`|s`|}tj}|j}|rz| |  }}n|d kr�|s�|}tj}|r¤|| }}| }|jrò|tjkrÎ|tjk	rÎ||  ||¡fS |tjk	rò|tjkrò|  ||¡|fS |  ||¡|  ||¡fS rh   )r   r   r8   rp   ry   r…   rE   rŽ   rG   rB   rƒ   Úis_nonpositiverK   r¨   )ra   r`   rg   rz   r{   Zneg_expZint_expZdnonposr]   r]   r^   ry   o  s4    


zPow.as_numer_denomFc           	      C  sî   t |ƒ}|d kri }|tjkr:| j tj|¡}|d k	r:|S t|tƒsHd S | ¡ \}}|  ¡ \}}|j	rž|j
rž|rž|jrŠ| |||  |¡S | |d|  |¡S | ¡ }| j ||¡}|d krÀd S | j |¡ ||¡}|d krêt | ||¡S |S rf   )r   r   r8   rg   Úmatchesr:   r1   r	   rp   rA   rC   r§   Úcopyr`   Zxreplace)	ra   r%  Z	repl_dictrÌ   r{   rU   rV   ÚsbÚser]   r]   r^   r>  ’  s.    

zPow.matchesr   c           3   
     s$  ddl m}m} ddlm} ddlm} ddlm}	 | j	t
jk�r| jj|||d�}
|
jrbd|
 S ||
 ¡ |dƒ}|t
jkrŠ||| |ƒS |t
jkr˜| S |
| }||ƒ }}td|ƒD ](}||| 9 }|j|||d�}||7 }q¶|||| |ƒ7 }ddlm} ||d	d
d�S ddlm} ddlm} || d	d� ¡ } |  ¡ \}}|j|Ž �rRtƒ ‚| |¡�r|||||ƒ ƒj||||d�S |d k	�rÞ| |¡�rÞddlm} td||gd�\}}| ||||  ƒ||ƒ||  ¡}|| } | ¡ }z>ddl m!} | |t
j"¡�r|d k	�rt#ƒ ‚| $|¡\}}W n^ t#t%tfk
�r‚   |j|t&d|ƒ||d� ¡ }| t
j't
j(¡�rpt%ƒ ‚| $|¡\}}Y nX | |¡�r¨ddl)m*} ||ƒ +¡ }|j,�s|j-�rÀ|j.�s| | j/|||d�k�r||||ƒ ƒj||||d�}|||||ƒ ƒk�r| S |S |j0||d�}|| t
j1 j+dd�}|j-�sDt%ƒ ‚|||  ‰ ˆ  t2¡�rd|	|ƒ‰ ˆ j3�r~||||  |ƒS |j,�r®|| }|| k�rª|||| |ƒ7 }|S dd„ } ‡ fdd„}!z|j$||d�\}}"W nV t#t%fk
�r.   |||ˆ   |dƒdk�r$|| |||  |   Y S t%ƒ ‚Y nX |j4�rf|"t
j5k�rfddl)m6}# |#|ƒj$||d�\}}"|"j7�sÐ| 8¡ }|j,�r†|| S |j$||d�\}}"|"j7�sÐ|| |  9¡ }|j$||d�\}}"|"j7�sÐt%ƒ ‚ddl:m;}$ |j||$ˆ ƒ||d� ¡ }%i }&t< =|%¡D ]*}| ||ƒ\}'}(|& >|(t
j5¡|' |&|(< �qt
j1})t
j5t
j1i}*|&}+dd l?m@},mA}- |)|" ˆ  j3�rº|-||)ƒ|,|)ƒ }.|+D ]$}|* >|t
j5¡|.|+|   |*|< �q||!|+|&ƒ}+|)t
j17 })�qVdd!lBmC}/ |jD�sb|j,�rb|j3�rb||  E||¡}0|/|0ƒj3�r| || d"d#|   |ƒ\}1}2nF|/|0ƒj,�rN| ||||ƒ ƒj0|||d�|ƒ\}1}2n| || |ƒ\}1}2n| || |ƒ\}1}2t
j5}|*D ]&}(|(|2 }||*|( |1 ||  7 }�q~|jD�rÔ|j7�rÔ||" | jF�rÔ|tG| ƒk�s z|||| |ƒ7 }W n4 t%k
�r   ||||ƒ ƒj||||d� Y S X |S )$Nr   ru   )Úlimit)ÚOrder©Úsympify)rz   Úlogxr   )ÚpowsimpTrg   )r  Úcombine)Ú	powdenest)Ú_illegal)rå   )rz   rF  Úcdir)ÚWildzc, ex)rT   Úexclude)Ú	polygammark   )Ú
logcombine©rF  rK  ©rF  F)r$  c              	   S  s‚   t jt j }}t | ¡D ]`}| |¡rp| ¡ \}}||krxz|  |¡W   S  tk
rl   | t jf Y   S X q||9 }q||fS rh   )	r   r8   r:   r®   r  r/  rp   ÚleadtermrÇ   )rÆ   rè   r¯   rg   Úfactorr`   r]   r]   r^   Ú	coeff_exp  s    

z$Pow._eval_nseries.<locals>.coeff_expc                   sN   i }t | |ƒD ]:\}}|| }|ˆ k r| |tj¡| | ||   ||< q|S rh   )r   rñ   r   r:   )Zd1Zd2ÚresÚe1Úe2rY   ©Zmaxpowr]   r^   Úmul  s    $zPow._eval_nseries.<locals>.mul)Ú	nsimplify)Úceiling)Ú	factorialÚff©r.   r%   éþÿÿÿ)HrL   rg   r+   Zsympy.series.limitsrB  Zsympy.series.orderrC  Zsympy.core.sympifyrE  r`   r   r=   Znseriesr  ZremoveOr¤   r7   ÚrangeZsympy.simplify.powsimprG  rI  ÚnumbersrJ  Ztrigsimprp   r/  r   Ú_eval_nseriesÚsymbolrL  r   ÚreplaceZ'sympy.functions.special.gamma_functionsrN  Z
EulerGammarÇ   rR  ÚNotImplementedErrorr@   r6   r5   Zsympy.simplify.simplifyrO  Úcancelrž   rD   rœ   Ú_eval_as_leading_termÚas_leading_termr8   rÓ   r…   Zis_Floatr:   rZ  rŽ   Úsimplifyr$  r„   r[  rÕ   r  rñ   Ú(sympy.functions.combinatorial.factorialsr\  r]  rO   r.   rB   Údirr=  r   )3ra   rè   rz   rF  rK  rg   r+   rB  rC  rE  Ze_seriesZe0r(  Z
exp_seriesrÆ   r¶   rG  rI  rJ  rU   rV   rL  rX   rY   rN  Ú_r”   rO  rU  r½   r  r'  rT  rY  r{   rZ  r[  ZgpolyZgtermsZco1rV  r  r"  Ztkr\  r]  r¯   r.   ÚndirZincoZinexr]   rX  r^   rb  ´  sþ    


$
"
 ( 
ÿ$zPow._eval_nseriesc                 C  sx  ddl m}m} | j}| j}| jtjkr||j||d�}| |d¡}	|	tjkrX| 	|d¡}	|	j
dkrltj|	 S td|  ƒ‚� nø| |¡r¦||||ƒ ƒ}
|
j|||d�S ddlm} z|j|||d�}W n tk
rÞ   |  Y S X |j�sh|j�rh| |¡�sh||  ||¡}||ƒj�r0|  ||¡dd	|   S ||ƒj�rh||ƒj|||d�}|j
dk�rh||| ƒS |  ||¡S d S )
Nr   ru   rQ  FzCannot expand %s around 0rP  r^  r%   r_  )rL   rg   r+   r`   r   r=   rh  rÐ   r6   rB  rK   r   r/  rO   r.   rB   r…   rk  r¨   rž   rg  )ra   rè   rF  rK  rg   r+   rV   rU   rW   Zarg0Últr.   r½   rm  Zlog_leadtermr]   r]   r^   rg  o  s8    




zPow._eval_as_leading_termc                 G  s$   ddl m} || j|ƒ|  ||¡ S )Nr   )Úbinomial)rj  ro  rg   r¨   )ra   rz   rè   Úprevious_termsro  r]   r]   r^   Ú_taylor_term‘  s    zPow._taylor_termc                   sŒ   | j tjk	r tƒ j||f|žŽ S |dk r.tjS |dkr<tjS ddlm} ||ƒ}|rp|d }|d k	rp|| | S ddlm	} || ||ƒ S )Nr   r   rD  r%   )r\  )
r`   r   r=   ÚsuperÚtaylor_termr:   r8   rE  rj  r\  )ra   rz   rè   rp  rE  r²   r\  ©r<   r]   r^   rs  –  s    zPow.taylor_termc                 K  sL   | j tjkrHddlm} |tj| j tjd  ƒtj|tj| j ƒ  S d S )Nr   )r  rk   )r`   r   r=   r#  r  rP   rg   rQ   )ra   r`   rg   rô   r  r]   r]   r^   Ú_eval_rewrite_as_sin¦  s    zPow._eval_rewrite_as_sinc                 K  sL   | j tjkrHddlm} |tj| j ƒtj|tj| j tjd  ƒ  S d S )Nr   )r  rk   )r`   r   r=   r#  r  rP   rg   rQ   )ra   r`   rg   rô   r  r]   r]   r^   Ú_eval_rewrite_as_cos«  s    zPow._eval_rewrite_as_cosc                 K  s@   | j tjkr<ddlm} d|| jd ƒ d|| jd ƒ  S d S )Nr   )Útanhr   rk   )r`   r   r=   Z%sympy.functions.elementary.hyperbolicrw  rg   )ra   r`   rg   rô   rw  r]   r]   r^   Ú_eval_rewrite_as_tanh°  s    zPow._eval_rewrite_as_tanhc           	      K  s„   ddl m}m} |tjk	rd S |jr€| tjtj ¡}|r€|j	r€|tj| ƒ|tj| ƒ }}t
||ƒs€t
||ƒs€|tj|  S d S )Nr   )r  r  )r#  r  r  r   r=   rE   r¯   rQ   rP   rD   r1   )	ra   r`   rg   r;  r  r  r¯   ZcosineZsiner]   r]   r^   Ú_eval_rewrite_as_sqrtµ  s    

zPow._eval_rewrite_as_sqrtc              	   C  s>  |   ¡ \}}t|j||d�Ž }|j||d�\}}|jr´| ¡ \}}|jr´|tjkr´|| }	|  ||	¡}
tj}|
js�t|	j	|	j
ƒ\}}|  ||¡}
|
|  |t|||| |	j
  ƒ¡fS t||ƒ}|j�r,|j�r,|j||d�\}}|  ||¡ ¡ \}
}|  ¡ \}}|tjk�s||k�r,|
|  t||ƒ|¡fS tj|  ||¡fS )aþ  Return the tuple (R, self/R) where R is the positive Rational
        extracted from self.

        Examples
        ========

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

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

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

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

        See docstring of Expr.as_content_primitive for more examples.
        )r  Úclear)rp   Ú_keep_coeffÚas_content_primitiver¬   r­   r   r:   r¨   rÉ   r²   rw   rE   rM   r8   )ra   r  rz  rU   rV   ZceZpeÚhr(  ZcehrX   r'  Zicehr”   Úmer]   r]   r^   r|  À  s*    +$
zPow.as_content_primitivec           
      O  s˜   | }|  dd¡r| ¡ }| ¡ \}}| d¡}|rJ|| }||krJ| ¡ S |j|Ž }|j|Ž }	|	r‚|rjdS | d¡}|dkrŽdS n|	d krŽd S | d¡S )Nri  Tr   F)rñ   ri  rp   ÚequalsÚis_constant)
ra   ZwrtÚflagsr%  rU   rV   Zbzr×   ZeconZbconr]   r]   r^   r€    s(    



zPow.is_constantc                 C  sF   | j \}}| |¡rB| |¡sB| ||| ¡}|||  d |  S d S rf   )r    r/  rÐ   )ra   rz   ÚsteprU   rV   Znew_er]   r]   r^   Ú_eval_difference_delta(  s    
zPow._eval_difference_delta)N)r   )T)NF)r   )Nr   )FT)Ar4   Ú
__module__Ú__qualname__Ú__doc__rÖ   Ú	__slots__Ú__annotations__r   rS   rb   Úpropertyr`   rg   ri   Úclassmethodrm   rs   rR   r—   r˜   r›   r    rš   r¦   rª   r·   r¼   r¿   rÀ   r»   rÃ   rÄ   rÅ   rÛ   rp   rÞ   rà   râ   rö   r÷   r  r  r,  r-  r1  r4  r6  r7  r8  r9  r<  ry   r>  rb  rg  rq  rs  ru  rv  rx  ry  r|  r€  rƒ  Ú__classcell__r]   r]   rt  r^   r      s†   
Xb


	T8F1		 {z
S
'
%
#
"
 <
"

Qr   Úpower)rÕ   )r‘   r±   )r®   r{  )rÓ   r!  r   N):Ú
__future__r   Útypingr   Ú	itertoolsr   rE  r   Úcacher   Z	singletonr   r%  r	   r   r
   rð   r   r   r   r   r   Zlogicr   r   r   r   Ú
parametersr   r0   r   r   ri   r   r   Zsympy.utilities.iterablesr   Zsympy.utilities.exceptionsr   Zsympy.utilities.miscr   Zsympy.multipledispatchr   r   rŒ  ÚaddÚobjectrÕ   ra  r‘   r±   rY  r®   r{  rc  rÓ   r!  r   r]   r]   r]   r^   Ú<module>   sJ                 &