U
    ;qLe\-                    @  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  sb   | dk rt dt| } | dk rTtt| }d| ||    krLd| krTn n|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)   g/home/p21-0144/sympy/latex2sympy2solve-back-end/sympyEq/lib/python3.8/site-packages/sympy/core/power.pyisqrt   s    $r+   c                 C  s   t | t | } }| dk r"td|dk r2tdtrx|dk rxtdkrXt| |\}}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   Zirootrootbool_integer_nthroot_python)yr'   xtr)   r)   r*   r&   .   s    r&   c           	      C  sv  | dkr| dfS |dkr | dfS |dkrBt | \}}t|| fS ||  krRdS zt| d|  d }W n\ tk
r   t| d| }|dkrt|d }td	||  d |> }ntd	| }Y nX |d
krd| }}||d  }||d | | |  |  }}t|| dk rܐq"qn|}|| }|| k rH|d7 }|| }q*|| krf|d8 }|| }qHt||| kfS )N)r   r   Tr   r"   )r   Fg      ?g      ?5   g       @l           )mpmath_sqrtremr$   
bit_lengthOverflowError_logabs)	r/   r'   r0   remZguessexpshiftZxprevr1   r)   r)   r*   r.   Y   s@    



r.   c           	      C  s"  |dkrt d| dkr t d|dkrTt|}t| } |  d }||| | kfS |dk rt| dkrj| n|  | \}}||ot| dk r|d n|d  fS t|}t| } d }}| |kr|}d}| |krt| |\} }|p|}||7 }| |kr||9 }|d9 }qq||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   r5   integer_logr-   divmod)	r/   r0   er'   brdmr9   r)   r)   r*   r=      s4    &
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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rtjS |tjkrt|tjrtjS t|tjrt|tjrtjS t|tjr|jrtjS |jd
krt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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krt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rtj||  S |j1r
ddl2m3}m4} |||}|j!r
|r
||	||d
d |tj5 tj6  kr
tj||  S |7|}|d 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   )deprecated_since_versionactive_deprecations_target
stacklevelFr3   ZAccumulationBoundsr   AccumBounds)	exp_polar)factor_termsr   )fraction)sign)rT   im);r   evaluater   
relationalrI   
isinstance	TypeErrorr   r   type__name__r
   ComplexInfinityNaNInfinityr   OneNegativeOner   Zero	is_finite	__class__Exp1!sympy.calculus.accumulationboundsrO   rD   minmax	is_Symbol
is_integer
is_Integer	is_numberis_Mul	is_Numbercould_extract_minus_signis_evenis_oddr8   is_infinite&sympy.functions.elementary.exponentialrP   is_Atom	exprtoolsrQ   r   sympy.simplify.radsimprS   as_coeff_MulrG   is_Add$sympy.functions.elementary.complexesrT   rU   ImaginaryUnitPi_eval_power__new__ _exec_constructor_postprocessorsrF   )clsr@   r?   rV   rI   argrO   rP   rQ   r   rS   cexnumdenrT   rU   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   rR   )baser
   rd   rr   r   )selfZargindexr   r)   r)   r*   inverse}  s    zPow.inverser   )returnc                 C  s
   | j d S )Nr   rH   r   r)   r)   r*   r     s    zPow.basec                 C  s
   | j d S Nr   r   r   r)   r)   r*   r:     s    zPow.expc                 C  s   | j jtkr| jjS tS d 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  sr   ddl m}m} |  \}}||||rn| rn||||rPt| |S ||||rnt| | S d S )Nr   )askQ)	Zsympy.assumptions.askr   r   as_base_expintegerrn   evenrD   odd)r   assumptionsr   r   r@   r?   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rtj| t| ||  S |jdkrt|| S n0|jr|jrt|}|jrt||tj }t|dk dks2|dkr8d}n|jrFd}n||jrjt|dk dkrjd}nn||rb|	dtj tj | |tj||| dtj    }|jr|||| dkr||}nd }nzl|	dtj tj | |tj|||
