
    MZdƦ                        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mZmZmZ d dlmZmZ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! 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.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9  G d de      Z: G d de:      Z; G d de      Z< G d de:e<      Z=d Z> G d de      Z? G d  d!e      Z@ed"        ZAy#)$    )product)Tuple)Add)cacheit)Expr)FunctionArgumentIndexError
expand_log
expand_mulFunctionClass	PoleErrorexpand_multinomialexpand_complex)	fuzzy_and	fuzzy_notfuzzy_or)Mul)IntegerRationalpiIImaginaryUnit)global_parameters)Pow)S)WildDummy)sympify)	factorial)arg
unpolarifyimreAbs)sqrt)multiplicityperfect_power)	factorintc                       e Zd ZdZej
                  fZed        ZddZ	d Z
ed        Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zy)ExpBaseTc                 .    | j                   j                  S N)expkindselfs    H/usr/lib/python3/dist-packages/sympy/functions/elementary/exponential.pyr.   zExpBase.kind(   s    xx}}    c                     t         S )z=
        Returns the inverse function of ``exp(x)``.
        logr0   argindexs     r1   inversezExpBase.inverse,   	     
r2   c                     | j                   }|j                  }|s| j                  s|j                         }|r"t        j                  | j                  |       fS | t        j                  fS )a-  
        Returns this with a positive exponent as a 2-tuple (a fraction).

        Examples
        ========

        >>> from sympy import exp
        >>> from sympy.abc import x
        >>> exp(-x).as_numer_denom()
        (1, exp(x))
        >>> exp(x).as_numer_denom()
        (exp(x), 1)
        )r-   is_negativecould_extract_minus_signr   Onefunc)r0   r-   neg_exps      r1   as_numer_denomzExpBase.as_numer_denom2   s[      hh//11224G55$))SD/))QUU{r2   c                      | j                   d   S )z7
        Returns the exponent of the function.
        r   )argsr/   s    r1   r-   zExpBase.expJ   s    
 yy|r2   c                 H    | j                  d      t        | j                   fS )z7
        Returns the 2-tuple (base, exponent).
           )r>   r   rB   r/   s    r1   as_base_expzExpBase.as_base_expQ   s     yy|S$))_,,r2   c                 T    | j                  | j                  j                               S r,   )r>   r-   adjointr/   s    r1   _eval_adjointzExpBase._eval_adjointW   s    yy))+,,r2   c                 T    | j                  | j                  j                               S r,   )r>   r-   	conjugater/   s    r1   _eval_conjugatezExpBase._eval_conjugateZ       yy++-..r2   c                 T    | j                  | j                  j                               S r,   )r>   r-   	transposer/   s    r1   _eval_transposezExpBase._eval_transpose]   rL   r2   c                     | j                   }|j                  r|j                  ry|j                  ry|j                  ryy NTF)r-   is_infiniteis_extended_negativeis_extended_positive	is_finiter0   r    s     r1   _eval_is_finitezExpBase._eval_is_finite`   s9    hh??''''== r2   c                      | j                   | j                   }|j                   | j                   k(  r=|j                  j                  }|ry|j                  j                  rt        |      ryy y |j                  S rQ   )r>   rB   r-   is_zerois_rationalr   )r0   szs      r1   _eval_is_rationalzExpBase._eval_is_rationalj   sc    DIItyy!66TYYA""y| (4" == r2   c                 :    | j                   t        j                  u S r,   )r-   r   NegativeInfinityr/   s    r1   _eval_is_zerozExpBase._eval_is_zerou   s    xx1----r2   c                 l    | j                         \  }}t        j                  t        ||d      |      S )z;exp(arg)**e -> exp(arg*e) if assumptions allow it.
        Fevaluate)rE   r   _eval_power)r0   otherbes       r1   rd   zExpBase._eval_powerx   s0     !1s1a%8%@@r2   c                 d    ddl m} ddlm}  j                  d   }|j
                  r4|j                  r(t        j                   fd|j                  D              S t        ||      r8|j                  r, | j                  |j                        g|j                   S  j                  |      S )Nr   )Product)Sumc              3   @   K   | ]  }j                  |        y wr,   )r>   ).0xr0   s     r1   	<genexpr>z1ExpBase._eval_expand_power_exp.<locals>.<genexpr>   s     ?		!?s   )sympy.concrete.productsri   sympy.concrete.summationsrj   rB   is_Addis_commutativer   fromiter
isinstancer>   functionlimits)r0   hintsri   rj   r    s   `    r1   _eval_expand_power_expzExpBase._eval_expand_power_exp~   s    31iil::#,,<<?chh???S!c&8&8499S\\2@SZZ@@yy~r2   NrD   )__name__
__module____qualname__
unbranchedr   ComplexInfinity_singularitiespropertyr.   r8   r@   r-   rE   rH   rK   rO   rW   r]   r`   rd   rx    r2   r1   r*   r*   #   ss    J'')N 0  --//	!.Ar2   r*   c                   6    e Zd ZdZdZdZd Zd Zd Zd Z	d Z
y	)
	exp_polara<  
    Represent a *polar number* (see g-function Sphinx documentation).

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

    ``exp_polar`` represents the function
    `Exp: \mathbb{C} \rightarrow \mathcal{S}`, sending the complex number
    `z = a + bi` to the polar number `r = exp(a), \theta = b`. It is one of
    the main functions to construct polar numbers.

    Examples
    ========

    >>> from sympy import exp_polar, pi, I, exp

    The main difference is that polar numbers do not "wrap around" at `2 \pi`:

    >>> exp(2*pi*I)
    1
    >>> exp_polar(2*pi*I)
    exp_polar(2*I*pi)

    apart from that they behave mostly like classical complex numbers:

    >>> exp_polar(2)*exp_polar(3)
    exp_polar(5)

    See Also
    ========

    sympy.simplify.powsimp.powsimp
    polar_lift
    periodic_argument
    principal_branch
    TFc                 D    t        t        | j                  d               S Nr   )r-   r#   rB   r/   s    r1   	_eval_Abszexp_polar._eval_Abs   s    2diil#$$r2   c                    t        | j                  d         }	 |t         k  xs	 |t        kD  }|r| S t	        | j                  d         j                  |      }|dkD  rt        |      dk  rt        |      S |S # t        $ r d}Y Xw xY w)z. Careful! any evalf of polar numbers is flaky r   T)r"   rB   r   	TypeErrorr-   _eval_evalfr#   )r0   precibadress        r1   r   zexp_polar._eval_evalf   s    tyy|	8%q2vC K$))A,++D1q5RWq[c7N
  	C	s   A: :BBc                 D    | j                  | j                  d   |z        S r   )r>   rB   )r0   re   s     r1   rd   zexp_polar._eval_power   s    yy1e+,,r2   c                 8    | j                   d   j                  ryy )Nr   T)rB   is_extended_realr/   s    r1   _eval_is_extended_realz exp_polar._eval_is_extended_real   s    99Q<(( )r2   c                 t    | j                   d   dk(  r| t        j                  fS t        j	                  |       S r   )rB   r   r=   r*   rE   r/   s    r1   rE   zexp_polar.as_base_exp   s1    99Q<1;""4((r2   N)rz   r{   r|   __doc__is_polaris_comparabler   r   rd   r   rE   r   r2   r1   r   r      s-    #J HM%-)r2   r   c                       e Zd Zd Zy)ExpMetac                     t         |j                  j                  v ryt        |t              xr |j
                  t        j                  u S )NT)r-   	__class____mro__rt   r   baser   Exp1)clsinstances     r1   __instancecheck__zExpMeta.__instancecheck__   s8    ($$,,,(C(DX]]aff-DDr2   N)rz   r{   r|   r   r   r2   r1   r   r      s    Er2   r   c                       e Zd ZdZddZd Zed        Zed        Z	e
ed               ZddZd Zd	 Zd
 Zd Zd ZddZd ZddZd Zd Zd Zd Zd Zy)r-   a9  
    The exponential function, :math:`e^x`.

    Examples
    ========

    >>> from sympy import exp, I, pi
    >>> from sympy.abc import x
    >>> exp(x)
    exp(x)
    >>> exp(x).diff(x)
    exp(x)
    >>> exp(I*pi)
    -1

    Parameters
    ==========

    arg : Expr

    See Also
    ========

    log
    c                 (    |dk(  r| S t        | |      )z@
        Returns the first derivative of this function.
        rD   )r	   r6   s     r1   fdiffz	exp.fdiff   s     q=K$T844r2   c                 v   ddl m}m} | j                  d   }|j                  rt
        t        j                  z  }||| fv rt        j                  S  |j                  t        t
        z        }|r ||j                  d|z              r ||j                  |            rt        j                  S  ||j                  |            rt        j                  S  ||j                  |t        j                   z               rt
         S  ||j                  |t        j                   z               rt
        S y y y y )Nr   )askQ   )sympy.assumptionsr   r   rB   is_Mulr   r   InfinityNaNas_coefficientr   integerevenr=   oddNegativeOneHalf)r0   assumptionsr   r   r    Ioocoeffs          r1   _eval_refinezexp._eval_refine   s    ,iil::AJJ,CsSDk!uu&C&&r!t,Eqyy5)*166%=) uuQUU5\* }},QVVEAFFN34 !r	QUU5166>23  4 +  r2   c                 	   ddl m} ddlm} ddlm} ddlm} t        ||      r |j                         S t        j                  rt        t        j                  |      S |j                  r|t        j                   u rt        j                   S |j"                  rt        j$                  S |t        j$                  u rt        j                  S |t        j&                  u rt        j&                  S |t        j(                  u rt        j*                  S |t        j,                  u rt        j                   S t        |t.              r|j0                  d   S t        ||      r/ |t        |j2                        t        |j4                              S t        ||      r |j6                  |       S |j8                  rP |j:                  t<        t>        z        }|rd|z  j@                  r|jB                  rt        j$                  S |jD                  rt        jF                  S |t        jH                  z   jB                  rt>         S |t        jH                  z   jD                  r<t>        S |jJ                  r*|dz  }|dkD  r|dz  }||k7  r | |t<        z  t>        z        S  |jL                         \  }}|t        j(                  t        j&                  fv r|jN                  r|t        j(                  u r| }tQ        |      j"                  r"|t        j*                  urt        j                   S tQ        |      jR                  r+tU        |      t        j*                  urt        j,                  S tQ        |      jV                  rt        j*                  S y |gd }
}	tY        jZ                  |      D ]M  } ||      }t        |t.              r|
|j0                  d   }
- y |j\                  r|	j_                  |       M y  |
r|
tY        |	 z  S d S |j`                  rg }g }d}|j0                  D ]  }|t        j$                  u r|j_                  |       ' | |      }t        ||       rE|j0                  d   |k7  r!|j_                  |j0                  d          d	}n|j_                  |       |j_                  |        |s|rtY        |  | tc        | d
      z  S |j"                  rt        j$                  S y )Nr   AccumBounds)
