
    sg                        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 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) d dl*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z:  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      ZAed#        ZBy$)%    )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)global_parameters)Pow)Ge)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    Y/var/www/html/venv/lib/python3.12/site-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                   s| t        j                  fS | 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)
        )is_commutativer   Oner-   is_negativecould_extract_minus_signfunc)r0   r-   neg_exps      r1   as_numer_denomzExpBase.as_numer_denom3   sr      "";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.expM   s    
 yy|r2   c                 H    | j                  d      t        | j                   fS )z7
        Returns the 2-tuple (base, exponent).
           )r?   r   rC   r/   s    r1   as_base_expzExpBase.as_base_expT   s     yy|S$))_,,r2   c                 T    | j                  | j                  j                               S r,   )r?   r-   adjointr/   s    r1   _eval_adjointzExpBase._eval_adjointZ   s    yy))+,,r2   c                 T    | j                  | j                  j                               S r,   )r?   r-   	conjugater/   s    r1   _eval_conjugatezExpBase._eval_conjugate]       yy++-..r2   c                 T    | j                  | j                  j                               S r,   )r?   r-   	transposer/   s    r1   _eval_transposezExpBase._eval_transpose`   rM   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_finitec   s9    hh??''''== r2   c                      | j                   | j                   }|j                   | j                   k(  r=|j                  j                  }|ry|j                  j                  rt        |      ryy y |j                  S rR   )r?   rC   r-   is_zerois_rationalr   )r0   szs      r1   _eval_is_rationalzExpBase._eval_is_rationalm   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_zerox   s    xx1----r2   c                 l    | j                         \  }}t        j                  t        ||d      |      S )z;exp(arg)**e -> exp(arg*e) if assumptions allow it.
        Fevaluate)rF   r   _eval_power)r0   otherbes       r1   re   zExpBase._eval_power{   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.productsrj   sympy.concrete.summationsrk   rC   is_Addr;   r   fromiter
isinstancer?   functionlimits)r0   hintsrj   rk   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rE   )__name__
__module____qualname__
unbranchedr   ComplexInfinity_singularitiespropertyr.   r8   rA   r-   rF   rI   rL   rP   rX   r^   ra   re   rx    r2   r1   r*   r*   $   ss    J'')N 4  --//	!.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#   rC   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"   rC   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?   rC   )r0   rf   s     r1   re   zexp_polar._eval_power   s    yy1e+,,r2   c                 8    | j                   d   j                  ryy )Nr   T)rC   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   )rC   r   r<   r*   rF   r/   s    r1   rF   zexp_polar.as_base_exp   s1    99Q<1;""4((r2   N)rz   r{   r|   __doc__is_polaris_comparabler   r   re   r   rF   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.
        rE   )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   rC   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   rE   FTrc   )2sympy.calculusr   sympy.matrices.matrixbaser   sympy.sets.setexprr   sympy.simplify.simplifyr   rt   r-   r   
exp_is_powr   r   r   	is_Numberr   rZ   r<   r   r`   Zeror~   r5   rC   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   appendrr   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   .8.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   )nrn   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   rC   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 )Nrd   F)is_Powrt   r-   r   rF   )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   )rC   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_complexrT   )r    s    r1   complex_extended_negativez7exp._eval_is_complex.<locals>.complex_extended_negative  s     .. ***s    r   )r   rC   )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 rR   )r-   r   r   r[   r   rZ   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   rC   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                 z   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 |j"                  rt%        d	| z        t'        fd
|j(                  D              r| S t+        d      }|}	  | |	j,                  ||      |      j/                         }|r|dkD  r |||z        }t        |      j3                  ||      }t        |      |j5                  ||
|z
        z  }||t7        |      ini }|j5                  |      | k(  r|S |r$|dkD  r| ||
|z
  |z  |      ||dz
  |z  z  z  z  }n| ||
|z
  |z  |      z  }|j9                         } ||dd      }d }t;        d|g      }|j=                  t        j>                  |z  tA        t        j>                  |z              }|S # t0        t$        f$ r d}Y ,w xY w)Nr   )signceiling)limitOrderpowsimpr   logxrE   Cannot expand %s around 0c              3   6   K   | ]  }t        |        y wr,   )rt   )rm   r    r  s     r1   ro   z$exp._eval_nseries.<locals>.<genexpr>  s     :z#t$:s   tr  Tr-   r   combinec                 :    | j                   xr | j                  dv S )N)         )r   q)rn   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   rS   r   anyrC   r   as_leading_termgetnNotImplementedError_taylorsubsr5   r   r   replacer   r   )r0   rn   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74@AA:		::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:9H:c                     g }d }t        |      D ]T  }| j                  || j                  d   |      }|j                  ||      }|j	                  |j                                V t        | S )Nr   )r   )ranger   rC   nseriesr   r!  r   )r0   rn   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  Fr  )sympy.calculus.utilr   rC   cancelr#  r'  r   r   rt   r#   r   r-   r  rS   r   )r0   rn   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_cos3  s.    @1S5zAc!C%"Q$,////r2   c                 H    ddl m} d ||dz        z   d ||dz        z
  z  S )Nr   )tanhrE   r   )%sympy.functions.elementary.hyperbolicrA  )r0   r    r<  rA  s       r1   _eval_rewrite_as_tanhzexp._eval_rewrite_as_tanh7  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_sqrt;  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 NrE   r   )r   rC   rt   r5   lenr   r   )r0   r    r<  r   logss        r1   _eval_rewrite_as_Powzexp._eval_rewrite_as_PowD  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 -^>*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  K  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

    rC   c                 H    |dk(  rd| j                   d   z  S t        | |      )z?
        Returns the first derivative of the function.
        rE   r   )rC   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   rE   r   Fr   rS  r   T)ratsimp)3r   r   r   r   r   r   r   r~   r&   r5   