| d tj   }|jr@|||| dkr@||}nd }W n tk
r`   d }Y nX |d k	r~|t|||  S d S )Nr   r   )r   rU   rerT   r:   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.qNr"   T)getattras_numer_denomri   )r?   r'   rB   r)   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.r"   TstrictN)evalfrm   r   )r?   rvr)   r)   r*   _n2  s    
zPow._eval_power.<locals>._n2r3   TFr"   )r   r
   r]   ri   is_polaris_extended_realrx   r   rU   r   rT   rr   r:   r   #sympy.functions.elementary.integersr   is_negativer`   rD   ro   r8   is_imaginaryry   is_extended_nonnegativerz   Halfr   )r   otherr@   r?   r(   r   rU   r   rT   r:   r   r   r   r   r)   r)   r*   r{     sd    





"


zPow._eval_powerc                 C  sr  | j | j }}|jrn|jrn|jr6|| dkr6tjS ddlm} |jr|jr|jrt	|t	|t	|  }}}|
 }|dkr||kr|
 d |krt	||}	tt||	||	  |S tt|||S ddlm}
 t|tr|jr|jr|
||}|
t||dd|S t|trn|jrn|jrnt	|
 }|dkrn||}	|	|
||	 }|
t||dd|S d	S )
aO  A dispatched function to compute `b^e \bmod q`, dispatched
        by ``Mod``.

        Notes
        =====

        Algorithms:

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

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

        3. For any unevaluated power found in `b` or `e`, the step 2
        will be recursed down to the base and the exponent
        such that the $b \bmod q$ becomes the new base and
        $\phi(q) + e \bmod \phi(q)$ becomes the new exponent, and then
        the computation for the reduced expression can be done.
        r   )totientP   rJ   r   )ModFrV   N)r   r:   ri   is_positiver
   ra   sympy.ntheory.factor_r   rj   r$   r5   Integerpowmodr   rX   rD   rk   )r   r   r   r:   r   r@   r?   rC   Zmbphir   r5   r)   r)   r*   	_eval_Mod  s,     

zPow._eval_Modc                 C  s   | j jr| j jr| jjS d S r   )r:   ri   r   r   ro   r   r)   r)   r*   _eval_is_even+  s    zPow._eval_is_evenc                 C  s   t | }|dkr| jS |S NT)rD   _eval_is_extended_negativerb   )r   Zext_negr)   r)   r*   _eval_is_negative/  s    
zPow._eval_is_negativec                 C  s   | j | jkr| j jrdS n| j jr0| jjrdS n| j jrR| jjrDdS | jjrdS n| j jrl| jj	r| jjS nn| j j
r| jjrdS nX| j jr| jjr| jd }|jrdS |jr|jdkrdS | jjrddlm} || j jS d S )NTFrJ   r   rR   )r   r:   r   r   is_realis_extended_negativero   rp   is_zeror   is_extended_nonpositiver   ri   rr   r   )r   rC   r   r)   r)   r*   _eval_is_extended_positive5  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	rdS nl| jj
r`| j jrdS nV| jjrv| j jrdS n@| jjr| j jrdS n*| jjr| j j	rdS n| jjr| j j	rdS d S NFT)r:   r
   r   r   
is_complexr   r   rp   rb   ro   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rd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rdt| j  jr| jjS dt| j  jr| jjS n| j jr| jj	rdS d S )NTFr   )r   r   r:   r   r   r
   rd   NegativeInfinityrb   r   rq   is_nonnegativer   r8   r   r   r)   r)   r*   _eval_is_zerok  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rt	|d j
rt	|d j
rdS |jr|jr| j| j  }|jS |jr|jr|d jrdS |jr|jr|d jrdS d S )NFTr   )rG   is_rationalri   r   r
   r`   r   r   rb   r   r   rm   funcrj   )r   r@   r?   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rd S |r.|r.| j jrdS | j jr| jjrdS | jj r| j j rdS | jjr| jjrdS | j jr.| jjr.dS |r^| jjr^| j jdkr^t| j | j jS | j j}| jj}|r$| jjr| jjrdS | jjr$dS n|r|| j jrdS | jjr| j \}}|r$|jr$t| j | | j | ddjS n,| j tj tjf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rdS ||| j  tj j}	|	d k	r|	S |dkr|rddlm}
 |