MatrixBaseSetExpr
logcombiner   rD   FTrb   )2sympy.calculusr   sympy.matrices.matricesr   sympy.sets.setexprr   sympy.simplify.simplifyr   rt   r-   r   
exp_is_powr   r   r   	is_Numberr   rY   r=   r   r_   Zeror~   r5   rB   minmax
_eval_funcr   r   r   r   
is_integeris_evenis_oddr   r   is_Rationalas_coeff_Mul	is_numberr#   is_positiver"   r;   r   	make_argsr   appendrq   r   )r   r    r   r   r   r   r   ncoefftermscoeffslog_termtermterm_outadd
argchangedanewas                     r1   evalzexp.eval  s   .6.6c:&3779))qvvs##]]aee|uuuuvv

"zz!***vvA%%%55LS!88A;[)s377|S\::W%!3>>#&&ZZ&C&&r!t,EeG''}} uu }},!&&.11 !r	!&&.00 &&"QYFz!"6"9Q;// ,3++-LE5 ++QZZ88?? 2 22!&%y((U!&&-@ uu%y,,E!&&1H 000%y,, vv %wHFe, 
 "4(eS)'#(::a=#''MM$'
  .68S&\)?4?ZZCCJXX %:JJqM1vdC(yy|q(

499Q<0%)


1JJt$% jCyS#Y!???;;55L r2   c                 "    t         j                  S )z?
        Returns the base of the exponential function.
        )r   r   r/   s    r1   r   zexp.base{  s    
 vvr2   c                     | dk  rt         j                  S | dk(  rt         j                  S t        |      }|r|d   }|||z  | z  S || z  t	        |       z  S )zJ
        Calculates the next term in the Taylor series expansion.
        r   )r   r   r=   r   r   )nrm   previous_termsps       r1   taylor_termzexp.taylor_term  s`     q566M655LAJr"A}1uqy !tIaL  r2   c                     ddl m}m} | j                  d   j	                         \  }}|r& |j
                  |fi |} |j
                  |fi |} ||       ||      }}t        |      |z  t        |      |z  fS )aJ  
        Returns this function as a 2-tuple representing a complex number.

        Examples
        ========

        >>> from sympy import exp, I
        >>> from sympy.abc import x
        >>> exp(x).as_real_imag()
        (exp(re(x))*cos(im(x)), exp(re(x))*sin(im(x)))
        >>> exp(1).as_real_imag()
        (E, 0)
        >>> exp(I).as_real_imag()
        (cos(1), sin(1))
        >>> exp(1+I).as_real_imag()
        (E*cos(1), E*sin(1))

        See Also
        ========

        sympy.functions.elementary.complexes.re
        sympy.functions.elementary.complexes.im
        r   )cossin)(sympy.functions.elementary.trigonometricr   r   rB   as_real_imagexpandr-   )r0   deeprw   r   r   r#   r"   s          r1   r   zexp.as_real_imag  s{    0 	F1**,B4)5)B4)5)Br7CGSBSWS[))r2   c                    |j                   r,t        |j                  t        |j                        z        }n$|t        j
                  u r|j                  rt        }t        |t              s|t        j
                  u r&d }t        j                   ||        ||      |      S |t        u r+|j                  s|| j                  j                  ||      z  S t        j                  | ||      S )Nc                 p    | j                   st        | t              rt        | j	                         ddiS | S )Nrc   F)is_Powrt   r-   r   rE   )r   s    r1   <lambda>z exp._eval_subs.<locals>.<lambda>  s1    Jq#. q}}?? 56 r2   )r   r-   r5   r   r   r   is_Functionrt   r   
_eval_subs_subsr   )r0   oldnewfs       r1   r   zexp._eval_subs  s    ::cggc#((m+,CAFF]sCc33!&&=7A>>!D'1S6377#:coosC000""4c22r2   c                     | j                   d   j                  ry| j                   d   j                  r6t        d       t        z  | j                   d   z  t
        z  }|j                  S y )Nr   Tr   )rB   r   is_imaginaryr   r   r   r   r0   arg2s     r1   r   zexp._eval_is_extended_real  sW    99Q<((YYq\&&aD519tyy|+b0D<< 'r2   c                 D    d }t         || j                  d               S )Nc              3   D   K   | j                    | j                   y wr,   )
is_complexrS   )r    s    r1   complex_extended_negativez7exp._eval_is_complex.<locals>.complex_extended_negative  s     .. ***s    r   )r   rB   )r0   r   s     r1   _eval_is_complexzexp._eval_is_complex  s"    	+ 1$))A,?@@r2   c                     | j                   t        z  t        z  j                  ryt	        | j                   j
                        r6| j                   j                  ry| j                   t        z  j                  ryy y rQ   )r-   r   r   rZ   r   rY   is_algebraicr/   s    r1   _eval_is_algebraiczexp._eval_is_algebraic  s[    HHrMA**TXX%%&xx$$((R-,, - 'r2   c                     | j                   j                  r| j                  d   t        j                  uS | j                   j
                  r*t         | j                  d   z  t        z  }|j                  S y r   )	r-   r   rB   r   r_   r   r   r   r   r   s     r1   _eval_is_extended_positivezexp._eval_is_extended_positive  s]    88$$99Q<q'9'999XX""2		!$r)D<< #r2   c                 F   ddl m ddlm} ddlm} ddlm} ddlm	} | j                  }	 |	j                  |||      }
|
j                  rd|
z   S  ||
j                         |d      }|t        j                  u r |||z  |      S |t        j                   u r| S t#        fd	|j$                  D              r| S t'        d
      }|}	  | |	j(                  ||      |      j+                         }|r|dkD  r |||z        }t        |      j1                  ||      }t        |      |j3                  ||
|z
        z  }||t5        |      ini }|j3                  |      | k(  r|S |r$|dkD  r| ||
|z
  |z  |      ||dz
  |z  z  z  z  }n| ||
|z
  |z  |      z  }|j7                         } ||dd      }d }t9        d|g      }|j;                  t        j<                  |z  t?        t        j<                  |z              }|S # t,        t.        f$ r d}Y ,w xY w)Nr   )signceiling)limitOrderpowsimpr   logxrD   c              3   B   K   | ]  }t        |t        f        y wr,   )rt   r   )rl   r    r  s     r1   rn   z$exp._eval_nseries.<locals>.<genexpr>  s     K#z#m45Ks   tr  Tr-   r   combinec                 :    | j                   xr | j                  dv S )N)         )r   q)rm   s    r1   r   z#exp._eval_nseries.<locals>.<lambda>  s    amm@y0@ r2   w)
properties) $sympy.functions.elementary.complexesr  #sympy.functions.elementary.integersr  sympy.series.limitsr  sympy.series.orderr  sympy.simplify.powsimpr
  r-   _eval_nseriesis_OrderremoveOr   r_   r   anyrB   r   as_leading_termgetnNotImplementedErrorr   _taylorsubsr5   r   r   replacer   r   )r0   rm   r   r  cdirr  r  r  r
  r    
arg_seriesarg0r  ntermscf
exp_seriesrrep	simpleratr  r  s                       @r1   r  zexp._eval_nseries  s    	>?-,2hh&S&&qAD9
z>!Z'')1a01%%%Aq>!1::KKKKK#J	*s**148!<AACB "q&QrT]FV^^Av.
Ijooad):;; $ 0tSVnb66#;$H"q&
T)A-q1!r!tQh-??A
T)A-q11AHHJAD%0@	)-IIammQ&q}}a7G(HI' $Y/ 	B	s   
)H H H c                     g }d }t        |      D ]T  }| j                  || j                  d   |      }|j                  ||      }|j	                  |j                                V t        | S )Nr   )r   )ranger   rB   nseriesr   r   r   )r0   rm   r   lgr   s         r1   r%  zexp._taylor  sj    q 	"A  DIIaL!4A		!q	!AHHQYY[!	" Awr2   Nc                    ddl m} | j                  d   j                         j	                  ||      } |j
                  |d      }|t        j                  u rt        j                  S t        ||      r3t        |      t        j                  k  rt        |       S t        |      S |t        j                  u r |j                  |d      }|j                  du rt        |      S t        d| z        )Nr   r   r  FCannot expand %s around 0)sympy.calculus.utilr   rB   cancelr"  r&  r   r   rt   r#   r   r-   r  rR   r   )r0   rm   r  r(  r   r    r*  s          r1   _eval_as_leading_termzexp._eval_as_leading_term  s    3iil!!#33AD3Asxx1~!%%<55LdK( $x!&& D5z!t9155=399Q?Du$t93t<==r2   c                 n    ddl m}  |t        |z  t        dz  z         t         |t        |z        z  z
  S )Nr   )r   r   )r   r   r   r   )r0   r    kwargsr   s       r1   _eval_rewrite_as_sinzexp._eval_rewrite_as_sin*  s-    @1S52a4< 1S3Z<//r2   c                 n    ddl m}  |t        |z        t         |t        |z  t        dz  z         z  z   S )Nr   )r   r   )r   r   r   r   )r0   r    r<  r   s       r1   _eval_rewrite_as_coszexp._eval_rewrite_as_cos.  s.    @1S5zAc!C%"Q$,////r2   c                 H    ddl m} d ||dz        z   d ||dz        z
  z  S )Nr   )tanhrD   r   )%sympy.functions.elementary.hyperbolicrA  )r0   r    r<  rA  s       r1   _eval_rewrite_as_tanhzexp._eval_rewrite_as_tanh2  s(    >DQK!d3q5k/22r2   c                    ddl m}m} |j                  rq |j                  t
        t        z        }|rQ|j                  rD |t
        |z         |t
        |z        }}t        ||      st        ||      s|t        |z  z   S y y y y y )Nr   )r   r   )	r   r   r   r   r   r   r   r   rt   )r0   r    r<  r   r   r   cosinesines           r1   _eval_rewrite_as_sqrtzexp._eval_rewrite_as_sqrt6  sw    E::CIIbdOE"2e8}c"U(m!&#.z47M!AdF?* 8N. )u r2   c                    |j                   ru|j                  D cg c].  }t        |t              st	        |j                        dk(  s-|0 }}|r/t        |d   j                  d    |j                  |d               S y y c c}w NrD   r   )r   rB   rt   r5   lenr   r   )r0   r    r<  r   logss        r1   _eval_rewrite_as_Powzexp._eval_rewrite_as_Pow?  sq    ::"xxS!:a+=#aff+QRBRASDS47<<?ICIId1g,>??  Ss   BB
Bry   Tr   r   )rz   r{   r|   r   r   r   classmethodr   r   r   staticmethodr   r   r   r   r   r   r   r  r  r%  r:  r=  r?  rC  rG  rL  r   r2   r1   r-   r-      s    45!( g gR   !  !*@3 A +Z>*003+@r2   r-   )	metaclassc                     | j                  t        d      \  }}|dk(  r|j                  r||fS |j                  t              }|r|j                  r|j                  r||fS y)a  
    Try to match expr with $a + Ib$ for real $a$ and $b$.

    ``match_real_imag`` returns a tuple containing the real and imaginary
    parts of expr or ``(None, None)`` if direct matching is not possible. Contrary
    to :func:`~.re()`, :func:`~.im()``, and ``as_real_imag()``, this helper will not force things
    by returning expressions themselves containing ``re()`` or ``im()`` and it
    does not expand its argument either.

    Tas_Addr   )NN)as_independentr   is_realr   )exprr_i_s      r1   match_real_imagrZ  F  s^       4 0FB	Qw2::Bx			1	B	bjjRZZBxr2   c                       e Zd ZU dZee   ed<   ej                  ej                  fZ