ValueErrorr   r   rZ   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=   rr   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   rF   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   rE   Tr-   r  r   )r  r
  r   r   r   )r   rn   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   )rk   rj   forceFfactorr   )r   rl  rE   c              3   >   K   | ]  \  }}|t        |      z    y wr,   r4   )rm   valr   s      r1   ro   z'log._eval_expand_log.<locals>.<genexpr>>  s      DQ3s8 Ds   r   )%sympy.concreterk   rj   getrJ  rC   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   rk   rj   rl  rm  r    r   logargr   rW  nonposrn   r   rg   rh   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  rC   r?   r   )r0   r<  r
   r{  r|  rW  s         r1   _eval_simplifyzlog._eval_simplifyd  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)rC   r   r$   r   r   r    rq  r5   )r0   r   rw   sargsarg_abssarg_args         r1   r   zlog.as_real_imago  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   rE   TF)r?   rC   rZ   r[   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?   rC   rZ   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   rC   rU   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   )rC   r   r   r   rZ   )r0   r]   s     r1   r   zlog._eval_is_complex  s,    IIaL!,,	!))(<=>>r2   c                 R    | j                   d   }|j                  ry|j                  S Nr   F)rC   rZ   rV   rW   s     r1   rX   zlog._eval_is_finite  s#    iil;;}}r2   c                 :    | j                   d   dz
  j                  S Nr   rE   r  r/   s    r1   r  zlog._eval_is_extended_positive  s    		!q 666r2   c                 :    | j                   d   dz
  j                  S r  )rC   rZ   r/   s    r1   ra   zlog._eval_is_zero  s    		!q )))r2   c                 :    | j                   d   dz
  j                  S r  )rC   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positiverE   kr5  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   hasrF   leadtermra  )r   rn   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   rC   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   rn   r   r  r)  r  r   r   r    r  r]   r  r5  r/  r  r   rg   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  rE   r  r  r  r  r  r  )rC   togetherr   r'  r  ra  r#  r5   r  r   r   r<   r   r=   r"   r  r  r  r  rV  r  r   r   )r0   rn   r  r)  r+  r  r]   crh   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   rF   rP  r   r   rv  r  r   r^   r   r   r   rX   r  ra   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   Frc   c                 :   |t         j                  k(  r | |      S |t         j                  }|j                  r|j                  rt         j                  S |t         j                  u rt         j                  S t        d      }|j                  |t        |      z        }|Lt        ||   t         j                  z  t         j                        t         j                  u rt        ||         S |t        d       dz  k(  rt        d       S |j                  ||dz   z  t        |      z        }|%||   j                  du r||   t        ||         z  S |j                  t         j                  d|z  z  |z        }|d||   z  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 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   rE   Tr   r  )r   r   rZ   r   r<   r   r  r5   r   truer   r   r   r-   r   r   r`   r   r   )r   rn   r  r  results        r1   r   zLambertW.eval  s   ;q6MYA99yyvvAFF{uuS	A WWQs1vX&F!b166)9155&AQVV&K6!9~%SVGAI~Aw WWQ1Xc!f_-F!fQi&;&;t&CayVAY// WWQVVac]1_-F!6!9}$RCEztAvCAFF
O#vvAJJzz!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   rE   )rC   rJ  r  r	   )r0   r7   rn   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  )rC   rJ  r   r   rZ   r   r   rw  r=   rb  r   r   )r0   rn   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   )rC   rV   r/   s    r1   rX   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?   rC   r   rZ   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  rC   r'  r9  rZ   r?   r#  )r0   rn   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 )NrE   r   r  r  r  r  r   )rJ  rC   r  r  r  r  r4  r#  r   r-   r   r3  r   r<   r   r   r   r   superr  )r0   rn   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  )rC   rJ  rZ   r   )r0   rn   s     r1   ra   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   rX   r   r:  r  ra   __classcell__)r   s   @r1   r  r  \  sb    !D 1662668I8IJN-# -#^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  rE   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)C	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   sympy.core.parametersr   sympy.core.powerr   sympy.core.relationalr   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 ; ;  7 7 3   $ " ) & > M M 9 5 +eh ePF) F)REm El@'W l@^*y( yxd@x d@N 	 	r2   