| j | j tj }|j r|jS d S )	NTr"   r   )r   r:   Fr   r   r   )!r   r
   rd   r:   r   r   ry   rz   ro   rr   r   r   rD   r   r   ri   is_extended_nonzeror   r   is_Rationalr   rp   rw   as_coeff_Addrj   Mulr`   coeffr   
is_nonzerorx   r   r   )r   r   r:   Zreal_bZreal_eZim_bim_er   aokr   ir)   r)   r*   _eval_is_extended_real  s    $





  
 
zPow._eval_is_extended_realc                 C  sD   | j tjkr t| jj| jjgS tdd | jD r@| 	 r@dS d S )Nc                 s  s   | ]}|j V  qd S r   )r   ).0r   r)   r)   r*   	<genexpr>  s     z'Pow._eval_is_complex.<locals>.<genexpr>T)
r   r
   rd   r   r:   r   r   allrG   _eval_is_finiter   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rddlm} || j j}|d k	rdS | j jr| jjr| j jrdS | jj}|s|S | jjrdS d| j j}|r| j jS |S | j jdkr:ddlm} || j | j tj }d| j}	|	d k	r:|	S d S )NFr"   Tr   rR   r   )r   rF   r   r:   ri   rp   r
   rd   rz   ry   ro   rr   r   r   r   r   r   rx   r   )
r   r   fr   Zimlograthalfr   r   Zisoddr)   r)   r*   _eval_is_imaginary  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   )r:   ri   r   r   rp   r   r
   r`   r   r)   r)   r*   _eval_is_odd  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   )	r:   r   r   r   rq   r   rb   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 )zM
        An integer raised to the n(>=2)-th power cannot be a prime.
        r   FN)r   ri   r:   r   r   r)   r)   r*   _eval_is_prime.  s    zPow._eval_is_primec                 C  sL   | j jrH| jjrH| j d jr(| jd jsD| j d jrH| jjrH| jjrHdS dS )zS
        A power is composite if both base and exponent are greater than 1
        r   TN)r   ri   r:   r   r   ro   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|rT| j||}| j||}t||rH||S | ||S ddlm}m	} dd }|| jks||kr| jt
jkr|jrt|tr|| j||S || j|| S t|| jr| j|jkr|| j|j}	|	jrt||	S t|| jrZ| j|jkrZ| jjd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|| qn|js|js d S || q|rZt| }||dkrJt| j|dd	n| j t| S t||s||jr|jt
jkr| jjr| jjr|jjtdd}
| j|| j jtdd}||
||\}}}|r| ||}|d k	rt|t|j|}|S d S )
Nr   rN   r   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 sdS zbt
t|t|\}}|dk r|dkr|d	7 }|t|8 }|dkrd}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 r   )ri   )r   termr)   r)   r*   r   q  s     z1Pow._eval_subs.<locals>._check.<locals>.<genexpr>)FNNr   r   )rF   r   r#   r   r   r   r   rX   tupler   r>   r   )ct1ct2oldZcoeff1Zterms1Zcoeff2Zterms2r   Zcombinesr@   r?   	remainderremainder_powr)   r)   r*   _checkM  s8    


zPow._eval_subs.<locals>._checkF)as_Addr   r   )re   rO   rX   r:   r   subs__rpow__r   rr   r   r
   rd   is_Functionr   _subsrm   rD   rw   as_independentSymbolr   as_coeff_mulrG   appendrF   ri   Addis_Powr   r   )r   r   newrO   r@   r?   r:   r   r   lr   r   r   r   r   resultZoargZnew_lZo_alr   newaexpor)   r)   r*   