ddZddZedd       Zd Zeed               Zdd	Zd
 ZddZd Zd Zd Zd Zd Zd Zd Zd ZddZddZy)r5   a  
    The natural logarithm function `\ln(x)` or `\log(x)`.

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

    Logarithms are taken with the natural base, `e`. To get
    a logarithm of a different base ``b``, use ``log(x, b)``,
    which is essentially short-hand for ``log(x)/log(b)``.

    ``log`` represents the principal branch of the natural
    logarithm. As such it has a branch cut along the negative
    real axis and returns values having a complex argument in
    `(-\pi, \pi]`.

    Examples
    ========

    >>> from sympy import log, sqrt, S, I
    >>> log(8, 2)
    3
    >>> log(S(8)/3, 2)
    -log(3)/log(2) + 3
    >>> log(-1 + I*sqrt(3))
    log(2) + 2*I*pi/3

    See Also
    ========

    exp

    rB   c                 H    |dk(  rd| j                   d   z  S t        | |      )z?
        Returns the first derivative of the function.
        rD   r   )rB   r	   r6   s     r1   r   z	log.fdiff  s*     q=TYYq\>!$T844r2   c                     t         S )zC
        Returns `e^x`, the inverse function of `\log(x)`.
        )r-   r6   s     r1   r8   zlog.inverse  r9   r2   Nc                    ddl m} ddlm} t	        |      }|{t	        |      }|dk(  r%|dk(  rt
        j                  S t
        j                  S 	 t        ||      }|r |t        |||z  z        t        |      z  z   S t        |      t        |      z  S |j                  r|j                  rt
        j                  S |t
        j                  u rt
        j                  S |t
        j                   u rt
        j                   S |t
        j"                  u rt
        j                   S |t
        j                  u rt
        j                  S |j$                  r"|j&                  dk(  r | |j(                         S |j*                  r>|j,                  t
        j                  u r"|j.                  j0                  r|j.                  S t3        |t.              r"|j.                  j0                  r|j.                  S t3        |t.              rv|j.                  j4                  r`t7        |j.                        \  }}|r)|j8                  r|dt:        z  z  }|t:        kD  r|dt:        z  z  }|t=        |t>        z  d      z   S t3        |t@              rtC        |j.                        S t3        ||      r|jD                  jF                  r/ |t        |jD                        t        |jH                              S |jD                  j                  r* |t
        j"                  t        |jH                              S t
        j                  S t3        ||      r |jJ                  |       S |j4                  rg|jL                  rt:        t>        z   | |       z   S |t
        j                  u rt
        j                  S |t
        j                  u rt
        j                  S |j                  rt
        j                  S |jN                  s |jP                  t>              }||t
        j                   u rt
        j                   S |t
        j"                  u rt
        j                   S |j$                  r\|jR                  r't:        t>        z  t
        jT                  z   | |      z   S t:         t>        z  t
        jT                  z   | |       z   S |j4                  r|jV                  r |jX                  t>        d      \  }}	|jL                  r
|d	z  }|	d	z  }	t=        |	d      }	|	jY                  t>        d
      \  }}|jQ                  t>              }|jZ                  r{|rw|jZ                  ri|jZ                  r[|j                  ro|jF                  r*t:        t>        z  t
        jT                  z   | ||z        z   S |jL                  r,t:         t>        z  t
        jT                  z   | || z        z   S y ddl.m/}
 ||z  ja                         }| ja                         }tc               }||v rQ |
|te        |	      z        }|jF                  r | |      t>        ||   z  z   S  | |      t>        ||   t:        z
  z  z   S ||v rR |
|te        |	      z        }|jF                  r | |      t>        ||    z  z   S  | |      t>        t:        ||   z
  z  z   S y y y y y y y # t        $ r Y nw xY w|t
        j                  ur | |       | |      z  S  | |      S )Nr   r   r   rD   r   Fr   rS  r   T)ratsimp)3r   r   r   r   r   r   r   r~   r&   r5   
ValueErrorr   r   rY   r=   r   r   r_   r   r   r  r   r   r-   r   rt   r   rZ  r   r   r   r   r   r!   r   r   r   r   r;   rq   r   is_nonnegativer   r   rU  rV  sympy.simplifyr`  r9  _log_atan_tabler$   )r   r    r   r   r   r   rX  rY  r   arg_r`  r  t1
atan_tablemoduluss                  r1   r   zlog.eval  s   ..cl4=Dqy!855L,,,	 !s+s3q=1CI===s8CI-- =={{(((vv

"zz!***zz!uuSUUaZCEE
{"::#((aff,1I1I77Nc3CGG$<$<77NS!cgg&7&7$SWW-FBb&&ad
7!B$JBJrAvE:::Y'cgg&&[)ww"""3sww<SWW>>"1#5#5s377|DDuuW%!3>>#&&==AvSD	)))))(((uu;;$$$ zz&C&&q)E AJJ&::%a000::%&&++!AvU;; "sQw/#uf+====S--,#,,Qu=KE4  
d/D((4(8FB""1%B}}

rzz::~~!AvURZ@@ "sQw/#erck2BBB ( 7B(A"B!0!2JJ")%#d)*;"<>>#&w<!jm2C#CC#&w<!z!}r7I2J#JJz)")%#d)*;"<>>#&w<!
22G#GG#&w<!rJrN7J2K#KK *% 8B
} .=M  166!3xD	))3xs   -[
 >[
 
	[[c                 &    | t         j                  fS )zE
        Returns this function in the form (base, exponent).
        )r   r=   r/   s    r1   rE   zlog.as_base_exp  s     QUU{r2   c                     ddl m} | dk  rt        j                  S t	        |      }| dk(  r|S |r|d   }| ||  |z  |z  | dz   z  dd      S dd| dz  z  z
  || dz   z  z  | dz   z  S )	zV
        Returns the next term in the Taylor series expansion of `\log(1+x)`.
        r   r	  r   rD   Tr-   r  r   )r  r
  r   r   r   )r   rm   r   r
  r   s        r1   r   zlog.taylor_term  s     	3q566MAJ6Hr"A}ax!|q1u5D%PPAq1uIQU+QU33r2   c                 0   ddl m}m} |j                  dd      }|j                  dd      }t	        | j
                        dk(  r%t         | j                  | j
                   ||      S | j
                  d   }|j                  rpt        |      }d }	d}
|dur|\  }}
| j                  |      }	|r=t        |      }||j                         vr t        d	 |j                         D              }	|	|
|	z  S |j                  r+t        |j                         t        |j"                        z
  S |j$                  rg }g }|j
                  D ]  }|s|j&                  s|j(                  rd| j                  |      }t+        |t              r1|j-                   | j                  |      j.                  d
i |       o|j-                  |       |j0                  rC| j                  |       }|j-                  |       |j-                  t2        j4                         |j-                  |        t7        | t        t9        |       z   S |j:                  st+        |t<              r|st|j<                  j>                  rH|j@                  j&                  sH|j<                  dz   j&                  r|j<                  dz
  jB                  s|j@                  j(                  r|j@                  }|j<                  }| j                  |      }t+        |t              rtE        |       |j.                  d
i |z  S tE        |      |z  S t+        ||      r>|s|jF                  j&                  r& |t        |jF                        g|jH                   S | j                  |      S )Nr   )rj   ri   forceFfactorr   )r   rl  rD   c              3   >   K   | ]  \  }}|t        |      z    y wr,   r4   )rl   valr   s      r1   rn   z'log._eval_expand_log.<locals>.<genexpr>9  s      DQ3s8 Ds   r   )%sympy.concreterj   ri   getrJ  rB   r
   r>   
is_Integerr'   r(   keyssumitemsr   r5   r   r  r   r   r   rt   r   _eval_expand_logr;   r   r   r   r   r   r-   r   r   is_nonpositiver!   ru   rv   )r0   r   rw   rj   ri   rl  rm  r    r   logargr   rW  nonposrm   r   rf   rg   s                    r1   rv  zlog._eval_expand_log&  s   /		'5)8U+		Naidii3$eLLiil>>c"AFE~
U3cNaffh&  D!'') DDF!V|#__suu:CEE
**ZZDFXX %AMMQZZ		!A!!S)$ADIIaL$A$A$JE$JKA]]		1"AKKNMM!--0MM!$% :CL 111ZZ:c3/11sxx7K7KQTQXQXYZQZQ"%''!)!;!;#((BSBSHHGGIIaLa%%a=+=1+=+=+F+FFF%a=1,,W%003s||,:szz::yy~r2   c                 "   ddl m}m}m} t	        | j
                        dk(  r  | | j                  | j
                   fi |S | j                   || j
                  d   fi |      }|d   r ||      } ||d      }t        || g|d         S )	Nr   )r
   simplifyinversecombiner   r8   Tr_  measure)key)r   r
   r{  r|  rJ  rB   r>   r   )r0   r<  r
   r{  r|  rW  s         r1   _eval_simplifyzlog._eval_simplify_  s    PPtyy>QIDIItyy1<V<<yy$))A,9&9:)!$'D$T*D$<VI%677r2   c                 B   | j                   d   }|r  | j                   d   j                  |fi |}t        |      }||k(  r| t        j                  fS t        |      }|j                  dd      r#d|d<    t        |      j                  |fi ||fS t        |      |fS )a  
        Returns this function as a complex coordinate.

        Examples
        ========

        >>> from sympy import I, log
        >>> from sympy.abc import x
        >>> log(x).as_real_imag()
        (log(Abs(x)), arg(x))
        >>> log(I).as_real_imag()
        (0, pi/2)
        >>> log(1 + I).as_real_imag()
        (log(sqrt(2)), pi/4)
        >>> log(I*x).as_real_imag()
        (log(Abs(x)), arg(I*x))

        r   r5   Fcomplex)rB   r   r$   r   r   r    rq  r5   )r0   r   rw   sargsarg_abssarg_args         r1   r   zlog.as_real_imagj  s    & yy|&499Q<&&t5u5Dt9t<t999UE"$E)(CM((77BBx=(**r2   c                 :    | j                   | j                   }|j                   | j                   k(  r^| j                  d   dz
  j                  ry|j                  d   j                  r't	        | j                  d   dz
  j                        ryy y |j                  S Nr   rD   TF)r>   rB   rY   rZ   r   r0   r[   s     r1   r]   zlog._eval_is_rational  s    DIItyy!66TYY		!q ))vvay$$DIIaL14D3M3M)N *O$ == r2   c                 :    | j                   | j                   }|j                   | j                   k(  r^| j                  d   dz
  j                  ryt        | j                  d   dz
  j                        r| j                  d   j                  ryy y |j                  S r  )r>   rB   rY   r   r   r  s     r1   r   zlog._eval_is_algebraic  s    DIItyy!66TYY		!q ))DIIaL1,55699Q<,,  - 7 >>!r2   c                 4    | j                   d   j                  S r   rB   rT   r/   s    r1   r   zlog._eval_is_extended_real  s    yy|000r2   c                 t    | j                   d   }t        |j                  t        |j                        g      S r   )rB   r   r   r   rY   )r0   r\   s     r1   r   zlog._eval_is_complex  s,    IIaL!,,	!))(<=>>r2   c                 R    | j                   d   }|j                  ry|j                  S Nr   F)rB   rY   rU   rV   s     r1   rW   zlog._eval_is_finite  s#    iil;;}}r2   c                 :    | j                   d   dz
  j                  S Nr   rD   r  r/   s    r1   r  zlog._eval_is_extended_positive  s    		!q 666r2   c                 :    | j                   d   dz
  j                  S r  )rB   rY   r/   s    r1   r`   zlog._eval_is_zero  s    		!q )))r2   c                 :    | j                   d   dz
  j                  S r  )rB   is_extended_nonnegativer/   s    r1   _eval_is_extended_nonnegativez!log._eval_is_extended_nonnegative  s    		!q 999r2   c           
      :
   ddl m} ddlm} ddlm} | j                  d   |k(  r|t        |      S |S | j                  d   } |dd      }	|dk(  rd} |j                  |||	z        }