_eval_subsA  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   )rG   r   pr   )r   r@   r?   r)   r)   r*   r     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)rx   r  r:   ri   r   r   r   )r   r  r   r   expandedr)   r)   r*   _eval_adjoint  s    zPow._eval_adjointc                 C  s|   ddl m} | jj| jj }}|r2|| j| j S |rF| j|| j S |dkrn|dkrnt| }|| krn||S | jrx| S d S )Nr   )	conjugateF)rx   r  r:   ri   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	 }}|rV| j| j S |rj|| j| j S |dkr|dkrt
| }|| kr||S d S )Nr   )	transposeF)rx   r  r   r
   rd   r   r:   ri   r   rq   r   )r   r  r   r   r  r)   r)   r*   _eval_transpose  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rt fdd|jD  S  jrt|jdd	 d
d\}}|rt fdd|D   t|  S S )za**(n + m) -> a**n*a**mr   )Sum)ProductforceFc                   s   g | ]}  |qS r)   r   r   r0   r@   r   r)   r*   
<listcomp>  s     z.Pow._eval_expand_power_exp.<locals>.<listcomp>c                 S  s   | j S r   rE   r0   r)   r)   r*   <lambda>      z,Pow._eval_expand_power_exp.<locals>.<lambda>Tbinaryc                   s   g | ]}  |qS r)   r  r  r  r)   r*   r    s     )r   r:   r
   rd   sympy.concrete.summationsr  rX   rF   sympy.concrete.productsr	  r   functionlimitsrw   getr   _all_nonneg_or_nonpposr   rG   r   r   
_from_args)r   hintsr?   r  r	  r   ncr)   r  r*   _eval_expand_power_exp  s*    
zPow._eval_expand_power_expc                   sT   dd}j}j |js"S |jdd\}}|rfdd|D } jr jrbt|   }n"tdd |ddd D     }|r|t|   9 }|S |sjt|  dd	S t| g}t	|d
d dd\}}dd }	t	||	}
|
d }||
d 7 }|
d }|
t
j }|rt
j}t|d }|dkr0n|dkrF|| n~|dkr|rx|  }|t
jk	r|| n|t
j n>|r|  }|t
jk	r|| n|t
j || ~|sԈ jr|| | }|}n jrt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)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 )r3   r)   r!  r)   r)   r*   r  2  s     Nr3   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
   ry   r   r   r   )r0   polarr)   r)   r*   pred?  s    