t        d	      t        d
      }}|
j                  ||	|z  z        }|e||   ||   }}|dk7  rV|j                  |	      sE|j                  |	      s4||t        |      z  n||z  }|t        |      |t        |      z  z
  z  }|S d }	 |
j                  |	|d      \  }}|
||	|z  z  z  dz
  j!                  |	|d      }|j                  t,              r ||      }t/        ||      r|j1                          |||	      \  }}|t        |      n|}|j2                  st        |      |t        |      z  z
  ||z  z   }|}dddddddddd	} | j4                  di |}|j7                         s>|j7                         r. |j                  | t        |             j4                  di |}n+ |j                  |t        |            j4                  di |}||k(  r|S | ||z  |      z   S fd}i }t9        j:                  |j%                               D ]4  } |||	      \  }}|j=                  |t(        j*                        |z   ||<   6 t(        j>                  }i }|}||z  k  rt(        j@                  |z   |z  } |D ]>  }!|j=                  |!t(        j*                        | ||!   z  z   }|jC                         ||!<   @  |||      }|t(        j>                  z  }||z  k  rt        |      |t        |      z  z
  ||z  z   }|D ]  }!|||!   |	|!z  z  z  } |jD                  rtG        |
      dk7  r{ddl$m%}" tM        |
jO                  |	            D ]  \  }#}|jP                  r|#dk(  s n #dk  r;jS                  |	      \  } }|dtT        z  tV        z   |"tG        |        d      z  z  }|j                  |	||z        }| ||z  |      z   S # t        t        t        f$ r |
j!                  |	|d      }|j"                  r'dz  |
j!                  |	|d      }|j"                  r'	 |j%                         j                  |	d      \  }}n@# t        $ r4 |j%                         j'                  |	d      t(        j*                  }}Y nw xY wY w xY w)Nr   r  r   )r   r  TpositiverD   kr4  c                 J   t         j                  t         j                  }}t        j                  |       D ]E  }|j                  |      r-|j                         \  }}||k7  s-	 | j                  |      c S ||z  }G ||fS # t        $ r | t         j                  fcY c S w xY wr,   )	r   r=   r   r   r   hasrE   leadtermra  )r   rm   r   r-   rm  r   s         r1   	coeff_expz$log._eval_nseries.<locals>.coeff_exp  s    3E--- 	$::a= & 2 2 4ID#qy0#'==#33 VOE	$ #:	  * 0#'</0s   $BB"!B"r  r(  )r   r  r(  )r(  F)	r   r5   mul	power_exp
power_basemultinomialbasicrl  rm  c                     i }t        | |      D ]?  \  }}||z   }|k  s|j                  |t        j                        | |   ||   z  z   ||<   A |S r,   )r   rq  r   r   )d1d2r   e1e2exr   s         r1   r  zlog._eval_nseries.<locals>.mul   sc    C!"b/ BB"W6!ggb!&&1BrF2b6MACGB Jr2   	Heaviside   r   ),r  r  r   r   sympy.core.symbolr   rB   r5   r&  r   matchr  r  ra  r$  r   r  r  r   r"  r   r   r-   rt   r#  r   r   r<   r   r   rq  r=   r   	nsimplifyr;   r"   'sympy.functions.special.delta_functionsr  	enumeratelseriesrV  as_coeff_exponentr   r   )$r0   rm   r   r  r(  r  r   r   r    r  r\   r  r4  r.  r  r   rf   r[   r   _dr   _reslogflagsrW  r  ptermsr   co1r  r   pkr   r  r  r   s$     `                                 r1   r  zlog._eval_nseries  s    	-6+99Q<1!\3q63t3iil#%19DCHHQQCy$s)1GGAadFO=Q41qAAvaeeAhquuQx $Ac!fH!D&SVaD	k))	
	F::ad:3DAq !Q$Z!^**11*E55:1AaAA1s1v4}}a&1SY;&4/CD $T%e#EETX!H 4;;**D..0--/7tyy$Q077C(C5tyys1v.55AAt|