z)Pow._eval_expand_power_base.<locals>.predrJ   r   r   r"   c                 S  s   | j o| jjo| jjS r   )r   r:   r   r   rk   r  r)   r)   r*   r    s   c                   s    g | ]} |j |j  qS r)   )r   rG   r   r@   r?   r   r)   r*   r    s     c                   s   g | ]}j | d dqS )Fr   r  r%  r&  r)   r*   r    s     )r  r   r:   rl   args_cncrj   r   r   r   r   r
   ry   lenr   popr_   r`   ri   AssertionErrorrm   extendr   )r   r  r
  r@   cargsr  r   r   Z
maybe_realr$  ZsiftedZnonnegnegimagIr   Znonnor'   Znpowr)   )r?   r  r   r*   r    s    
"













zPow._eval_expand_power_basec                   s2  | j \ }| }|jrX|jdkrX jrX|jst|j|j }|sH|S |  || g  }}|  |}|jrx|	 }t
|D ]}|||  qt
| S t|} jrg g  }}	 j D ] }
|
jr||
 q|	|
 q|rLt
|	 }t
| }|dkrt|| dd|| |  S t||d  dd}t|| dd|| |  S  jr  \}}
|jr|
jr|js|
js| |j|
j |}|j|
j |j|
j  }}
n | |j|}|j|j|
  }}
n.|
js| |
j|}||
j |
j }}
nd}t|t|
ddf\}}
}}|r|d@ rV|| |
|  |
| ||   }}|d8 }|| |
|
  d| |
  }}
|d }qtj}|dkr|||  S t|| || |  S |	}ddlm} ddlm} |t||}||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rt|j|jkrd|  | 	  S |jr* jr*|ddsЈ jdks| r*g g  }}|j D ],}|jr ||  | n
|| qt ||  t
!|g  S |S dS )zA(a + b + ..)**n -> a**n + n*a**(n-1)*b + .., n is nonzero integerr   r"   Fdeepr   )multinomial_coefficients)basic_from_dictc                   s    g | ]} j D ]}|| qqS r)   rG   r   r   g)r   r)   r*   r    s       z0Pow._eval_expand_multinomial.<locals>.<listcomp>c                   s    g | ]} j D ]}|| qqS r)   r5  r6  multir)   r*   r    s     c                   s   g | ]}|  qS r)   r)   )r   r   r8  r)   r*   r    s     r
  N)"rG   r   r   rw   rj   r   r   r   r   _eval_expand_multinomialr   	make_argsr   r$   rF   is_Orderr   r   rk   as_real_imagr
   ry   sympy.ntheory.multinomialr3  Zsympy.polys.polyutilsr4  r(  r8   rm   r  r   r  r   r  )r   r  r:   r   r'   radicalZexpanded_base_nr   Zorder_termsZother_termsr@   r   r0  r7  r   kr   rB   r/  r   r3  r4  Zexpansion_dictr   tailr)   )r   r9  r*   r:    s    




"



zPow._eval_expand_multinomialc                   sb  | j jrddlm} | j }| jj|d\}}|s<| tjfS tdt	d\ |dkr|j
r~|j
r~t| j| }|| kr~| S |  | }nj|d |d  }|| | |  }}|j
r|j
rt||tj  |  }|| kr| S |  |  }dd | D }	t fd	d|	D  }
d
d | D }	t fdd|	D  }dd | D }	t fdd|	D  }|
 |tj| i| ||i| || i fS ddlm}m}m} | j jr| jj|d\}}|jr*| j tj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rd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   )polyr1  za br   r"   c                 S  s    g | ]}|d  d d s|qS )r   r   r"   r)   r!  r)   r)   r*   r  .  s      z$Pow.as_real_imag.<locals>.<listcomp>c                   s(   g | ] \\}}}| |  |  qS r)   r)   r   aabbccr   r@   r)   r*   r  /  s    
 c                 S  s$   g | ]}|d  d d dkr|qS )r   r   rJ   r)   r!  r)   r)   r*   r  1  s      c                   s(   g | ] \\}}}| |  |  qS r)   r)   rC  rG  r)   r*   r  2  s    
 c                 S  s$   g | ]}|d  d d dkr|qS )r   r   rJ   r   r)   r!  r)   r)   r*   r  3  s      c                   s(   g | ] \\}}}| |  |  qS r)   r)   rC  rG  r)   r*   r  4  s    
 )atan2cossinr:   )rU   r   Fcomplexignore)!r:   rj   sympy.polys.polytoolsrB  r   r=  r
   ra   symbolsDummyrm   r   ry   termsr   r   (sympy.functions.elementary.trigonometricrH  rI  rJ  r   r   r   r   r   r   rd   rr   expandrx   rU   r   r  )r   r2  r  rB  r:   Zre_er   exprmagrA   Zre_partZim_part1Zim_part3rH  rI  rJ  r1   rptpr   r(   rU   r   r  r)   rG  r*   r=    sv    


$

"
zPow.as_real_imagc                 C  sF   ddl m} | j|}| j|}| ||| j || j | j   S r   )rr   r   r   diffr:   )r   r(   r   ZdbaseZdexpr)   r)   r*   _eval_derivativec  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   rK  Fr   )r   r
   rd   rr   r:   _eval_evalf_evalfrj   r   rk   r   r  r   rS  )r   precr   r:   Zexp_functionr)   r)   r*   rZ  i  s    


zPow._eval_evalfc                 C  sF   | j j| rdS | jj| r>t| j|o:| j jo:| j dkS dS d S )NFr   T)r:   hasr   r-   _eval_is_polynomialrj   r   symsr)   r)   r*   r^  x  s    zPow._eval_is_polynomialc                 C  s   | j jr,| jjr,tt| j j| jjgr,dS | j| 	  }|j
sF|jS |	 \}}|jrb|jrbdS |jr|jrt|js~|jrdS ||krdS n|jr|jS |tjkr|jr|jrdS d S )NTF)r:   ri   r   r   r   r   r   r   r   r   r   r   r   is_irrationalr
   rd   r   )r   r   r@   r?   r)   r)   r*   _eval_is_rational  s*    
zPow._eval_is_rationalc                 C  s6  dd }| j js|| j rdS | j tj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
rd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rd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#   )rT  r)   r)   r*   _is_one  s    z'Pow._eval_is_algebraic.<locals>._is_oneTF)r   r   r
   rd   r   rG   r:   r   is_algebraicrz   r   ry   r   r   ri   ra  )r   rc  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   )r:   r]  r   _eval_is_rational_functionrj   r_  r)   r)   r*   rf    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rd S |s|S | j||jS r"  )	r   _eval_is_meromorphicr:   rj   r   r   r   rb   r   )	r   r0   r   Z
base_meromZexp_integerZ	exp_meromr@   Zb_zeroZlog_definedr)   r)   r*   rg    s*    zPow._eval_is_meromorphicc                 C  s8   | j j| rdS | jj| r0| j|o.| j jS dS d S r   )r:   r]  r   _eval_is_algebraic_exprr   r_  r)   r)   r*   rh    s    zPow._eval_is_algebraic_exprc                 K  s   ddl m}m} |js*||s*||r2|| S |tr|tjr`tt	j
||| |tdS |||| |tdS n2ddlm}m} ||||t	j||  | S d S )Nr   r   r   )r   Abs)rr   r:   r   r   r]  r   r   
exp_is_powrD   r
   rd   rx   r   ri  ry   )r   r   r   kwargsr:   r   r   ri  r)   r)   r*   _eval_rewrite_as_exp  s    