q!tQ''	 MM!))+. 	6Da(GCB/#5F2J	6 EEcAg]]A%%a'E *IIb!&&)E"R&L8KKMb	* RBJA cAg !fqT{"QtV+ 	%B59QW$$C	% ==RUaZI$QYYq\2 4||qAv 1u11!4qr!tBwy"U)Q777hhq!D&!U1a4^##U /; 	FQT:A**QOOAAO> **Fyy{++AA+61 Fyy{22112=qvv1F	Fs7   Q AT1$ST:TTTTTc                    | j                   d   j                         }t        dd      }|dk(  rd}|j                  |||z        }	 |j	                  ||d      \  }}|j                  |      r3|j                  |||z        }|dk7  rt        d| z        t        |      S |t        j                  k(  r7|t        j                  k(  r$|t        j                  z
  j                  ||      S t        |      |t        |      z  z
  }
|t        |      n|}|
||z  z  }
|j                  rt        |      dk7  r{dd	lm} t#        |j%                  |            D ]  \  }}|j&                  r|d
k(  s n d
k  r;j)                  |      \  }}|
dt*        z  t,        z   |t        |       d      z  z  }
|
S # t
        $ r" |j                  |||      }	t        |	      cY S w xY w)Nr   r  Tr  rD   r  r7  r  r  r  r  )rB   togetherr   r&  r  ra  r"  r5   r  r   r   r=   r   r;   r"   r  r  r  r  rV  r  r   r   )r0   rm   r  r(  r*  r  r\   crg   r    r   r  r   r   r   r  s                   r1   r:  zlog._eval_as_leading_term*  s    yy|$$& #%19DIIaa 	::ad:3DAq 558q!D&!AAv ;t DEEq6M :!qvv+155L11!$1?? !fqT{"s1v4qv ==RUaZI$QYYq\2 4||qAv 1u11!4qr!tBwy"U)Q777
7  	&&qt$&?Cs8O	s   F5 5(G G ry   r,   rM  rN  r   ) rz   r{   r|   r   tTupler   __annotations__r   r   r~   r   r   r8   rO  r   rE   rP  r   r   rv  r  r   r]   r   r   r   rW   r  r`   r  r  r:  r   r2   r1   r5   r5   [  s    B ,ffa//0N5 {L {Lz 4  4 7r	8+@!	"1?7*:s$j*r2   r5   c                        e Zd ZdZ eej                  dd       ej                  fZe	dd       Z
ddZd Zd Zd	 Zdd
Zd fd	Zd Z xZS )LambertWa  
    The Lambert W function $W(z)$ is defined as the inverse
    function of $w \exp(w)$ [1]_.

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

    In other words, the value of $W(z)$ is such that $z = W(z) \exp(W(z))$
    for any complex number $z$.  The Lambert W function is a multivalued
    function with infinitely many branches $W_k(z)$, indexed by
    $k \in \mathbb{Z}$.  Each branch gives a different solution $w$
    of the equation $z = w \exp(w)$.

    The Lambert W function has two partially real branches: the
    principal branch ($k = 0$) is real for real $z > -1/e$, and the
    $k = -1$ branch is real for $-1/e < z < 0$. All branches except
    $k = 0$ have a logarithmic singularity at $z = 0$.

    Examples
    ========

    >>> from sympy import LambertW
    >>> LambertW(1.2)
    0.635564016364870
    >>> LambertW(1.2, -1).n()
    -1.34747534407696 - 4.41624341514535*I
    >>> LambertW(-1).is_real
    False

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Lambert_W_function
    r   Frb   c                    |t         j                  k(  r | |      S |t         j                  }|j                  r(|j                  rt         j                  S |t         j                  u rt         j                  S |dt         j                  z  k(  rt         j
                  S |t        d       dz  k(  rt        d       S |dt        d      z  k(  rt        d      S |t         dz  k(  rt        t        z  dz  S |t        dt         j                  z         k(  rt         j                  S |t         j                  u rt         j                  S |j                  rt         j                  S t        |j                        r|j                  rt         j                  S |t         j
                  u rb|t         dz  k(  rt         t        z  dz  S |dt         j                  z  k(  rt         j
                  S |dt        d      z  k(  rt        d       S y y )Nr   r   rD   r  )r   r   rY   r   r=   r   r5   r   r   r-   r   r   r_   r   )r   rm   r  s      r1   r   zLambertW.eval|  s}   ;q6MYA99yyvvAFF{uuBqvvI~}}$SVGAI~AwAc!fH}1vRCEztAvCAFF
O#vvAJJzz!yyvvQYYyy)))RCEzr"uQwbi}}$bRj
{" ! r2   c                    | j                   d   }t        | j                         dk(  r"|dk(  rPt        |      |dt        |      z   z  z  S | j                   d   }|dk(  rt        ||      |dt        ||      z   z  z  S t        | |      )z?
        Return the first derivative of this function.
        r   rD   )rB   rJ  r  r	   )r0   r7   rm   r  s       r1   r   zLambertW.fdiff  s     IIaLtyy>Q1}{Aq8A;$788		!A1}1~q!hq!n*<'=>> x00r2   c                 |   | j                   d   }t        | j                         dk(  rt        j                  }n| j                   d   }|j                  rC|dt        j
                  z  z   j                  ry|dt        j
                  z  z   j                  ryy |dz   j                  r[|j                  r!|dt        j
                  z  z   j                  ry|j                  s |dt        j
                  z  z   j                  ryy t        |j                        r't        |dz   j                        r|j                  ryy y y r  )rB   rJ  r   r   rY   r   r   rw  r;   rb  r   r   )r0   rm   r  s      r1   r   zLambertW._eval_is_extended_real  s    IIaLtyy>QA		!A99AaffH))ah,.. /!e__}}!ah,!;!;!!a!AFF(l%B%B &Cqyy!iQ&@!! " 'A!r2   c                 4    | j                   d   j                  S r   )rB   rU   r/   s    r1   rW   zLambertW._eval_is_finite  s    yy|%%%r2   c                      | j                   | j                   }|j                   | j                   k(  r>t        | j                  d   j                        r| j                  d   j                  ryy y |j                  S r  )r>   rB   r   rY   r   r  s     r1   r   zLambertW._eval_is_algebraic  sd    DIItyy!66TYY1--.499Q<3L3L 4M. >>!r2   c                     t        | j                        dk(  r_| j                  d   } |j                  |d      j                         }|j                  s| j                  |      S  |j                  |      S y rI  )rJ  rB   r&  r9  rY   r>   r"  )r0   rm   r  r(  r    r*  s         r1   r:  zLambertW._eval_as_leading_term  sf    tyy>Q))A,C388Aq>((*D<<yy&&3&&q)) r2   c           
      R   t        | j                        dk(  rddlm} ddlm} | j                  d   j                  |||      } |j                  ||      }d}	|j                  r|j                  }	 |||	z        dk\  rqt        t        d |||	z              D 
cg c]@  }
t        j                   |
dz
  z  t        |
      |
dz
  z  z  t        |
dz
        z  ||
z  z  B c}
 }t!        |      }nt        j"                  }| |||z  |      z   S t$        | M  |||      S c c}
w )NrD   r   r  r  r  r  r   )rJ  rB   r  r  r  r  r3  r"  r   r-   r   r2  r   r=   r   r   r   r   superr  )r0   rm   r   r  r(  r  r  r    ltlter  r[   r   s               r1   r  zLambertW._eval_nseries  s#   tyy>QC0))A,&&qAD&9C$$$QT2BCyyffqu~";@GAcEN;SU67 EE6QU+GAJQ,??#AE*++.62 U V&q)FFuQT1~%%w$Q400Us   AD$c                     | j                   d   }t        | j                         dk(  r|j                  S t        |j                  | j                   d   j                  g      S r  )rB   rJ  rY   r   )r0   rm   s     r1   r`   zLambertW._eval_is_zero  sK    IIaLtyy>Q99aii1)=)=>??r2   r,   ry   r   rN  )rz   r{   r|   r   r   r   r   r~   r   rO  r   r   r   rW   r   r:  r  r`   __classcell__)r   s   @r1   r  r  W  sb    !D 1662668I8IJN## ##J1 (&"*1&@r2   r  c            	         i t        d      t        dz  dt        dz  t        ddt        d      z  z
        t        dz  t        d      t        dt        d      z
        z  dt        d      z   z  t        dz  t        ddt        d      z  z         t        t        dd      z  t        d      t        t        d      dz         z  dt        d      z   z  t        t        dd      z  t        d      dz  t        dz  t        d      dz
  t        dz  t        dt        d      z
        t        t        d      dz         z  t        dz  t        d      dz   t        t        dd      z  t        t        d      dz         t        dt        d      z
        z  t        t        dd      z  t        ddt        d      z  dz  z
        t        d	z  t        d       t        d	      z   dt        t        d      dz         z  z  t        d	z  t        ddt        d      z  dz  z         t        t        dd	      z  t        d      t        d	      z   dt        dt        d      z
        z  z  t        t        dd	      z  dt        d      z
  t        d
z  dt        d      z   dt        d      z   z  t        d
z  dt        d      z   t        t        dd
      z  dt        d      z   dt        d      z   z  t        t        dd
      z  iS )Nr  rD   r  r  r   r   r     
      )r%   r   r   r   r2   r1   rd  rd    s   Qa 	
26 	QT!W_rAv	
 	Q$q47{##q47{3R!V 	QT!W_rHQN2 	Q$tAw{##rDG|4b8Aq>6I 	Q!R!V 	Q!R!V 	Qa[Da1--rAv 	Q!R(1a.( 	T!Wq[DT!W--rHQN/B 	QT!Wq !27 q'DH	T$q'A+%6!67b 	QT!Wq !2B#7  
a48	DT!W$5 56Xa_8L!" 	
DGR"W#$ 
d1g!d1g+&R%& 	
DGR(1b/)	
T!Wd1g&Xa_(<) r2   N)B	itertoolsr   typingr   r  sympy.core.addr   sympy.core.cacher   sympy.core.exprr   sympy.core.functionr   r	   r
   r   r   r   r   r   sympy.core.logicr   r   r   sympy.core.mulr   sympy.core.numbersr   r   r   r   r   sympy.core.parametersr   sympy.core.powerr   sympy.core.singletonr   r  r   r   sympy.core.sympifyr   (sympy.functions.combinatorial.factorialsr   r  r    r!   r"   r#   r$   (sympy.functions.elementary.miscellaneousr%   sympy.ntheoryr&   r'   sympy.ntheory.factor_r(   r*   r   r   r-   rZ  r5   r  rd  r   r2   r1   <module>r     s     "  $  N N N ; ;  F F 3   " ) & > M M 9 5 +ch cLF) F)REm Ej@'W j@Z*y( yxZ@x Z@z 	 	r2   