zPow._eval_rewrite_as_expc                 C  s
  | j s| tjfS |  \}}| \}}|j}|j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 r   )rF   r
   r_   r   r   r   rl   r   rn   ri   r   is_nonpositiverq   r   )r   r   r:   r'   rB   neg_expZint_expZdnonposr)   r)   r*   r     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rd S | j|||}|d krt| ||S |S r   )r   r
   r_   r:   matchesra   rX   r   r   rh   rj   r   copyr   xreplace)	r   rT  	repl_dictr   rB   r@   r?   sbser)   r)   r*   ro  2  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||rd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 ||rd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st% 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   r   )limit)Ordersympify)r'   logxr   )powsimpTr:   )r2  combine)	powdenest)_illegal)r
  )r'   ry  cdir)Wildzc, ex)r~   exclude)	polygammar"   )
logcombinery  r~  ry  F)rS  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 r   )	r
   r_   ra   r   r;  r]  r   leadtermr#   )r   r0   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
   ra   )d1d2rese1e2r   Zmaxpowr)   r*   mul  s    $zPow._eval_nseries.<locals>.mul)	nsimplify)ceiling)	factorialffrU   r3   r<   )Hrr   r:   r   sympy.series.limitsru  sympy.series.orderrv  sympy.core.sympifyrx  r   r
   rd   nseriesr<  removeOr   r^   rangesympy.simplify.powsimprz  r|  numbersr}  trigsimpr   r]  r   _eval_nseriessymbolr  rO  replaceZ'sympy.functions.special.gamma_functionsr  
EulerGammar#   r  NotImplementedErrorrg   r]   r\   sympy.simplify.simplifyr  cancelr   rk   r   _eval_as_leading_termas_leading_termr_   r   r   is_Floatra   r  r   simplifyrS  r   r  r   r;  r  (sympy.functions.combinatorial.factorialsr  r  rx   rU   ri   dirrm  r   )3r   r0   r'   ry  r~  r:   r   ru  rv  rx  Ze_seriese0r1   Z
exp_seriesr   r   rz  r|  r}  r@   r?   r  r   r   r  _rC   r  r  r   r7  rA   r  r  rB   r  r  ZgpolyZgtermsZco1r  r@  rQ  Ztkr  r  r   rU   ndirZincoZinexr)   r  r*   r  T  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   r   r  FzCannot expand %s around 0r  r  r3   r<   )rr   r:   r   r   r
   rd   r  r   r]   ru  rq   r   r]  rx   rU   ri   r   r  r   r   r  )r   r0   ry  r~  r:   r   r?   r@   r   arg0ltrU   r   r  Zlog_leadtermr)   r)   r*   r    s8    




zPow._eval_as_leading_termc                 G  s$   ddl m} || j|| || S )Nr   )binomial)r  r  r:   r   )r   r'   r0   previous_termsr  r)   r)   r*   _taylor_term1  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   rw  r3   )r  )
r   r
   rd   supertaylor_termra   r_   rx  r  r  )r   r'   r0   r  rx  r   r  rc   r)   r*   r  6  s    zPow.taylor_termc                 C  sL   | j tjkrHddlm} |tj| j tjd  tj|tj| j   S d S )Nr   )rJ  r"   )r   r
   rd   rR  rJ  ry   r:   rz   )r   r   r:   rJ  r)   r)   r*   _eval_rewrite_as_sinF  s    zPow._eval_rewrite_as_sinc                 C  sL   | j tjkrHddlm} |tj| j tj|tj| j tjd    S d S )Nr   )rI  r"   )r   r
   rd   rR  rI  ry   r:   rz   )r   r   r:   rI  r)   r)   r*   _eval_rewrite_as_cosK  s    zPow._eval_rewrite_as_cosc                 C  s@   | j tjkr<ddlm} d|| jd  d|| jd   S d S )Nr   )tanhr   r"   )r   r
   rd   Z%sympy.functions.elementary.hyperbolicr  r:   )r   r   r:   r  r)   r)   r*   _eval_rewrite_as_tanhP  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
||st
||s|tj|  S d S )Nr   )rJ  rI  )rR  rJ  rI  r
   rd   rl   r   rz   ry   rk   rX   )	r   r   r:   rk  rJ  rI  r   ZcosineZsiner)   r)   r*   _eval_rewrite_as_sqrtU  s    

zPow._eval_rewrite_as_sqrtc              	   C  s>  |   \}}t|j||d }|j||d\}}|jr| \}}|jr|tjkr|| }	| ||	}
tj}|
jst|	j	|	j
\}}| ||}
|
| |t|||| |	j
  fS t||}|jr,|jr,|j||d\}}| || \}
}|  \}}|tj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)r   _keep_coeffas_content_primitiver   r   r
   ra   r   r>   r   r   rl   rv   r_   )r   r?  r  r@   r?   cepehr1   Zcehr   rA   ZicehrC   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rdS n|	d krd S |dS )Nr  Tr   F)r  r  r   equalsis_constant)
r   wrtflagsrT  r@   r?   Zbzr   ZeconZbconr)   r)   r*   r    s(    



zPow.is_constantc                 C  sF   | j \}}||rB||sB|||| }|||  d |  S d S r   )rG   r]  r   )r   r'   stepr@   r?   Znew_er)   r)   r*   _eval_difference_delta  s    
zPow._eval_difference_delta)N)r   )T)NF)r   )Nr   )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  r:  r=  rY  rZ  r^  rb  re  rf  rg  rh  rl  r   ro  r  r  r  r  r  r  r  r  r  r  r  __classcell__r)   r)   r  r*   rD      s   
Xb


	T8D1		 {z
S
'
%
#
"
 <
"

QrD   power)r   )r   )r   r  )r   rP  rO  N)H
__future__r   typingr   mathr   r7   r   r%   	itertoolsr   rx  r   cacher	   	singletonr
   rT  r   r   r   r  r   r   r   r   r   logicr   r   r   r   
parametersr   rW   r   r   r   r   r   sympy.external.gmpyr   r   sympy.utilities.iterablesr   sympy.utilities.exceptionsr   sympy.utilities.miscr   sympy.multipledispatchr    mpmath.libmpr!   r4   r+   r&   r.   r=   rD   r  addobjectr   r  r   r  r   r  r  r   rP  rO  r)   r)   r)   r*   <module>   sX   +*7              "